solidus_papertrail 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +21 -0
  5. data/Gemfile +18 -0
  6. data/LICENSE +26 -0
  7. data/README.md +45 -0
  8. data/Rakefile +21 -0
  9. data/app/assets/javascripts/admin/solidus_papertrail.js +1 -0
  10. data/app/assets/javascripts/spree/backend/solidus_papertrail.js +0 -0
  11. data/app/assets/javascripts/spree/frontend/solidus_papertrail.js +0 -0
  12. data/app/assets/javascripts/store/solidus_papertrail.js +1 -0
  13. data/app/assets/stylesheets/admin/solidus_papertrail.css +3 -0
  14. data/app/assets/stylesheets/spree/backend/solidus_papertrail.css +0 -0
  15. data/app/assets/stylesheets/spree/frontend/solidus_papertrail.css +0 -0
  16. data/app/assets/stylesheets/store/solidus_papertrail.css +3 -0
  17. data/app/controllers/spree/admin/base_controller_decorator.rb +5 -0
  18. data/app/controllers/spree/admin/orders_controller_decorator.rb +22 -0
  19. data/app/models/paper_trail/version_decorator.rb +5 -0
  20. data/app/models/spree/adjustment_decorator.rb +15 -0
  21. data/app/models/spree/adjustment_version.rb +5 -0
  22. data/app/models/spree/line_item_decorator.rb +15 -0
  23. data/app/models/spree/line_item_version.rb +5 -0
  24. data/app/models/spree/order_decorator.rb +15 -0
  25. data/app/models/spree/order_version.rb +5 -0
  26. data/app/models/spree/payment_decorator.rb +15 -0
  27. data/app/models/spree/payment_version.rb +5 -0
  28. data/app/models/spree/return_authorization_decorator.rb +15 -0
  29. data/app/models/spree/return_authorization_version.rb +5 -0
  30. data/app/models/spree/shipment_decorator.rb +15 -0
  31. data/app/models/spree/shipment_version.rb +5 -0
  32. data/app/overrides/add_order_history_to_order_menu.rb +8 -0
  33. data/app/services/versions_adapter.rb +24 -0
  34. data/app/services/yaml_adapter.rb +27 -0
  35. data/app/views/spree/admin/orders/_adjustment_versions.html.erb +48 -0
  36. data/app/views/spree/admin/orders/_line_item_versions.html.erb +52 -0
  37. data/app/views/spree/admin/orders/_object_changes.html.erb +41 -0
  38. data/app/views/spree/admin/orders/_order_versions.html.erb +45 -0
  39. data/app/views/spree/admin/orders/_payment_versions.html.erb +51 -0
  40. data/app/views/spree/admin/orders/_return_authorization_versions.html.erb +48 -0
  41. data/app/views/spree/admin/orders/_shipment_versions.html.erb +52 -0
  42. data/app/views/spree/admin/orders/versions.html.erb +25 -0
  43. data/bin/rails +7 -0
  44. data/config/locales/en.yml +21 -0
  45. data/config/locales/es.yml +5 -0
  46. data/config/routes.rb +11 -0
  47. data/db/migrate/20160421221937_create_versions.rb +87 -0
  48. data/lib/generators/solidus_papertrail/install/install_generator.rb +31 -0
  49. data/lib/solidus_papertrail.rb +4 -0
  50. data/lib/solidus_papertrail/engine.rb +22 -0
  51. data/lib/solidus_papertrail/factories.rb +6 -0
  52. data/lib/solidus_papertrail/version.rb +3 -0
  53. data/solidus_papertrail.gemspec +36 -0
  54. data/spec/features/admin/order_history_spec.rb +94 -0
  55. data/spec/spec_helper.rb +32 -0
  56. data/spec/support/capybara.rb +12 -0
  57. data/spec/support/database_cleaner.rb +24 -0
  58. data/spec/support/factory_girl.rb +8 -0
  59. data/spec/support/feature_helper.rb +10 -0
  60. data/spec/support/spree.rb +7 -0
  61. metadata +269 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f76131771daeafcb5091ed3aab30d981a3b6227b
4
+ data.tar.gz: 7363f77964e6871eae1622111658ec1ce5293ec1
5
+ SHA512:
6
+ metadata.gz: b484d08640228250b6bd2604fb877d4a9f0fa16e42fe722c2ff687ab93dd57ec19b5eafd4e5934be6717760deecec9ceca753bf2ecd8336e9990f35ff465a941
7
+ data.tar.gz: 71f64c91bedb14f237f8435a7dfe0cb2baf8ffd510ba0add5b4389c97c0002b8da833e40e748bebd44d33f48fedbc4eedd5b6c42b7bf60b456feaae43d77aee5
@@ -0,0 +1,14 @@
1
+ \#*
2
+ *~
3
+ .#*
4
+ .DS_Store
5
+ .idea
6
+ .project
7
+ .sass-cache
8
+ coverage
9
+ Gemfile.lock
10
+ tmp
11
+ nbproject
12
+ pkg
13
+ *.swp
14
+ spec/dummy
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,21 @@
1
+ sudo: false
2
+ cache: bundler
3
+ language: ruby
4
+ rvm:
5
+ - 2.3.1
6
+ env:
7
+ matrix:
8
+ - SOLIDUS_BRANCH=v1.0 DB=postgres
9
+ - SOLIDUS_BRANCH=v1.1 DB=postgres
10
+ - SOLIDUS_BRANCH=v1.2 DB=postgres
11
+ - SOLIDUS_BRANCH=v1.3 DB=postgres
12
+ - SOLIDUS_BRANCH=v1.4 DB=postgres
13
+ - SOLIDUS_BRANCH=v2.0 DB=postgres
14
+ - SOLIDUS_BRANCH=master DB=postgres
15
+ - SOLIDUS_BRANCH=v1.0 DB=mysql
16
+ - SOLIDUS_BRANCH=v1.1 DB=mysql
17
+ - SOLIDUS_BRANCH=v1.2 DB=mysql
18
+ - SOLIDUS_BRANCH=v1.3 DB=mysql
19
+ - SOLIDUS_BRANCH=v1.4 DB=mysql
20
+ - SOLIDUS_BRANCH=v2.0 DB=mysql
21
+ - SOLIDUS_BRANCH=master DB=mysql
data/Gemfile ADDED
@@ -0,0 +1,18 @@
1
+ source "https://rubygems.org"
2
+
3
+ branch = ENV.fetch('SOLIDUS_BRANCH', 'master')
4
+ gem "solidus", github: "solidusio/solidus", branch: branch
5
+ gem "solidus_auth_devise"
6
+
7
+ if branch == 'master' || branch >= "v2.0"
8
+ gem "rails-controller-testing", group: :test
9
+ end
10
+
11
+ gem 'pg'
12
+ gem 'mysql2'
13
+
14
+ group :development, :test do
15
+ gem "pry-rails"
16
+ end
17
+
18
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Copyright (c) 2014 [name of plugin creator]
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+ * Neither the name Spree nor the names of its contributors may be used to
13
+ endorse or promote products derived from this software without specific
14
+ prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,45 @@
1
+ SolidusPapertrail
2
+ ===============
3
+
4
+ [![Build Status](https://travis-ci.org/solidusio-contrib/solidus_papertrail.svg?branch=master)](https://travis-ci.org/solidusio-contrib/solidus_papertrail)
5
+
6
+ Introduction goes here.
7
+
8
+ Installation
9
+ ------------
10
+
11
+ Add solidus_papertrail to your Gemfile:
12
+
13
+ ```ruby
14
+ gem 'solidus_papertrail'
15
+ ```
16
+
17
+ Bundle your dependencies and run the installation generator:
18
+
19
+ ```shell
20
+ bundle
21
+ bundle exec rails g solidus_papertrail:install
22
+ ```
23
+
24
+ Testing
25
+ -------
26
+
27
+ Be sure to bundle your dependencies and then create a dummy test app for the specs to run against.
28
+
29
+ ```shell
30
+ bundle
31
+ bundle exec rake test_app
32
+ bundle exec rspec spec
33
+ ```
34
+
35
+ When testing your applications integration with this extension you may use it's factories.
36
+ Simply add this require statement to your spec_helper:
37
+
38
+ ```ruby
39
+ require 'solidus_papertrail/factories'
40
+ ```
41
+
42
+
43
+ Copyright (c) 2014 [Acid Labs][acidlabs], released under the New BSD License
44
+
45
+ [acidlabs]: https://github.com/acidlabs
@@ -0,0 +1,21 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core/rake_task'
5
+ require 'spree/testing_support/common_rake'
6
+
7
+ RSpec::Core::RakeTask.new
8
+
9
+ task :default do
10
+ if Dir["spec/dummy"].empty?
11
+ Rake::Task[:test_app].invoke
12
+ Dir.chdir("../../")
13
+ end
14
+ Rake::Task[:spec].invoke
15
+ end
16
+
17
+ desc 'Generates a dummy app for testing'
18
+ task :test_app do
19
+ ENV['LIB_NAME'] = 'solidus_papertrail'
20
+ Rake::Task['common:test_app'].invoke("Spree::User")
21
+ end
@@ -0,0 +1 @@
1
+ //= require admin/spree_backend
@@ -0,0 +1 @@
1
+ //= require store/spree_frontend
@@ -0,0 +1,3 @@
1
+ /*
2
+ *= require admin/spree_backend
3
+ */
@@ -0,0 +1,3 @@
1
+ /*
2
+ *= require store/spree_frontend
3
+ */
@@ -0,0 +1,5 @@
1
+ Spree::BaseController.class_eval do
2
+ def user_for_paper_trail
3
+ spree_current_user.nil? ? 'Public User' : spree_current_user.id
4
+ end
5
+ end
@@ -0,0 +1,22 @@
1
+ Spree::Admin::OrdersController.class_eval do
2
+ def versions
3
+ @order = Spree::Order.find_by_number params[:id]
4
+
5
+ @versions = VersionsAdapter.create([@order])
6
+
7
+ payments = @order.payments.order(updated_at: :asc)
8
+ @payment_versions = VersionsAdapter.create(payments)
9
+
10
+ shipments = @order.shipments.order(updated_at: :desc)
11
+ @shipment_versions = VersionsAdapter.create(shipments)
12
+
13
+ line_items = @order.line_items.order(updated_at: :desc)
14
+ @line_item_versions = VersionsAdapter.create(line_items)
15
+
16
+ adjustments = @order.all_adjustments.order(updated_at: :desc)
17
+ @adjustment_versions = VersionsAdapter.create(adjustments)
18
+
19
+ return_authorizations = @order.return_authorizations.order(updated_at: :desc)
20
+ @return_authorization_versions = VersionsAdapter.create(return_authorizations)
21
+ end
22
+ end
@@ -0,0 +1,5 @@
1
+ module PaperTrail
2
+ Version.class_eval do
3
+ self.abstract_class = true
4
+ end
5
+ end
@@ -0,0 +1,15 @@
1
+ module Spree
2
+ Adjustment.class_eval do
3
+ has_paper_trail class_name: 'Spree::AdjustmentVersion'
4
+
5
+ attr_accessor :who, :version_changes, :version_id, :version_event, :version_date
6
+
7
+ def who=(user_id)
8
+ begin
9
+ @who = Spree::User.find(user_id).full_name
10
+ rescue
11
+ @who = 'Unknown'
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ module Spree
2
+ class AdjustmentVersion < PaperTrail::Version
3
+ self.table_name = :spree_adjustment_versions
4
+ end
5
+ end
@@ -0,0 +1,15 @@
1
+ module Spree
2
+ LineItem.class_eval do
3
+ has_paper_trail class_name: 'Spree::LineItemVersion'
4
+
5
+ attr_accessor :who, :version_changes, :version_id, :version_event, :version_date
6
+
7
+ def who=(user_id)
8
+ begin
9
+ @who = Spree::User.find(user_id).full_name
10
+ rescue
11
+ @who = 'Unknown'
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ module Spree
2
+ class LineItemVersion < PaperTrail::Version
3
+ self.table_name = :spree_line_item_versions
4
+ end
5
+ end
@@ -0,0 +1,15 @@
1
+ module Spree
2
+ Order.class_eval do
3
+ has_paper_trail class_name: 'Spree::OrderVersion'
4
+
5
+ attr_accessor :who, :version_changes, :version_id, :version_event, :version_date
6
+
7
+ def who=(user_id)
8
+ begin
9
+ @who = Spree::User.find(user_id).full_name
10
+ rescue
11
+ @who = 'Unknown'
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ module Spree
2
+ class OrderVersion < PaperTrail::Version
3
+ self.table_name = :spree_order_versions
4
+ end
5
+ end
@@ -0,0 +1,15 @@
1
+ module Spree
2
+ Payment.class_eval do
3
+ has_paper_trail class_name: 'Spree::PaymentVersion'
4
+
5
+ attr_accessor :who, :version_changes, :version_id, :version_event, :version_date
6
+
7
+ def who=(user_id)
8
+ begin
9
+ @who = Spree::User.find(user_id).full_name
10
+ rescue
11
+ @who = ""
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ module Spree
2
+ class PaymentVersion < PaperTrail::Version
3
+ self.table_name = :spree_payment_versions
4
+ end
5
+ end
@@ -0,0 +1,15 @@
1
+ module Spree
2
+ ReturnAuthorization.class_eval do
3
+ has_paper_trail class_name: 'Spree::ReturnAuthorizationVersion'
4
+
5
+ attr_accessor :who, :version_changes, :version_id, :version_event, :version_date
6
+
7
+ def who=(user_id)
8
+ begin
9
+ @who = Spree::User.find(user_id).full_name
10
+ rescue
11
+ @who = ""
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ module Spree
2
+ class ReturnAuthorizationVersion < PaperTrail::Version
3
+ self.table_name = :spree_return_authorization_versions
4
+ end
5
+ end
@@ -0,0 +1,15 @@
1
+ module Spree
2
+ Shipment.class_eval do
3
+ has_paper_trail class_name: 'Spree::ShipmentVersion'
4
+
5
+ attr_accessor :who, :version_changes, :version_id, :version_event, :version_date
6
+
7
+ def who=(user_id)
8
+ begin
9
+ @who = Spree::User.find(user_id).full_name
10
+ rescue
11
+ @who = ""
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ module Spree
2
+ class ShipmentVersion < PaperTrail::Version
3
+ self.table_name = :spree_shipment_versions
4
+ end
5
+ end
@@ -0,0 +1,8 @@
1
+ Deface::Override.new( virtual_path: 'spree/admin/shared/_order_submenu',
2
+ name: 'order_history_menu',
3
+ insert_bottom: "[data-hook='admin_order_tabs']",
4
+ text: "
5
+ <li <%== 'class=\"active\"' if current == 'Order History' %>><%= link_to_with_icon 'icon-shopping-cart', Spree.t(:order_history), versions_admin_order_path(@order) %></li>
6
+ "
7
+
8
+ )
@@ -0,0 +1,24 @@
1
+ class VersionsAdapter
2
+
3
+ def self.create(elements)
4
+ collection = []
5
+ elements.each do |element|
6
+ if element.respond_to?(:versions)
7
+ versions = element.versions.order(:object, created_at: :asc)
8
+ versions.each do |version|
9
+ prototype = version.object.nil? ?
10
+ element.class.new :
11
+ YamlAdapter.new(version.object, element.class).deserialize
12
+ prototype.who = version.whodunnit
13
+ prototype.version_id = version.id
14
+ prototype.version_event = version.event
15
+ prototype.version_changes = version.object_changes
16
+ prototype.version_date = version.created_at
17
+ collection << prototype
18
+ end
19
+ collection << element
20
+ end
21
+ end
22
+ collection
23
+ end
24
+ end
@@ -0,0 +1,27 @@
1
+ class YamlAdapter
2
+ attr_reader :payload, :klass
3
+
4
+ def initialize text, klass
5
+ @data = YAML.load(text)
6
+ @klass = klass
7
+ end
8
+
9
+ def deserialize
10
+ @klass.new(permitted_data)
11
+ end
12
+
13
+ private
14
+
15
+ # The below two methods prevent papertrail from
16
+ # attempting to instantiate models with attributes
17
+ # they do not have definitions for or do not have
18
+ # the corresponding columns in the database.
19
+ #
20
+ # Both cases are exceptional, so we filter this here.
21
+ def permitted_data
22
+ keys = @klass.column_names.to_set
23
+ @data.keep_if do |key, _|
24
+ keys.include?(key)
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,48 @@
1
+ <fieldset class="no-border-bottom">
2
+ <legend align="center" class="" data-hook="">
3
+ <%= Spree::AdjustmentVersion.model_name.human %>
4
+ </legend>
5
+ </fieldset>
6
+
7
+ <table id="adjustment-history">
8
+ <thead>
9
+ <tr>
10
+ <th><%= Spree::AdjustmentVersion.human_attribute_name("version_id") %></th>
11
+ <th><%= Spree::AdjustmentVersion.human_attribute_name("id") %></th>
12
+ <th><%= Spree::AdjustmentVersion.human_attribute_name("amount") %></th>
13
+ <th><%= Spree::AdjustmentVersion.human_attribute_name("label") %></th>
14
+ <th><%= Spree::AdjustmentVersion.human_attribute_name("event") %></th>
15
+ <th><%= Spree::AdjustmentVersion.human_attribute_name("changes") %></th>
16
+ <th><%= Spree::AdjustmentVersion.human_attribute_name("user") %></th>
17
+ <th><%= Spree::AdjustmentVersion.human_attribute_name("created") %></th>
18
+ </tr>
19
+ </thead>
20
+
21
+ <tbody>
22
+ <% @adjustment_versions.each do |adjustment| %>
23
+ <% if adjustment.version_id %>
24
+ <tr>
25
+ <td><%= adjustment.version_id %></td>
26
+ <td><%= adjustment.id %></td>
27
+ <td><%= number_to_currency adjustment.amount %></td>
28
+ <td><%= adjustment.label %></td>
29
+ <td><%= adjustment.version_event %></td>
30
+ <td class="align-center"><%= render partial: 'object_changes', locals: { object: adjustment } %></td>
31
+ <td><%= adjustment.who %></td>
32
+ <td><%= pretty_time(adjustment.version_date) %></td>
33
+ </tr>
34
+ <% else %>
35
+ <tr>
36
+ <td></td>
37
+ <td><%= adjustment.id %></td>
38
+ <td><%= number_to_currency adjustment.amount %></td>
39
+ <td><%= adjustment.label %></td>
40
+ <td></td>
41
+ <td></td>
42
+ <td></td>
43
+ <td><%= pretty_time(adjustment.updated_at) %></td>
44
+ </tr>
45
+ <% end %>
46
+ <% end %>
47
+ </tbody>
48
+ </table>
OSZAR »