bodega 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/.rspec +3 -0
  2. data/Gemfile +10 -6
  3. data/Gemfile.lock +50 -19
  4. data/VERSION +1 -1
  5. data/app/controllers/bodega/orders_controller.rb +21 -30
  6. data/app/helpers/bodega/application_helper.rb +1 -0
  7. data/app/helpers/bodega/cart_helper.rb +9 -25
  8. data/app/models/bodega/order.rb +113 -11
  9. data/app/models/bodega/order_product.rb +20 -26
  10. data/app/models/bodega/product.rb +9 -12
  11. data/app/views/bodega/orders/_cart.html.erb +26 -0
  12. data/app/views/bodega/orders/_cart_row.html.erb +24 -0
  13. data/app/views/bodega/orders/_shipping_row.html.erb +13 -0
  14. data/app/views/bodega/orders/edit.html.erb +1 -0
  15. data/app/views/bodega/orders/new.html.erb +2 -38
  16. data/bodega.gemspec +30 -12
  17. data/config/locales/en.yml +13 -0
  18. data/config/routes.rb +9 -9
  19. data/db/migrate/20121111170337_create_bodega_orders.rb +12 -0
  20. data/lib/bodega/engine.rb +0 -1
  21. data/lib/bodega/optional.rb +12 -0
  22. data/lib/bodega/payment_method/base.rb +5 -13
  23. data/lib/bodega/payment_method/paypal.rb +12 -4
  24. data/lib/bodega/payment_method.rb +0 -4
  25. data/lib/bodega/shipping_method/base.rb +71 -0
  26. data/lib/bodega/shipping_method/ups.rb +18 -0
  27. data/lib/bodega/shipping_method.rb +5 -0
  28. data/lib/bodega.rb +19 -1
  29. data/spec/lib/bodega/payment_method/base_spec.rb +12 -0
  30. data/spec/lib/bodega/shipping_method/base_spec.rb +12 -0
  31. data/spec/lib/bodega_spec.rb +18 -0
  32. data/spec/models/order_product_spec.rb +72 -0
  33. data/spec/models/order_spec.rb +93 -0
  34. data/spec/models/product_spec.rb +78 -0
  35. data/spec/spec_helper.rb +25 -0
  36. data/spec/support/active_record.rb +43 -0
  37. data/spec/support/rails.rb +7 -0
  38. data/spec/support/vcr.rb +0 -0
  39. metadata +36 -18
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+ require 'bodega/product'
3
+
4
+ describe Bodega::Product do
5
+ let(:product) { TestProduct.create!(price: 25) }
6
+ before do
7
+ TestProduct.send :include, Bodega::Product
8
+ end
9
+
10
+ describe "#in_stock?" do
11
+ it "returns true if the product is not stock-kept" do
12
+ product.should be_in_stock
13
+ end
14
+
15
+ it "returns true if the number_in_stock is greater than zero" do
16
+ product.keep_stock = true
17
+ product.number_in_stock = 1
18
+ product.save!
19
+ product.should be_in_stock
20
+ end
21
+
22
+ it "returns false if the number_in_stock is less than zero" do
23
+ product.keep_stock = true
24
+ product.number_in_stock = 0
25
+ product.save!
26
+ product.should_not be_in_stock
27
+ end
28
+ end
29
+
30
+ describe "#max_quantity" do
31
+ it "returns the Bodega configuration value if the product is not stock-kept" do
32
+ Bodega.stub(:config) { OpenStruct.new(max_quantity: 10) }
33
+ product.max_quantity.should == Bodega.config.max_quantity
34
+ end
35
+ end
36
+
37
+ describe ".for_sale" do
38
+ it "returns products who are for sale today or don't have a start date" do
39
+ product_1 = TestProduct.create!(for_sale_at: Date.today, price: 25.00)
40
+ product_2 = TestProduct.create!(price: 30)
41
+ non_product_1 = TestProduct.create!(for_sale_at: 1.day.from_now, price: 100)
42
+ TestProduct.for_sale.should == [product_1, product_2]
43
+ end
44
+
45
+ it "returns products whose not_for_sale_at are past" do
46
+ product_1 = TestProduct.create!(for_sale_at: Date.today, price: 25.00)
47
+ product_2 = TestProduct.create!(price: 30)
48
+ non_product_1 = TestProduct.create!(not_for_sale_at: 1.day.ago, price: 100)
49
+ TestProduct.for_sale.should == [product_1, product_2]
50
+ end
51
+
52
+ it "returns products who don't have for_sale_at anything" do
53
+ product_1 = TestProduct.create!(price: 25.00)
54
+ product_2 = TestProduct.create!(price: 30)
55
+ product_3 = TestProduct.create!(price: 100)
56
+ TestProduct.for_sale.should == [product_1, product_2, product_3]
57
+ end
58
+ end
59
+
60
+ describe ".popular" do
61
+ it "returns products in order of sales from high to low" do
62
+ require 'bodega/order_product'
63
+
64
+ product_1 = TestProduct.create!(price: 25.00)
65
+ 3.times { Bodega::OrderProduct.create!(product: product_1, quantity: 5) }
66
+ product_2 = TestProduct.create!(price: 30)
67
+ 5.times { Bodega::OrderProduct.create!(product: product_2, quantity: 5) }
68
+ product_3 = TestProduct.create!(price: 100)
69
+ 4.times { Bodega::OrderProduct.create!(product: product_3, quantity: 5) }
70
+
71
+ TestProduct.popular.should == [product_2, product_3, product_1]
72
+
73
+ Bodega::OrderProduct.create!(product: product_1, quantity: 50)
74
+
75
+ TestProduct.popular.should == [product_1, product_2, product_3]
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,25 @@
1
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
2
+ ENV["RAILS_ENV"] ||= 'test'
3
+
4
+ require 'simplecov'
5
+ SimpleCov.start
6
+
7
+ require 'active_record'
8
+ require 'database_cleaner'
9
+ require 'logger'
10
+ require 'money-rails'
11
+ require 'vcr'
12
+
13
+ require 'bodega'
14
+
15
+ Dir[File.expand_path(File.join('support', '**', '*.rb'), File.dirname(__FILE__))].each do |file|
16
+ require file
17
+ end
18
+
19
+ RSpec.configure do |config|
20
+ # Run specs in random order to surface order dependencies. If you find an
21
+ # order dependency and want to debug it, you can fix the order by providing
22
+ # the seed, which is printed after each run.
23
+ # --seed 1234
24
+ config.order = "random"
25
+ end
@@ -0,0 +1,43 @@
1
+ require 'bodega/product'
2
+
3
+ ActiveRecord::Base.logger = Logger.new(File.open('log/test.log', 'w+'))
4
+ ActiveRecord::Base.establish_connection({:adapter => 'sqlite3', :database => ':memory:', :pool => 5, :timeout => 5000})
5
+
6
+ I18n.load_path = %w(config/locales/en.yml)
7
+
8
+ MoneyRails::Hooks.init
9
+
10
+ class TestProduct < ActiveRecord::Base
11
+ include Bodega::Product
12
+ end
13
+
14
+ RSpec.configure do |config|
15
+ config.around do |example|
16
+ DatabaseCleaner.strategy = :truncation
17
+ DatabaseCleaner.start
18
+ example.run
19
+ DatabaseCleaner.clean
20
+ end
21
+
22
+ config.before :suite do
23
+ migrations_path = File.expand_path(File.join("..", "..", "db", "migrate"), File.dirname(__FILE__))
24
+ migrations = Dir[File.join(migrations_path, '*.rb')]
25
+ migrations.each do |migration_file|
26
+ require migration_file
27
+ migration_name = File.basename(migration_file, '.rb')
28
+ migration_name[/^\d+_/] = ''
29
+ migration_name = migration_name.camelize
30
+ puts migration_name.constantize.migrate(:up)
31
+ end
32
+ ActiveRecord::Schema.define do
33
+ create_table :test_products, :force => true do |t|
34
+ t.integer :price_cents
35
+ t.boolean :for_sale, default: true
36
+ t.boolean :keep_stock, default: false
37
+ t.integer :number_in_stock
38
+ t.datetime :for_sale_at
39
+ t.datetime :not_for_sale_at
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,7 @@
1
+ module Rails
2
+ extend self
3
+
4
+ def env
5
+ OpenStruct.new(:development? => false, :test? => true)
6
+ end
7
+ end
File without changes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bodega
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,16 +9,16 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-07 00:00:00.000000000 Z
12
+ date: 2013-02-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: configurator2
15
+ name: activerecord
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: 0.1.2
21
+ version: 3.2.11
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,15 +26,15 @@ dependencies:
26
26
  requirements:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
- version: 0.1.2
29
+ version: 3.2.11
30
30
  - !ruby/object:Gem::Dependency
31
- name: i18n
31
+ name: configurator2
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  none: false
34
34
  requirements:
35
35
  - - ! '>='
36
36
  - !ruby/object:Gem::Version
37
- version: '0'
37
+ version: 0.1.3
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,9 +42,9 @@ dependencies:
42
42
  requirements:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
- version: '0'
45
+ version: 0.1.3
46
46
  - !ruby/object:Gem::Dependency
47
- name: money-rails
47
+ name: i18n
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  none: false
50
50
  requirements:
@@ -60,30 +60,30 @@ dependencies:
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  - !ruby/object:Gem::Dependency
63
- name: jeweler
63
+ name: maintain
64
64
  requirement: !ruby/object:Gem::Requirement
65
65
  none: false
66
66
  requirements:
67
- - - '='
67
+ - - ! '>='
68
68
  - !ruby/object:Gem::Version
69
- version: 1.8.4
70
- type: :development
69
+ version: '0'
70
+ type: :runtime
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
- - - '='
75
+ - - ! '>='
76
76
  - !ruby/object:Gem::Version
77
- version: 1.8.4
77
+ version: '0'
78
78
  - !ruby/object:Gem::Dependency
79
- name: pry
79
+ name: money-rails
80
80
  requirement: !ruby/object:Gem::Requirement
81
81
  none: false
82
82
  requirements:
83
83
  - - ! '>='
84
84
  - !ruby/object:Gem::Version
85
85
  version: '0'
86
- type: :development
86
+ type: :runtime
87
87
  prerelease: false
88
88
  version_requirements: !ruby/object:Gem::Requirement
89
89
  none: false
@@ -115,6 +115,10 @@ files:
115
115
  - app/models/bodega/order.rb
116
116
  - app/models/bodega/order_product.rb
117
117
  - app/models/bodega/product.rb
118
+ - app/views/bodega/orders/_cart.html.erb
119
+ - app/views/bodega/orders/_cart_row.html.erb
120
+ - app/views/bodega/orders/_shipping_row.html.erb
121
+ - app/views/bodega/orders/edit.html.erb
118
122
  - app/views/bodega/orders/new.html.erb
119
123
  - app/views/bodega/orders/show.html.erb
120
124
  - bodega.gemspec
@@ -124,9 +128,13 @@ files:
124
128
  - db/migrate/20121111170420_create_bodega_order_products.rb
125
129
  - lib/bodega.rb
126
130
  - lib/bodega/engine.rb
131
+ - lib/bodega/optional.rb
127
132
  - lib/bodega/payment_method.rb
128
133
  - lib/bodega/payment_method/base.rb
129
134
  - lib/bodega/payment_method/paypal.rb
135
+ - lib/bodega/shipping_method.rb
136
+ - lib/bodega/shipping_method/base.rb
137
+ - lib/bodega/shipping_method/ups.rb
130
138
  - lib/bodega/version.rb
131
139
  - lib/generators/bodega/install/install_generator.rb
132
140
  - lib/generators/bodega/product/USAGE
@@ -138,6 +146,16 @@ files:
138
146
  - lib/generators/bodega/productize/templates/migration.rb
139
147
  - lib/tasks/bodega_tasks.rake
140
148
  - script/rails
149
+ - spec/lib/bodega/payment_method/base_spec.rb
150
+ - spec/lib/bodega/shipping_method/base_spec.rb
151
+ - spec/lib/bodega_spec.rb
152
+ - spec/models/order_product_spec.rb
153
+ - spec/models/order_spec.rb
154
+ - spec/models/product_spec.rb
155
+ - spec/spec_helper.rb
156
+ - spec/support/active_record.rb
157
+ - spec/support/rails.rb
158
+ - spec/support/vcr.rb
141
159
  homepage: http://github.com/flipsasser/bodega
142
160
  licenses:
143
161
  - MIT
@@ -153,7 +171,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
153
171
  version: '0'
154
172
  segments:
155
173
  - 0
156
- hash: 2412431068173395090
174
+ hash: 2351638233694158038
157
175
  required_rubygems_version: !ruby/object:Gem::Requirement
158
176
  none: false
159
177
  requirements: