spree-point-of-sale 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. data/.gitignore +16 -0
  2. data/Gemfile +20 -0
  3. data/LICENSE +23 -0
  4. data/README.md +71 -0
  5. data/Rakefile +29 -0
  6. data/Versionfile +11 -0
  7. data/app/assets/images/admin/pos/customer.png +0 -0
  8. data/app/assets/images/admin/pos/del_16.png +0 -0
  9. data/app/assets/images/admin/pos/plus_16.png +0 -0
  10. data/app/assets/images/admin/pos/select.jpg +0 -0
  11. data/app/assets/javascripts/admin/spree_pos.js +20 -0
  12. data/app/assets/stylesheets/admin/html-label.css +20 -0
  13. data/app/assets/stylesheets/admin/spree_pos.css +25 -0
  14. data/app/controllers/spree/admin/barcode_controller.rb +49 -0
  15. data/app/controllers/spree/admin/checkout_controller_decorator.rb +7 -0
  16. data/app/controllers/spree/admin/pos_controller.rb +205 -0
  17. data/app/controllers/spree/admin/stock_locations_controller_decorator.rb +13 -0
  18. data/app/helpers/admin/barcode_helper.rb +31 -0
  19. data/app/models/spree/order_decorator.rb +38 -0
  20. data/app/models/spree/payment_decorator.rb +10 -0
  21. data/app/models/spree/payment_method/point_of_sale.rb +30 -0
  22. data/app/models/spree/shipment_decorator.rb +29 -0
  23. data/app/models/spree/stock/coordinator_decorator.rb +10 -0
  24. data/app/models/spree/stock_location_decorator.rb +18 -0
  25. data/app/models/spree/user_decorator.rb +10 -0
  26. data/app/models/spree/variant_decorator.rb +3 -0
  27. data/app/overrides/add_barcode_link_for_products_and_variants.rb +21 -0
  28. data/app/overrides/add_is_pos_filter_to_admin_orders.rb +11 -0
  29. data/app/overrides/add_pos_button.rb +5 -0
  30. data/app/overrides/add_store_to_spree_stock_locations.rb +11 -0
  31. data/app/overrides/admin_adds_pos_config.rb +7 -0
  32. data/app/overrides/codes.rb +10 -0
  33. data/app/overrides/pos_tab.rb +6 -0
  34. data/app/views/spree/admin/barcode/basic.html.erb +28 -0
  35. data/app/views/spree/admin/invoice/_line_items_invoice.html.erb +34 -0
  36. data/app/views/spree/admin/invoice/_receipt_header.html.erb +13 -0
  37. data/app/views/spree/admin/invoice/_totals_receipt.html.erb +25 -0
  38. data/app/views/spree/admin/invoice/receipt.html.erb +26 -0
  39. data/app/views/spree/admin/orders/_admin_pos_config.html.erb +5 -0
  40. data/app/views/spree/admin/orders/_pos_button.html.erb +1 -0
  41. data/app/views/spree/admin/pos/find.html.erb +81 -0
  42. data/app/views/spree/admin/pos/show.html.erb +137 -0
  43. data/app/views/spree/admin/pos/update_stock_location.js.erb +5 -0
  44. data/app/views/spree/admin/products/_barcode_product_link.html.erb +3 -0
  45. data/app/views/spree/admin/products/_barcode_variant_link.html.erb +3 -0
  46. data/config/application.rb +23 -0
  47. data/config/boot.rb +5 -0
  48. data/config/initializers/constants.rb +4 -0
  49. data/config/locales/codes-fi.yml +3 -0
  50. data/config/locales/en.yml +16 -0
  51. data/config/locales/fi.yml +8 -0
  52. data/config/routes.rb +21 -0
  53. data/db/migrate/20130723140316_add_delivered_at_and_canceled_at_to_spree_shipments.rb +6 -0
  54. data/db/migrate/20130730102503_add_store_and_address_id_in_spree_stock_locations.rb +8 -0
  55. data/db/migrate/20131014053417_add_is_pos_to_spree_orders.rb +6 -0
  56. data/db/migrate/20131025110309_add_card_name_to_spree_payments.rb +5 -0
  57. data/lib/generators/spree_pos/install/install_generator.rb +27 -0
  58. data/lib/spree_pos.rb +2 -0
  59. data/lib/spree_pos/configuration.rb +7 -0
  60. data/lib/spree_pos/engine.rb +29 -0
  61. data/spec/constants_spec.rb +8 -0
  62. data/spec/controllers/spree/admin/barcode_controller_spec.rb +86 -0
  63. data/spec/controllers/spree/admin/pos_controller_spec.rb +849 -0
  64. data/spec/models/spree/order_decorator_spec.rb +178 -0
  65. data/spec/models/spree/payment_decorator_spec.rb +115 -0
  66. data/spec/models/spree/payment_method/point_of_sale_spec.rb +25 -0
  67. data/spec/models/spree/shipment_decorator_spec.rb +172 -0
  68. data/spec/models/spree/stock/coordinator_spec.rb +31 -0
  69. data/spec/models/spree/stock_location_decorator_spec.rb +43 -0
  70. data/spec/models/spree/user_decorator_spec.rb +24 -0
  71. data/spec/models/spree/varaint_decorator_spec.rb +31 -0
  72. data/spec/spec_helper.rb +67 -0
  73. data/spree-point-of-sale.gemspec +32 -0
  74. metadata +183 -0
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Stock::Coordinator do
4
+ let(:order) { Spree::Order.create! }
5
+ let(:country) { Spree::Country.create!(:name => 'mk_country', :iso_name => "mk") }
6
+ let(:state) { country.states.create!(:name => 'mk_state') }
7
+
8
+ describe 'build_packages' do
9
+ before do
10
+ @stock_location = Spree::StockLocation.create!(:name => 'stock', :store => false, :active => true, :address1 => "home", :address2 => "town", :city => "delhi", :zipcode => "110034", :country_id => country.id, :state_id => state.id, :phone => "07777676767")
11
+ @active_store = Spree::StockLocation.create!(:name => 'store', :store => true, :active => true, :address1 => "home", :address2 => "town", :city => "delhi", :zipcode => "110034", :country_id => country.id, :state_id => state.id, :phone => "07777676767")
12
+ @inactive_store = Spree::StockLocation.create!(:name => 'inactive-store', :store => true, :active => false, :address1 => "home", :address2 => "town", :city => "delhi", :zipcode => "110034", :country_id => country.id, :state_id => state.id, :phone => "07777676767")
13
+ @coordinator = Spree::Stock::Coordinator.new(order)
14
+ @packer = Spree::Stock::Packer.new(@stock_location, order)
15
+ @package = Spree::Stock::Package.new(@stock_location, order)
16
+ @packer.stub(:packages).and_return([@package])
17
+ @coordinator.stub(:build_packer).with(@stock_location, order).and_return(@packer)
18
+ end
19
+
20
+ describe 'build packages for only active stock locations' do
21
+ it { @packer.should_receive(:packages).and_return([@package]) }
22
+ it { @coordinator.should_receive(:build_packer).with(@stock_location, order).and_return(@packer) }
23
+ it { @coordinator.should_not_receive(:build_packer).with(@inactive_store, order) }
24
+ it { @coordinator.should_not_receive(:build_packer).with(@active_store, order) }
25
+
26
+ after { @coordinator.build_packages([]) }
27
+ end
28
+
29
+ it { @coordinator.build_packages([]).should eq([@package]) }
30
+ end
31
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::StockLocation do
4
+ it { should allow_mass_assignment_of :store }
5
+ it { should belong_to :address }
6
+
7
+ let(:country) { Spree::Country.create!(:name => 'mk_country', :iso_name => "mk") }
8
+ let(:state) { country.states.create!(:name => 'mk_state') }
9
+ let(:store) { Spree::StockLocation.create!(:name => 'store', :store => true, :address1 => "home", :address2 => "town", :city => "delhi", :zipcode => "110034", :country_id => country.id, :state_id => state.id, :phone => "07777676767") }
10
+ let(:stock_location) { Spree::StockLocation.create!(:name => 'stock', :address1 => "home", :address2 => "town", :city => "delhi", :zipcode => "110034", :country_id => country.id, :state_id => state.id, :phone => "07777676767") }
11
+
12
+ context 'scopes' do
13
+ it 'stores' do
14
+ Spree::StockLocation.stores.should include(store)
15
+ Spree::StockLocation.stores.should_not include(stock_location)
16
+ end
17
+
18
+ it 'not store' do
19
+ Spree::StockLocation.not_store.should include(stock_location)
20
+ Spree::StockLocation.not_store.should_not include(store)
21
+ end
22
+ end
23
+
24
+ describe 'associate_address' do
25
+ before do
26
+ @new_store = Spree::StockLocation.create!(:name => 'new-store', :store => true, :address1 => "home", :address2 => "town", :city => "delhi", :zipcode => "110034", :country_id => country.id, :state_id => state.id, :phone => "07777676767")
27
+ end
28
+
29
+ it { Spree::Address.where(:firstname => @new_store.name, :lastname => '(Store)', :state_id => @new_store.state_id, :country_id => @new_store.country_id, :address1 => @new_store.address1, :address2 => @new_store.address2, :phone => @new_store.phone, :zipcode => @new_store.zipcode, :city => @new_store.city).should_not be_blank }
30
+ end
31
+
32
+ context 'validations' do
33
+ describe 'associate address' do
34
+ before do
35
+ @invalid_store = Spree::StockLocation.new(:name => 'invalid-store')
36
+ @invalid_store.address = Spree::Address.create
37
+ @invalid_store.save
38
+ end
39
+
40
+ it { @invalid_store.errors[:address].should eq(['is invalid']) }
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::User do
4
+ let(:user) { Spree::User.create!(:email => 'test-user@pos.com', :password => 'testuser') }
5
+ describe 'unpaid_pos_orders' do
6
+ before do
7
+ @paid_order = user.orders.create!(:total => 100)
8
+ @paid_order.update_column(:payment_state,'paid')
9
+ @unpaid_pos_order = user.orders.create!(:user_id => user.id, :is_pos => true, :payment_state => 'checkout')
10
+ @paid_pos_order = user.orders.create!(:user_id => user.id, :is_pos => true, :payment_state => 'paid')
11
+ @paid_pos_order.update_column(:payment_state,'paid')
12
+ @unpaid_order = user.orders.create!(:user_id => user.id, :payment_state => 'checkout')
13
+ end
14
+
15
+ it { user.unpaid_pos_orders.should eq([@unpaid_pos_order]) }
16
+ end
17
+
18
+ describe '.create_with_random_password' do
19
+ it 'returns a new user' do
20
+ Spree::User.where(:email => 'test_user@pos.com').should be_blank
21
+ Spree::User.create_with_random_password('test_user@pos.com').should eq(Spree::User.where(:email => 'test_user@pos.com').first)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Variant do
4
+ let(:shipping_category) { Spree::ShippingCategory.create!(:name => 'test-shipping') }
5
+ let(:product) { Spree::Product.create!( :name => 'new_product', :price => 10, :published_at => 'Fri, 19 Jul 2013 08:11:06 UTC +00:00', :available_on => 'Fri, 19 Jul 2013 08:11:06 UTC +00:00', :shipping_category_id => shipping_category.id ) }
6
+
7
+ describe 'scopes' do
8
+ describe 'available_at_stock_location' do
9
+ before do
10
+ @variant = product.variants.create!(:sku => "M12343", :published_at => Time.current)
11
+ @unavailable_variant = product.variants.create!(:sku => "M12344", :published_at => Time.current)
12
+
13
+ @stock_location1 = Spree::StockLocation.create!(:name => 'test_location')
14
+ @stock_location2 = Spree::StockLocation.create!(:name => 'test_location')
15
+
16
+ @stock_item1 = @stock_location1.stock_items.where(:variant_id => @unavailable_variant.id).first
17
+ @stock_item1.send(:count_on_hand=, 0)
18
+ @stock_item1.save!
19
+ @stock_item2 = @stock_location1.stock_items.where(:variant_id => @variant.id).first
20
+ @stock_item2.send(:count_on_hand=, 2)
21
+ @stock_item2.save!
22
+ @stock_item3 = @stock_location2.stock_items.where(:variant_id => @unavailable_variant.id).first
23
+ @stock_item3.send(:count_on_hand=, 3)
24
+ @stock_item3.save!
25
+ end
26
+
27
+ it { Spree::Variant.available_at_stock_location(@stock_location1.id).should include(@variant) }
28
+ it { Spree::Variant.available_at_stock_location(@stock_location1.id).should_not include(@unavailable_variant) }
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,67 @@
1
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
2
+ ENV["RAILS_ENV"] ||= 'test'
3
+ require File.expand_path("../../config/environment", __FILE__)
4
+ require 'rspec/rails'
5
+ # require 'rspec/autorun'
6
+
7
+ require 'rubygems'
8
+ require 'bundler/setup'
9
+ require 'spree_pos'
10
+ require 'database_cleaner'
11
+
12
+ # Requires supporting ruby files with custom matchers and macros, etc,
13
+ # in spec/support/ and its subdirectories.
14
+ # Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
15
+
16
+ # Checks for pending migrations before tests are run.
17
+ # If you are not using ActiveRecord, you can remove this line.
18
+ # ActiveRecord::Migration.check_pending! if defined?(ActiveRecord::Migration)
19
+
20
+ RSpec.configure do |config|
21
+ # ## Mock Framework
22
+ #
23
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
24
+ #
25
+ # config.mock_with :mocha
26
+ # config.mock_with :flexmock
27
+ # config.mock_with :rr
28
+
29
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
30
+ # config.fixture_path = "#{::Rails.root}/spec/fixtures"
31
+
32
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
33
+ # examples within a transaction, remove the following line or assign false
34
+ # instead of true.
35
+ # config.use_transactional_fixtures = true
36
+
37
+ # If true, the base class of anonymous controllers will be inferred
38
+ # automatically. This will be the default behavior in future versions of
39
+ # rspec-rails.
40
+ # config.infer_base_class_for_anonymous_controllers = false
41
+
42
+ # Run specs in random order to surface order dependencies. If you find an
43
+ # order dependency and want to debug it, you can fix the order by providing
44
+ # the seed, which is printed after each run.
45
+ # --seed 1234
46
+ config.order = "random"
47
+ config.include Spree::Core::Engine.routes.url_helpers
48
+ config.before :suite do
49
+ DatabaseCleaner.strategy = :transaction
50
+ DatabaseCleaner.clean_with(:truncation)
51
+ end
52
+
53
+ config.before type: :request do
54
+ DatabaseCleaner.strategy = :truncation
55
+ end
56
+
57
+ config.before :each do
58
+ # Before each spec check if it is a Javascript test and switch between using database transactions or not where necessary.
59
+ DatabaseCleaner.strategy = example.metadata[:js] ? :truncation : :transaction
60
+ DatabaseCleaner.start
61
+ end
62
+
63
+ # After each spec clean the database.
64
+ config.after :each do
65
+ DatabaseCleaner.clean
66
+ end
67
+ end
@@ -0,0 +1,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.platform = Gem::Platform::RUBY
5
+ s.name = "spree-point-of-sale"
6
+ s.version = "1.0.0"
7
+
8
+ s.authors = ["Torsten R, Nishant Tuteja, Manish Kangia"]
9
+
10
+ s.date = "2013-07-29"
11
+
12
+ s.email = 'info@vinsol.com'
13
+ s.homepage = 'http://vinsol.com'
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+
18
+ s.require_paths = ["lib"]
19
+ s.required_ruby_version = ">= 1.9.3"
20
+
21
+ s.requirements = ["none"]
22
+ s.rubygems_version = "2.0.3"
23
+
24
+ s.summary = "Point of sale screen for Spree"
25
+ s.description = "Extend functionality for spree to give shop like ordering ability through admin end"
26
+
27
+
28
+ s.add_dependency('spree_core', '~> 2.0.0')
29
+ s.add_dependency('barby', '>= 0')
30
+ s.add_dependency('prawn', '>=0')
31
+ s.add_dependency('chunky_png', '>=0')
32
+ end
metadata ADDED
@@ -0,0 +1,183 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spree-point-of-sale
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Torsten R, Nishant Tuteja, Manish Kangia
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-07-29 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: spree_core
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 2.0.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 2.0.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: barby
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: prawn
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: chunky_png
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description: Extend functionality for spree to give shop like ordering ability through
79
+ admin end
80
+ email: info@vinsol.com
81
+ executables: []
82
+ extensions: []
83
+ extra_rdoc_files: []
84
+ files:
85
+ - .gitignore
86
+ - Gemfile
87
+ - LICENSE
88
+ - README.md
89
+ - Rakefile
90
+ - Versionfile
91
+ - app/assets/images/admin/pos/customer.png
92
+ - app/assets/images/admin/pos/del_16.png
93
+ - app/assets/images/admin/pos/plus_16.png
94
+ - app/assets/images/admin/pos/select.jpg
95
+ - app/assets/javascripts/admin/spree_pos.js
96
+ - app/assets/stylesheets/admin/html-label.css
97
+ - app/assets/stylesheets/admin/spree_pos.css
98
+ - app/controllers/spree/admin/barcode_controller.rb
99
+ - app/controllers/spree/admin/checkout_controller_decorator.rb
100
+ - app/controllers/spree/admin/pos_controller.rb
101
+ - app/controllers/spree/admin/stock_locations_controller_decorator.rb
102
+ - app/helpers/admin/barcode_helper.rb
103
+ - app/models/spree/order_decorator.rb
104
+ - app/models/spree/payment_decorator.rb
105
+ - app/models/spree/payment_method/point_of_sale.rb
106
+ - app/models/spree/shipment_decorator.rb
107
+ - app/models/spree/stock/coordinator_decorator.rb
108
+ - app/models/spree/stock_location_decorator.rb
109
+ - app/models/spree/user_decorator.rb
110
+ - app/models/spree/variant_decorator.rb
111
+ - app/overrides/add_barcode_link_for_products_and_variants.rb
112
+ - app/overrides/add_is_pos_filter_to_admin_orders.rb
113
+ - app/overrides/add_pos_button.rb
114
+ - app/overrides/add_store_to_spree_stock_locations.rb
115
+ - app/overrides/admin_adds_pos_config.rb
116
+ - app/overrides/codes.rb
117
+ - app/overrides/pos_tab.rb
118
+ - app/views/spree/admin/barcode/basic.html.erb
119
+ - app/views/spree/admin/invoice/_line_items_invoice.html.erb
120
+ - app/views/spree/admin/invoice/_receipt_header.html.erb
121
+ - app/views/spree/admin/invoice/_totals_receipt.html.erb
122
+ - app/views/spree/admin/invoice/receipt.html.erb
123
+ - app/views/spree/admin/orders/_admin_pos_config.html.erb
124
+ - app/views/spree/admin/orders/_pos_button.html.erb
125
+ - app/views/spree/admin/pos/find.html.erb
126
+ - app/views/spree/admin/pos/show.html.erb
127
+ - app/views/spree/admin/pos/update_stock_location.js.erb
128
+ - app/views/spree/admin/products/_barcode_product_link.html.erb
129
+ - app/views/spree/admin/products/_barcode_variant_link.html.erb
130
+ - config/application.rb
131
+ - config/boot.rb
132
+ - config/initializers/constants.rb
133
+ - config/locales/codes-fi.yml
134
+ - config/locales/en.yml
135
+ - config/locales/fi.yml
136
+ - config/routes.rb
137
+ - db/migrate/20130723140316_add_delivered_at_and_canceled_at_to_spree_shipments.rb
138
+ - db/migrate/20130730102503_add_store_and_address_id_in_spree_stock_locations.rb
139
+ - db/migrate/20131014053417_add_is_pos_to_spree_orders.rb
140
+ - db/migrate/20131025110309_add_card_name_to_spree_payments.rb
141
+ - lib/generators/spree_pos/install/install_generator.rb
142
+ - lib/spree_pos.rb
143
+ - lib/spree_pos/configuration.rb
144
+ - lib/spree_pos/engine.rb
145
+ - spec/constants_spec.rb
146
+ - spec/controllers/spree/admin/barcode_controller_spec.rb
147
+ - spec/controllers/spree/admin/pos_controller_spec.rb
148
+ - spec/models/spree/order_decorator_spec.rb
149
+ - spec/models/spree/payment_decorator_spec.rb
150
+ - spec/models/spree/payment_method/point_of_sale_spec.rb
151
+ - spec/models/spree/shipment_decorator_spec.rb
152
+ - spec/models/spree/stock/coordinator_spec.rb
153
+ - spec/models/spree/stock_location_decorator_spec.rb
154
+ - spec/models/spree/user_decorator_spec.rb
155
+ - spec/models/spree/varaint_decorator_spec.rb
156
+ - spec/spec_helper.rb
157
+ - spree-point-of-sale.gemspec
158
+ homepage: http://vinsol.com
159
+ licenses: []
160
+ post_install_message:
161
+ rdoc_options: []
162
+ require_paths:
163
+ - lib
164
+ required_ruby_version: !ruby/object:Gem::Requirement
165
+ none: false
166
+ requirements:
167
+ - - ! '>='
168
+ - !ruby/object:Gem::Version
169
+ version: 1.9.3
170
+ required_rubygems_version: !ruby/object:Gem::Requirement
171
+ none: false
172
+ requirements:
173
+ - - ! '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ requirements:
177
+ - none
178
+ rubyforge_project:
179
+ rubygems_version: 1.8.25
180
+ signing_key:
181
+ specification_version: 3
182
+ summary: Point of sale screen for Spree
183
+ test_files: []