solidus_sale_pricing 2.0.1

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 (43) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.rspec +1 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +25 -0
  6. data/LICENSE +26 -0
  7. data/README.md +173 -0
  8. data/Rakefile +21 -0
  9. data/app/assets/javascripts/spree/backend/solidus_sale_pricing.js +2 -0
  10. data/app/assets/javascripts/spree/frontend/solidus_sale_pricing.js +2 -0
  11. data/app/assets/stylesheets/spree/backend/solidus_sale_pricing.css +13 -0
  12. data/app/assets/stylesheets/spree/frontend/solidus_sale_pricing.css +4 -0
  13. data/app/controllers/spree/admin/product_controller_decorator.rb +10 -0
  14. data/app/controllers/spree/admin/sale_prices_controller.rb +73 -0
  15. data/app/helpers/spree/base_helper_decorator.rb +21 -0
  16. data/app/models/spree/calculator/dollar_amount_sale_price_calculator.rb +12 -0
  17. data/app/models/spree/calculator/percent_off_sale_price_calculator.rb +12 -0
  18. data/app/models/spree/price_decorator.rb +93 -0
  19. data/app/models/spree/product_decorator.rb +49 -0
  20. data/app/models/spree/sale_price.rb +55 -0
  21. data/app/models/spree/variant_decorator.rb +65 -0
  22. data/app/overrides/add_sale_price_to_product_view.rb +12 -0
  23. data/app/overrides/add_sale_product_admin_tabs.rb +6 -0
  24. data/app/views/spree/admin/products/_sale_products.html.erb +3 -0
  25. data/app/views/spree/admin/sale_prices/_form.html.erb +31 -0
  26. data/app/views/spree/admin/sale_prices/edit.html.erb +17 -0
  27. data/app/views/spree/admin/sale_prices/index.html.erb +54 -0
  28. data/app/views/spree/admin/sale_prices/new.html.erb +15 -0
  29. data/bin/rails +7 -0
  30. data/config/locales/en.yml +34 -0
  31. data/config/routes.rb +10 -0
  32. data/db/migrate/20160622203615_add_spree_create_sale_prices_table.rb +19 -0
  33. data/lib/generators/solidus_sale_pricing/install/install_generator.rb +31 -0
  34. data/lib/solidus_sale_pricing.rb +8 -0
  35. data/lib/solidus_sale_pricing/engine.rb +22 -0
  36. data/lib/solidus_sale_pricing/factories.rb +6 -0
  37. data/lib/solidus_sale_pricing/version.rb +18 -0
  38. data/solidus_sale_pricing.gemspec +38 -0
  39. data/spec/controllers/sale_prices_controller_spec.rb +56 -0
  40. data/spec/factories/sale_price.rb +14 -0
  41. data/spec/models/sale_price_spec.rb +5 -0
  42. data/spec/spec_helper.rb +95 -0
  43. metadata +262 -0
@@ -0,0 +1,6 @@
1
+ FactoryGirl.define do
2
+ # Define your Spree extensions Factories within this file to enable applications, and other extensions to use and override them.
3
+ #
4
+ # Example adding this to your spec_helper will load these Factories for use:
5
+ # require 'spree_solidus_sale_pricing/factories'
6
+ end
@@ -0,0 +1,18 @@
1
+ module SolidusSalePricing
2
+ module_function
3
+
4
+ # Returns the version of the currently loaded SpreeSalePricing as a
5
+ # <tt>Gem::Version</tt>.
6
+ def version
7
+ Gem::Version.new VERSION::STRING
8
+ end
9
+
10
+ module VERSION
11
+ MAJOR = 2
12
+ MINOR = 0
13
+ TINY = 1
14
+ PRE = nil
15
+
16
+ STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
17
+ end
18
+ end
@@ -0,0 +1,38 @@
1
+ lib = File.expand_path('../lib/', __FILE__)
2
+ $LOAD_PATH.unshift lib unless $LOAD_PATH.include?(lib)
3
+
4
+ require 'solidus_sale_pricing/version'
5
+
6
+ # encoding: UTF-8
7
+ Gem::Specification.new do |s|
8
+ s.platform = Gem::Platform::RUBY
9
+ s.name = 'solidus_sale_pricing'
10
+ s.version = SolidusSalePricing.version
11
+ s.summary = 'Sale pricing for Solidus'
12
+ s.description = 'Solidus extension to set sale products with start and end date.'
13
+ s.required_ruby_version = '>= 2.1'
14
+
15
+ s.author = 'Jonathan Tapia'
16
+ s.email = 'jonathan.tapia@magmalabs.io'
17
+
18
+ s.files = `git ls-files`.split("\n")
19
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
+ s.require_path = 'lib'
21
+ s.requirements << 'none'
22
+
23
+ s.has_rdoc = false
24
+
25
+ s.add_dependency 'solidus_backend', ['>= 1.0', '< 3']
26
+ s.add_dependency 'solidus_support'
27
+ s.add_dependency 'deface', '~> 1.0'
28
+
29
+ s.add_development_dependency 'rspec-rails','~> 3.4'
30
+ s.add_development_dependency 'sqlite3'
31
+ s.add_development_dependency 'sass-rails'
32
+ s.add_development_dependency 'coffee-rails'
33
+ s.add_development_dependency 'factory_girl', '~> 4.5'
34
+ s.add_development_dependency 'capybara', '~> 2.5'
35
+ s.add_development_dependency 'database_cleaner'
36
+ s.add_development_dependency 'ffaker'
37
+ s.add_development_dependency 'rspec-activemodel-mocks'
38
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Admin::SalePricesController do
4
+ stub_authorization!
5
+
6
+ let!(:product) { create(:product) }
7
+ let!(:sale_price) { product.create_sale(value: '10').first }
8
+
9
+ context '#index' do
10
+ render_views
11
+
12
+ xit 'should display list of sale prices when they exist' do
13
+ spree_get :index, product_id: product.slug
14
+ expect(response.code).to eq('200')
15
+ expect(response.body).to include('Listing Sale Prices')
16
+ end
17
+ end
18
+
19
+ context '#create' do
20
+ let!(:variant) { create(:variant, product: product) }
21
+ let(:params) do
22
+ { sale_price: { value: '6' } }
23
+ end
24
+
25
+ context 'for a product that exists' do
26
+ xit 'creates a special price associated with the variant and product' do
27
+ expect {
28
+ spree_post :create, params
29
+ expect(response).to redirect_to(spree.admin_product_sale_prices_path(product))
30
+ }.to change(Spree::SalePrice, :count).by(1)
31
+ end
32
+ end
33
+
34
+ context 'for an invalid object' do
35
+ xit 'render new page' do
36
+ expect {
37
+ spree_post :create, params
38
+ }.to change(Spree::SalePrice, :count).by(0)
39
+ end
40
+ end
41
+ end
42
+
43
+ context '#destroy' do
44
+ let(:product) { create(:product) }
45
+ let!(:variant) { create(:variant, product: product) }
46
+
47
+ context 'for a sale price product that exist' do
48
+ xit 'deletes the associated sale price' do
49
+ expect {
50
+ spree_delete :destroy, sale_price: { product_id: product.slug }
51
+ expect(response).to redirect_to(spree.admin_product_sale_prices_path(product))
52
+ }.to change(Spree::SalePrice, :count).by(-1)
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,14 @@
1
+ FactoryGirl.define do
2
+ factory :sale_price, class: Spree::SalePrice do
3
+ price
4
+ value 10
5
+ start_at Date.today
6
+ enabled true
7
+
8
+ factory :disabled do
9
+ after :create do |sale_price|
10
+ sale_price.disable
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::SalePrice do
4
+ pending "add some examples to (or delete) #{__FILE__}"
5
+ end
@@ -0,0 +1,95 @@
1
+ # Run Coverage report
2
+ # require 'simplecov'
3
+ # SimpleCov.start do
4
+ # add_filter 'spec/dummy'
5
+ # add_group 'Controllers', 'app/controllers'
6
+ # add_group 'Helpers', 'app/helpers'
7
+ # add_group 'Mailers', 'app/mailers'
8
+ # add_group 'Models', 'app/models'
9
+ # add_group 'Views', 'app/views'
10
+ # add_group 'Libraries', 'lib'
11
+ # end
12
+
13
+ # Configure Rails Environment
14
+ ENV['RAILS_ENV'] = 'test'
15
+
16
+ require File.expand_path('../dummy/config/environment.rb', __FILE__)
17
+
18
+ require 'rspec/rails'
19
+ require 'database_cleaner'
20
+ require 'ffaker'
21
+
22
+ # Requires supporting ruby files with custom matchers and macros, etc,
23
+ # in spec/support/ and its subdirectories.
24
+ Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each { |f| require f }
25
+
26
+ # Requires factories and other useful helpers defined in spree_core.
27
+ require 'spree/testing_support/authorization_helpers'
28
+ require 'spree/testing_support/capybara_ext'
29
+ require 'spree/testing_support/controller_requests'
30
+ require 'spree/testing_support/factories'
31
+ require 'spree/testing_support/url_helpers'
32
+
33
+ # Requires factories defined in lib/spree_solidus_sale_pricing/factories.rb
34
+ require 'solidus_sale_pricing/factories'
35
+
36
+ RSpec.configure do |config|
37
+ config.include Devise::TestHelpers, type: :controller
38
+ config.include Devise::TestHelpers, type: :view
39
+ config.include FactoryGirl::Syntax::Methods
40
+
41
+ # Infer an example group's spec type from the file location.
42
+ config.infer_spec_type_from_file_location!
43
+
44
+ # == URL Helpers
45
+ #
46
+ # Allows access to Spree's routes in specs:
47
+ #
48
+ # visit spree.admin_path
49
+ # current_path.should eql(spree.products_path)
50
+ config.include Spree::TestingSupport::UrlHelpers
51
+
52
+ # == Requests support
53
+ #
54
+ # Adds convenient methods to request Spree's controllers
55
+ # spree_get :index
56
+ config.include Spree::TestingSupport::ControllerRequests, type: :controller
57
+
58
+ # == Mock Framework
59
+ #
60
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
61
+ #
62
+ # config.mock_with :mocha
63
+ # config.mock_with :flexmock
64
+ # config.mock_with :rr
65
+ config.mock_with :rspec
66
+ config.color = true
67
+
68
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
69
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
70
+
71
+ # Capybara javascript drivers require transactional fixtures set to false, and we use DatabaseCleaner
72
+ # to cleanup after each test instead. Without transactional fixtures set to false the records created
73
+ # to setup a test will be unavailable to the browser, which runs under a separate server instance.
74
+ config.use_transactional_fixtures = false
75
+
76
+ # Ensure Suite is set to use transactions for speed.
77
+ config.before :suite do
78
+ DatabaseCleaner.strategy = :transaction
79
+ DatabaseCleaner.clean_with :truncation
80
+ end
81
+
82
+ # Before each spec check if it is a Javascript test and switch between using database transactions or not where necessary.
83
+ config.before :each do
84
+ DatabaseCleaner.strategy = RSpec.current_example.metadata[:js] ? :truncation : :transaction
85
+ DatabaseCleaner.start
86
+ end
87
+
88
+ # After each spec clean the database.
89
+ config.after :each do
90
+ DatabaseCleaner.clean
91
+ end
92
+
93
+ config.fail_fast = ENV['FAIL_FAST'] || false
94
+ config.order = "random"
95
+ end
metadata ADDED
@@ -0,0 +1,262 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: solidus_sale_pricing
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Jonathan Tapia
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-07-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: solidus_backend
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '1.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: '1.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: rspec-rails
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '3.4'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '3.4'
75
+ - !ruby/object:Gem::Dependency
76
+ name: sqlite3
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: sass-rails
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: coffee-rails
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_girl
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '4.5'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '4.5'
131
+ - !ruby/object:Gem::Dependency
132
+ name: capybara
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '2.5'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '2.5'
145
+ - !ruby/object:Gem::Dependency
146
+ name: database_cleaner
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: ffaker
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: rspec-activemodel-mocks
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
+ description: Solidus extension to set sale products with start and end date.
188
+ email: jonathan.tapia@magmalabs.io
189
+ executables: []
190
+ extensions: []
191
+ extra_rdoc_files: []
192
+ files:
193
+ - ".gitignore"
194
+ - ".rspec"
195
+ - ".ruby-version"
196
+ - Gemfile
197
+ - LICENSE
198
+ - README.md
199
+ - Rakefile
200
+ - app/assets/javascripts/spree/backend/solidus_sale_pricing.js
201
+ - app/assets/javascripts/spree/frontend/solidus_sale_pricing.js
202
+ - app/assets/stylesheets/spree/backend/solidus_sale_pricing.css
203
+ - app/assets/stylesheets/spree/frontend/solidus_sale_pricing.css
204
+ - app/controllers/spree/admin/product_controller_decorator.rb
205
+ - app/controllers/spree/admin/sale_prices_controller.rb
206
+ - app/helpers/spree/base_helper_decorator.rb
207
+ - app/models/spree/calculator/dollar_amount_sale_price_calculator.rb
208
+ - app/models/spree/calculator/percent_off_sale_price_calculator.rb
209
+ - app/models/spree/price_decorator.rb
210
+ - app/models/spree/product_decorator.rb
211
+ - app/models/spree/sale_price.rb
212
+ - app/models/spree/variant_decorator.rb
213
+ - app/overrides/add_sale_price_to_product_view.rb
214
+ - app/overrides/add_sale_product_admin_tabs.rb
215
+ - app/views/spree/admin/products/_sale_products.html.erb
216
+ - app/views/spree/admin/sale_prices/_form.html.erb
217
+ - app/views/spree/admin/sale_prices/edit.html.erb
218
+ - app/views/spree/admin/sale_prices/index.html.erb
219
+ - app/views/spree/admin/sale_prices/new.html.erb
220
+ - bin/rails
221
+ - config/locales/en.yml
222
+ - config/routes.rb
223
+ - db/migrate/20160622203615_add_spree_create_sale_prices_table.rb
224
+ - lib/generators/solidus_sale_pricing/install/install_generator.rb
225
+ - lib/solidus_sale_pricing.rb
226
+ - lib/solidus_sale_pricing/engine.rb
227
+ - lib/solidus_sale_pricing/factories.rb
228
+ - lib/solidus_sale_pricing/version.rb
229
+ - solidus_sale_pricing.gemspec
230
+ - spec/controllers/sale_prices_controller_spec.rb
231
+ - spec/factories/sale_price.rb
232
+ - spec/models/sale_price_spec.rb
233
+ - spec/spec_helper.rb
234
+ homepage:
235
+ licenses: []
236
+ metadata: {}
237
+ post_install_message:
238
+ rdoc_options: []
239
+ require_paths:
240
+ - lib
241
+ required_ruby_version: !ruby/object:Gem::Requirement
242
+ requirements:
243
+ - - ">="
244
+ - !ruby/object:Gem::Version
245
+ version: '2.1'
246
+ required_rubygems_version: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ requirements:
252
+ - none
253
+ rubyforge_project:
254
+ rubygems_version: 2.5.1
255
+ signing_key:
256
+ specification_version: 4
257
+ summary: Sale pricing for Solidus
258
+ test_files:
259
+ - spec/controllers/sale_prices_controller_spec.rb
260
+ - spec/factories/sale_price.rb
261
+ - spec/models/sale_price_spec.rb
262
+ - spec/spec_helper.rb