solidus_ship_compliant 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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