solidus_ship_compliant 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 (50) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.rspec +1 -0
  4. data/.rubocop.yml +231 -0
  5. data/.travis.yml +21 -0
  6. data/Gemfile +19 -0
  7. data/LICENSE +26 -0
  8. data/README.md +49 -0
  9. data/Rakefile +21 -0
  10. data/app/assets/javascripts/spree/backend/solidus_ship_complaint.js +2 -0
  11. data/app/assets/javascripts/spree/frontend/solidus_ship_complaint.js +2 -0
  12. data/app/assets/stylesheets/spree/backend/solidus_ship_complaint.css +4 -0
  13. data/app/assets/stylesheets/spree/frontend/solidus_ship_complaint.css +4 -0
  14. data/app/controllers/spree/admin/orders_controller_decorator.rb +7 -0
  15. data/app/controllers/spree/admin/ship_compliant_settings_controller.rb +27 -0
  16. data/app/controllers/spree/checkout_controller_decorator.rb +6 -0
  17. data/app/models/spree/calculator/ship_compliant_calculator.rb +83 -0
  18. data/app/models/spree/ship_compliant.rb +96 -0
  19. data/app/models/spree/taxon_decorator.rb +11 -0
  20. data/app/models/spree/variant_decorator.rb +73 -0
  21. data/app/overrides/spree/admin/shared/_configuration_menu/_add_ship_compliant_config_menu.html.erb.deface +3 -0
  22. data/app/views/spree/admin/shared/_ship_complaint_tabs.html.erb +9 -0
  23. data/app/views/spree/admin/ship_compliant_settings/edit.html.erb +30 -0
  24. data/bin/rails +7 -0
  25. data/config/locales/en.yml +23 -0
  26. data/config/routes.rb +5 -0
  27. data/lib/generators/solidus_ship_compliant/install/install_generator.rb +20 -0
  28. data/lib/solidus_ship_compliant.rb +2 -0
  29. data/lib/solidus_ship_compliant/configuration.rb +7 -0
  30. data/lib/solidus_ship_compliant/engine.rb +31 -0
  31. data/lib/solidus_ship_compliant/error.rb +4 -0
  32. data/lib/solidus_ship_compliant/factories.rb +6 -0
  33. data/lib/solidus_ship_compliant/version.rb +3 -0
  34. data/lib/tasks/solidus_ship_compliant/export.rake +78 -0
  35. data/solidus_ship_compliant.gemspec +35 -0
  36. data/spec/controllers/admin/ship_compliant_settings_controller_spec.rb +39 -0
  37. data/spec/factories/variant_factory_override.rb +0 -0
  38. data/spec/features/checkout_spec.rb +0 -0
  39. data/spec/models/calculator/ship_compliant_calculator_spec.rb +19 -0
  40. data/spec/models/spree/ship_compliant_spec.rb +21 -0
  41. data/spec/models/spree/taxon_spec.rb +16 -0
  42. data/spec/models/spree/variant_spec.rb +70 -0
  43. data/spec/spec_helper.rb +24 -0
  44. data/spec/support/ability.rb +15 -0
  45. data/spec/support/database_cleaner.rb +23 -0
  46. data/spec/support/devise.rb +5 -0
  47. data/spec/support/factory_bot.rb +5 -0
  48. data/spec/support/preferences.rb +5 -0
  49. data/spec/support/spree.rb +14 -0
  50. metadata +307 -0
@@ -0,0 +1,78 @@
1
+ namespace :solidus_ship_compliant do
2
+ desc 'Export products to Ship Compliant'
3
+ task :export_products, [:product_ids] => :environment do |_task, args|
4
+ # Export brands in case that were not exported
5
+ Rake::Task['solidus_ship_compliant:export_brands'].invoke
6
+
7
+ # Get brand and category taxonomies
8
+ brand_taxnomy = Spree::Taxonomy.find_by(name: 'Brand')
9
+ category_taxonomy = Spree::Taxonomy.find_by(name: 'Categories')
10
+
11
+ product_list(args.extras).in_groups_of(100) do |product_ids|
12
+ # Create Ship Compliant product per Spree::Product variants
13
+ Spree::Product.where(id: product_ids).each do |product|
14
+ brand_taxon = product.taxons.where(taxonomy: brand_taxnomy).first
15
+ category_taxon = product.taxons.where(taxonomy: category_taxonomy).first
16
+
17
+ product.variants.each do |variant|
18
+ result = ShipCompliant::AddUpdateProduct.product({
19
+ bottle_size_ms: variant.bottle_size,
20
+ brand_key: brand_taxon.brand_key,
21
+ default_case: variant.default_case || '12',
22
+ default_wholesale_case_price: variant.default_wholesale_case_price || '270',
23
+ description: variant.description || 'Denver Snow Flake Cab 2013',
24
+ percent_alcohol: variant.percent_alcohol || '14.1',
25
+ product_distribution: 'Both',
26
+ product_key: variant.product_key,
27
+ product_type: category_taxon.name, # [Wine, Beer, Cider]
28
+ unit_price: variant.price.to_f,
29
+ varietal: variant.varietal || 'Cabernet Sauvignon',
30
+ vintage: variant.vintage || 2013,
31
+ volume_amount: variant.volumne_amount || 750,
32
+ volume_unit: variant.volume_unit || 'milliliter',
33
+ }, update_mode: 'IgnoreExisting')
34
+
35
+ if result.success?
36
+ puts "Product #{variant.name} added successfully."
37
+ else
38
+ result.errors.each do |error|
39
+ puts error.message
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ desc 'Export brands to Ship Compliant'
48
+ task export_brands: :environment do
49
+ # Get brand taxonomy and taxons
50
+ taxonomy = Spree::Taxonomy.find_by(name: 'Brand')
51
+ taxons = taxonomy.root.children
52
+
53
+ taxons.each do |taxon|
54
+ result = ShipCompliant::AddUpdateBrand.brand({
55
+ key: taxon.brand_key,
56
+ name: taxon.name,
57
+ this_brand_is_bottled_by_a_third_party: true,
58
+ this_brand_is_produced_by_a_third_party: true,
59
+ this_brand_operates_under_a_trade_name: false,
60
+ this_brand_was_acquired_from_a_third_party: false
61
+ })
62
+
63
+ if result.success?
64
+ puts "Brand #{taxon.name} added successfully."
65
+ else
66
+ result.errors.each do |error|
67
+ puts error.message
68
+ end
69
+ end
70
+ end
71
+ end
72
+
73
+ def product_list(sku_list)
74
+ sku_list.present? &&
75
+ Spree::Product.joins(:master).where("spree_variants.sku IN (?)", sku_list) ||
76
+ Spree::Product.joins(:master)
77
+ end
78
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: UTF-8
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+ require 'solidus_ship_compliant/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = 'solidus_ship_compliant'
7
+ s.version = SolidusShipCompliant::VERSION
8
+ s.author = 'Jonathan Tapia'
9
+ s.email = 'jonathan.tapia@magmalabs.io'
10
+ s.homepage = 'http://github.com/jtapia/solidus_ship_compliant'
11
+ s.summary = 'Solidus Engine for Ship compliant tax calculation service'
12
+ s.description = 'Solidus Engine for Ship compliant tax calculation service'
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- spec/*`.split("\n")
16
+ s.require_path = 'lib'
17
+ s.requirements << 'none'
18
+
19
+ solidus_version = ['>= 2.0', '< 3']
20
+ s.add_dependency 'solidus_core', solidus_version
21
+ s.add_dependency 'solidus_support'
22
+ s.add_dependency 'deface', '~> 1.0'
23
+
24
+ s.add_development_dependency 'byebug'
25
+ s.add_development_dependency 'capybara'
26
+ s.add_development_dependency 'selenium-webdriver'
27
+ s.add_development_dependency 'database_cleaner'
28
+ s.add_development_dependency 'factory_bot'
29
+ s.add_development_dependency 'ffaker'
30
+ s.add_development_dependency 'poltergeist'
31
+ s.add_development_dependency 'pry-rails'
32
+ s.add_development_dependency 'rubocop'
33
+ s.add_development_dependency 'rspec-rails'
34
+ s.add_development_dependency 'simplecov'
35
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Admin::ShipCompliantSettingsController do
4
+ stub_authorization!
5
+
6
+ context '#edit' do
7
+ it 'should assign a SolidusShipCompliant::Config and render the view' do
8
+ get :edit
9
+
10
+ expect(assigns(:config)).to be_an_instance_of(SolidusShipCompliant::Configuration)
11
+ expect(response).to render_template('edit')
12
+ end
13
+ end
14
+
15
+ context '#update' do
16
+ let(:config) { SolidusShipCompliant::Config }
17
+
18
+ context 'with existing value' do
19
+ around do |example|
20
+ default_weight = config.get_preference(:username)
21
+ example.run
22
+ config.set_preference(:username, default_weight)
23
+ end
24
+
25
+ it "updates the existing value" do
26
+ expect(config.has_preference?(:username)).to be(true)
27
+ post :update, params: { username: 'user_test' }
28
+ expect(config.send("username")).to eql('user_test')
29
+ end
30
+ end
31
+
32
+ context 'without existing value' do
33
+ it "doesn't produce an error" do
34
+ post :update, params: { 'not_real_parameter_name' => 'not_real' }
35
+ expect(response).to redirect_to(spree.edit_admin_ship_compliant_settings_path)
36
+ end
37
+ end
38
+ end
39
+ end
File without changes
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Calculator::ShipCompliantCalculator do
4
+ let(:calculator) { Spree::Calculator::ShipCompliantCalculator.new }
5
+
6
+ describe '.description' do
7
+ it 'should not be nil' do
8
+ expect(Spree::Calculator::ShipCompliantCalculator.description).to eq Spree.t(:ship_compliant_tax)
9
+ end
10
+ end
11
+
12
+ describe '#compute_order' do
13
+ it 'should raise an error' do
14
+ expect {
15
+ calculator.compute_order(nil)
16
+ }.to raise_error(RuntimeError)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::ShipCompliant, type: :model do
4
+ let!(:taxonomy) { create(:taxonomy, name: 'Brand') }
5
+ let!(:brand_taxon) { create(:taxon, taxonomy: taxonomy) }
6
+ let!(:order) { create(:order_ready_to_ship) }
7
+
8
+ subject { Spree::ShipCompliant.new(order) }
9
+
10
+ context '#address_from_spree_address' do
11
+ it 'returns the payload address' do
12
+ expect(subject.address_from_spree_address(order.ship_address)).to_not be_nil
13
+ end
14
+ end
15
+
16
+ context '#shipment_items' do
17
+ it 'returns the 3 first chars of taxon name' do
18
+ expect(subject.shipment_items).to_not be_nil
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Taxon, type: :model do
4
+ let!(:taxon) { create(:taxon, name: 'Brand') }
5
+
6
+ context '#brand_key' do
7
+ it 'returns the 3 first chars of taxon name' do
8
+ expect(taxon.brand_key).to eql('BRA')
9
+ end
10
+
11
+ it 'returns the first char of taxon name splitted' do
12
+ taxon.name = 'Test Taxon'
13
+ expect(taxon.brand_key).to eql('TT')
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Variant, type: :model do
4
+ let!(:taxonomy) { create(:taxonomy, name: 'Brand') }
5
+ let!(:brand_taxon) { create(:taxon, taxonomy: taxonomy) }
6
+ let!(:bottle_size_option_type) { create(:option_type, name: 'Bottle Size', presentation: 'Bottle Size') }
7
+ let!(:bottle_size_option_value) { create(:option_value, option_type: bottle_size_option_type) }
8
+ let!(:default_case) { create(:property, name: 'default_case') }
9
+ let!(:default_wholesale_case_price) { create(:property, name: 'default_wholesale_case_price') }
10
+ let!(:percent_alcohol) { create(:property, name: 'percent_alcohol') }
11
+ let!(:varietal) { create(:property, name: 'varietal') }
12
+ let!(:vintage) { create(:property, name: 'vintage') }
13
+ let!(:volume_amount) { create(:property, name: 'volume_amount') }
14
+ let!(:volume_unit) { create(:property, name: 'volume_unit') }
15
+
16
+ let!(:product) { create(:product, taxons: [brand_taxon]) }
17
+
18
+ let!(:bottle_size_product_property) { create(:product_option_type, product: product, option_type: bottle_size_option_type) }
19
+ let!(:default_case_product_property) { create(:product_property, product: product, property: default_case, value: '1') }
20
+ let!(:default_wholesale_case_price_product_property) { create(:product_property, product: product, property: default_wholesale_case_price, value: '670') }
21
+ let!(:percent_alcohol_product_property) { create(:product_property, product: product, property: percent_alcohol, value: '5%') }
22
+ let!(:varietal_product_property) { create(:product_property, product: product, property: varietal, value: 'Cabernet Sauvignon') }
23
+ let!(:vintage_product_property) { create(:product_property, product: product, property: vintage, value: '2003') }
24
+ let!(:volume_amount_product_property) { create(:product_property, product: product, property: volume_amount, value: '750') }
25
+ let!(:volume_unit_product_property) { create(:product_property, product: product, property: volume_unit, value: 'milliliter') }
26
+
27
+ let!(:variant) { create(:variant, product: product) }
28
+
29
+ context 'validations' do
30
+ it 'should validate bottle_size is present' do
31
+ expect(variant.brand_key).to_not be_nil
32
+ end
33
+
34
+ it 'should validate bottle_size is present' do
35
+ expect(variant.product_key).to_not be_nil
36
+ end
37
+
38
+ it 'should validate bottle_size is present' do
39
+ expect(variant.bottle_size).to_not be_nil
40
+ end
41
+
42
+ it 'should validate default_case is present' do
43
+ expect(variant.default_case).to_not be_nil
44
+ end
45
+
46
+ it 'should validate default_wholesale_case_price is present' do
47
+ expect(variant.default_wholesale_case_price).to_not be_nil
48
+ end
49
+
50
+ it 'should validate percent_alcohol is present' do
51
+ expect(variant.percent_alcohol).to_not be_nil
52
+ end
53
+
54
+ it 'should validate varietal is present' do
55
+ expect(variant.varietal).to_not be_nil
56
+ end
57
+
58
+ it 'should validate vintage is present' do
59
+ expect(variant.vintage).to_not be_nil
60
+ end
61
+
62
+ it 'should validate volume_amount is present' do
63
+ expect(variant.volume_amount).to_not be_nil
64
+ end
65
+
66
+ it 'should validate volume_unit is present' do
67
+ expect(variant.volume_unit).to_not be_nil
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,24 @@
1
+ ENV['RAILS_ENV'] ||= 'test'
2
+
3
+ require File.expand_path('../dummy/config/environment.rb', __FILE__)
4
+ abort('The Rails environment is running in production mode!') if Rails.env.production?
5
+
6
+ require 'rspec/rails'
7
+
8
+ Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |file| require file }
9
+
10
+ begin
11
+ ActiveRecord::Migration.maintain_test_schema!
12
+ rescue ActiveRecord::PendingMigrationError
13
+ `bin/rails db:migrate`
14
+ end
15
+
16
+ # Requires factories defined in lib/solidus_ship_compliant/factories.rb
17
+ require 'solidus_ship_compliant/factories'
18
+
19
+ RSpec.configure do |config|
20
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
21
+ config.use_transactional_fixtures = true
22
+ config.infer_spec_type_from_file_location!
23
+ config.filter_rails_from_backtrace!
24
+ end
@@ -0,0 +1,15 @@
1
+ RSpec.configure do |config|
2
+ config.after do
3
+ Spree::Ability.abilities.delete(AbilityDecorator) if Spree::Ability.abilities.include?(AbilityDecorator)
4
+ end
5
+ end
6
+
7
+ if defined? CanCan::Ability
8
+ class AbilityDecorator
9
+ include CanCan::Ability
10
+
11
+ def initialize(user)
12
+ cannot :manage, Spree::Order
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,23 @@
1
+ require 'database_cleaner'
2
+
3
+ RSpec.configure do |config|
4
+ config.before(:suite) do
5
+ DatabaseCleaner.clean_with :truncation
6
+ end
7
+
8
+ config.before do
9
+ DatabaseCleaner.strategy = :transaction
10
+ end
11
+
12
+ config.before(:each, :js) do
13
+ DatabaseCleaner.strategy = :truncation
14
+ end
15
+
16
+ config.before do
17
+ DatabaseCleaner.start
18
+ end
19
+
20
+ config.after do
21
+ DatabaseCleaner.clean
22
+ end
23
+ end
@@ -0,0 +1,5 @@
1
+ RSpec.configure do |config|
2
+ config.include Devise::TestHelpers, type: :view
3
+ config.include Rack::Test::Methods, type: :feature
4
+ config.include Devise::Test::ControllerHelpers, type: :controller
5
+ end
@@ -0,0 +1,5 @@
1
+ require 'factory_bot'
2
+
3
+ RSpec.configure do |config|
4
+ config.include FactoryBot::Syntax::Methods
5
+ end
@@ -0,0 +1,5 @@
1
+ RSpec.configure do |config|
2
+ config.before do
3
+ Spree::Auth::Config.preference_store = Spree::Auth::Config.default_preferences
4
+ end
5
+ end
@@ -0,0 +1,14 @@
1
+ require 'spree/testing_support/factories'
2
+ require 'spree/testing_support/authorization_helpers'
3
+ require 'spree/testing_support/url_helpers'
4
+ require 'spree/testing_support/capybara_ext'
5
+ require 'spree/testing_support/controller_requests'
6
+ require 'spree/testing_support/flash'
7
+ require 'spree/testing_support/order_walkthrough'
8
+
9
+ RSpec.configure do |config|
10
+ config.include Spree::TestingSupport::UrlHelpers
11
+ config.include Spree::TestingSupport::ControllerRequests, type: :controller
12
+ config.include Spree::TestingSupport::Flash
13
+ config.include Spree::BaseHelper
14
+ end
metadata ADDED
@@ -0,0 +1,307 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: solidus_ship_compliant
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Jonathan Tapia
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-04-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: solidus_core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '3'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '2.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '3'
33
+ - !ruby/object:Gem::Dependency
34
+ name: solidus_support
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: deface
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: byebug
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: capybara
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ - !ruby/object:Gem::Dependency
90
+ name: selenium-webdriver
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: database_cleaner
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: factory_bot
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: ffaker
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ - !ruby/object:Gem::Dependency
146
+ name: poltergeist
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ">="
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: pry-rails
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ - !ruby/object:Gem::Dependency
174
+ name: rubocop
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ type: :development
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ - !ruby/object:Gem::Dependency
188
+ name: rspec-rails
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ type: :development
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ - !ruby/object:Gem::Dependency
202
+ name: simplecov
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
208
+ type: :development
209
+ prerelease: false
210
+ version_requirements: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ version: '0'
215
+ description: Solidus Engine for Ship compliant tax calculation service
216
+ email: jonathan.tapia@magmalabs.io
217
+ executables: []
218
+ extensions: []
219
+ extra_rdoc_files: []
220
+ files:
221
+ - ".gitignore"
222
+ - ".rspec"
223
+ - ".rubocop.yml"
224
+ - ".travis.yml"
225
+ - Gemfile
226
+ - LICENSE
227
+ - README.md
228
+ - Rakefile
229
+ - app/assets/javascripts/spree/backend/solidus_ship_complaint.js
230
+ - app/assets/javascripts/spree/frontend/solidus_ship_complaint.js
231
+ - app/assets/stylesheets/spree/backend/solidus_ship_complaint.css
232
+ - app/assets/stylesheets/spree/frontend/solidus_ship_complaint.css
233
+ - app/controllers/spree/admin/orders_controller_decorator.rb
234
+ - app/controllers/spree/admin/ship_compliant_settings_controller.rb
235
+ - app/controllers/spree/checkout_controller_decorator.rb
236
+ - app/models/spree/calculator/ship_compliant_calculator.rb
237
+ - app/models/spree/ship_compliant.rb
238
+ - app/models/spree/taxon_decorator.rb
239
+ - app/models/spree/variant_decorator.rb
240
+ - app/overrides/spree/admin/shared/_configuration_menu/_add_ship_compliant_config_menu.html.erb.deface
241
+ - app/views/spree/admin/shared/_ship_complaint_tabs.html.erb
242
+ - app/views/spree/admin/ship_compliant_settings/edit.html.erb
243
+ - bin/rails
244
+ - config/locales/en.yml
245
+ - config/routes.rb
246
+ - lib/generators/solidus_ship_compliant/install/install_generator.rb
247
+ - lib/solidus_ship_compliant.rb
248
+ - lib/solidus_ship_compliant/configuration.rb
249
+ - lib/solidus_ship_compliant/engine.rb
250
+ - lib/solidus_ship_compliant/error.rb
251
+ - lib/solidus_ship_compliant/factories.rb
252
+ - lib/solidus_ship_compliant/version.rb
253
+ - lib/tasks/solidus_ship_compliant/export.rake
254
+ - solidus_ship_compliant.gemspec
255
+ - spec/controllers/admin/ship_compliant_settings_controller_spec.rb
256
+ - spec/factories/variant_factory_override.rb
257
+ - spec/features/checkout_spec.rb
258
+ - spec/models/calculator/ship_compliant_calculator_spec.rb
259
+ - spec/models/spree/ship_compliant_spec.rb
260
+ - spec/models/spree/taxon_spec.rb
261
+ - spec/models/spree/variant_spec.rb
262
+ - spec/spec_helper.rb
263
+ - spec/support/ability.rb
264
+ - spec/support/database_cleaner.rb
265
+ - spec/support/devise.rb
266
+ - spec/support/factory_bot.rb
267
+ - spec/support/preferences.rb
268
+ - spec/support/spree.rb
269
+ homepage: http://github.com/jtapia/solidus_ship_compliant
270
+ licenses: []
271
+ metadata: {}
272
+ post_install_message:
273
+ rdoc_options: []
274
+ require_paths:
275
+ - lib
276
+ required_ruby_version: !ruby/object:Gem::Requirement
277
+ requirements:
278
+ - - ">="
279
+ - !ruby/object:Gem::Version
280
+ version: '0'
281
+ required_rubygems_version: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - ">="
284
+ - !ruby/object:Gem::Version
285
+ version: '0'
286
+ requirements:
287
+ - none
288
+ rubyforge_project:
289
+ rubygems_version: 2.6.14
290
+ signing_key:
291
+ specification_version: 4
292
+ summary: Solidus Engine for Ship compliant tax calculation service
293
+ test_files:
294
+ - spec/controllers/admin/ship_compliant_settings_controller_spec.rb
295
+ - spec/factories/variant_factory_override.rb
296
+ - spec/features/checkout_spec.rb
297
+ - spec/models/calculator/ship_compliant_calculator_spec.rb
298
+ - spec/models/spree/ship_compliant_spec.rb
299
+ - spec/models/spree/taxon_spec.rb
300
+ - spec/models/spree/variant_spec.rb
301
+ - spec/spec_helper.rb
302
+ - spec/support/ability.rb
303
+ - spec/support/database_cleaner.rb
304
+ - spec/support/devise.rb
305
+ - spec/support/factory_bot.rb
306
+ - spec/support/preferences.rb
307
+ - spec/support/spree.rb