solidus_sale_pricing 2.0.1

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