solidus_product_bundle 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +5 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +11 -0
  5. data/Gemfile +9 -0
  6. data/LICENSE.md +13 -0
  7. data/README.markdown +95 -0
  8. data/README.md +2 -0
  9. data/Rakefile +15 -0
  10. data/app/assets/images/spinner.gif +0 -0
  11. data/app/assets/javascripts/spree/backend/spree_product_assembly/index.js.coffee +82 -0
  12. data/app/assets/javascripts/spree/backend/spree_product_assembly/translations.js.erb +3 -0
  13. data/app/assets/javascripts/spree/frontend/spree_product_assembly.js +1 -0
  14. data/app/assets/stylesheets/spree/backend/spree_product_assembly.css +3 -0
  15. data/app/assets/stylesheets/spree/frontend/spree_product_assembly.css +3 -0
  16. data/app/controllers/spree/admin/parts_controller.rb +63 -0
  17. data/app/controllers/spree/checkout_controller_decorator.rb +9 -0
  18. data/app/helpers/spree/admin/orders_helper_decorator.rb +9 -0
  19. data/app/models/spree/assemblies_part.rb +33 -0
  20. data/app/models/spree/assign_part_to_bundle_form.rb +64 -0
  21. data/app/models/spree/inventory_unit_decorator.rb +13 -0
  22. data/app/models/spree/line_item_decorator.rb +65 -0
  23. data/app/models/spree/order_contents_decorator.rb +35 -0
  24. data/app/models/spree/order_inventory_assembly.rb +54 -0
  25. data/app/models/spree/part_line_item.rb +6 -0
  26. data/app/models/spree/product_decorator.rb +37 -0
  27. data/app/models/spree/shipment_decorator.rb +50 -0
  28. data/app/models/spree/stock/availability_validator.rb +27 -0
  29. data/app/models/spree/stock/inventory_unit_builder_decorator.rb +30 -0
  30. data/app/models/spree/variant_decorator.rb +13 -0
  31. data/app/overrides/add_admin_product_form_fields.rb +5 -0
  32. data/app/overrides/add_admin_tabs.rb +5 -0
  33. data/app/overrides/add_line_item_description.rb +5 -0
  34. data/app/overrides/spree/admin/orders/_form/inject_product_assemblies.html.erb.deface +3 -0
  35. data/app/overrides/spree/admin/orders/_shipment/stock_contents.html.erb.deface +2 -0
  36. data/app/overrides/spree/checkout/_delivery/remove_unshippable_markup.html.erb.deface +1 -0
  37. data/app/overrides/spree/checkout/_delivery/render_line_item_manifest.html.erb.deface +3 -0
  38. data/app/overrides/spree/products/add_links_to_parts.rb +6 -0
  39. data/app/overrides/spree/products/show/remove_add_to_cart_button_for_non_individual_sale_products.html.erb.deface +4 -0
  40. data/app/overrides/spree/shared/_order_details/part_description.html.erb.deface +16 -0
  41. data/app/serializers/spree/wombat/assembly_shipment_serializer.rb +37 -0
  42. data/app/views/spree/admin/orders/_assemblies.html.erb +62 -0
  43. data/app/views/spree/admin/orders/_stock_contents.html.erb +69 -0
  44. data/app/views/spree/admin/orders/_stock_item.html.erb +46 -0
  45. data/app/views/spree/admin/parts/_parts_table.html.erb +33 -0
  46. data/app/views/spree/admin/parts/available.html.erb +43 -0
  47. data/app/views/spree/admin/parts/index.html.erb +19 -0
  48. data/app/views/spree/admin/parts/update_parts_table.js.erb +2 -0
  49. data/app/views/spree/admin/products/_product_assembly_fields.html.erb +23 -0
  50. data/app/views/spree/admin/shared/_product_assembly_product_tabs.html.erb +3 -0
  51. data/app/views/spree/checkout/_line_item_manifest.html.erb +17 -0
  52. data/app/views/spree/orders/_cart_description.html.erb +16 -0
  53. data/app/views/spree/products/show/_parts.html.erb +38 -0
  54. data/bin/rails +7 -0
  55. data/config/locales/en.yml +15 -0
  56. data/config/locales/fr.yml +12 -0
  57. data/config/locales/ru.yml +12 -0
  58. data/config/locales/sv.yml +12 -0
  59. data/config/routes.rb +19 -0
  60. data/db/migrate/20091028152124_add_many_to_many_relation_to_products.rb +13 -0
  61. data/db/migrate/20091029165620_add_parts_fields_to_products.rb +27 -0
  62. data/db/migrate/20120316141830_namespace_product_assembly_for_spree_one.rb +9 -0
  63. data/db/migrate/20140620223938_add_id_to_spree_assemblies_parts.rb +9 -0
  64. data/db/migrate/20150219192418_add_variant_selection_deferred_to_assemblies_parts.rb +5 -0
  65. data/db/migrate/20150303105615_create_part_line_items.rb +9 -0
  66. data/lib/generators/spree_product_assembly/install/install_generator.rb +24 -0
  67. data/lib/spree_product_assembly/engine.rb +21 -0
  68. data/lib/spree_product_assembly.rb +4 -0
  69. data/lib/tasks/spree2_upgrade.rake +29 -0
  70. data/solidus_product_bundle.gemspec +33 -0
  71. data/spec/features/adding_items_to_cart_spec.rb +203 -0
  72. data/spec/features/admin/orders_spec.rb +29 -0
  73. data/spec/features/admin/parts_spec.rb +183 -0
  74. data/spec/features/checkout_spec.rb +249 -0
  75. data/spec/features/updating_items_in_cart_spec.rb +199 -0
  76. data/spec/models/spree/assemblies_part_spec.rb +18 -0
  77. data/spec/models/spree/assign_part_to_bundle_form_spec.rb +51 -0
  78. data/spec/models/spree/inventory_unit_spec.rb +32 -0
  79. data/spec/models/spree/line_item_spec.rb +88 -0
  80. data/spec/models/spree/order_contents_spec.rb +82 -0
  81. data/spec/models/spree/order_inventory_assembly_spec.rb +321 -0
  82. data/spec/models/spree/order_inventory_spec.rb +34 -0
  83. data/spec/models/spree/product_spec.rb +40 -0
  84. data/spec/models/spree/shipment_spec.rb +113 -0
  85. data/spec/models/spree/stock/availability_validator_spec.rb +71 -0
  86. data/spec/models/spree/stock/coordinator_spec.rb +46 -0
  87. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +36 -0
  88. data/spec/models/spree/variant_spec.rb +28 -0
  89. data/spec/serializers/spree/wombat/assembly_shipment_serializer_spec.rb +36 -0
  90. data/spec/spec_helper.rb +56 -0
  91. data/spec/support/factories/assemblies_part_factory.rb +10 -0
  92. data/spec/support/factories/part_line_item_factory.rb +9 -0
  93. data/spec/support/factories/variant_factory.rb +15 -0
  94. data/spec/support/shared_contexts/order_with_bundle.rb +13 -0
  95. metadata +374 -0
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ module Spree
4
+ module Stock
5
+ describe Coordinator do
6
+ subject { Coordinator.new(order) }
7
+
8
+ context "order shares variant as individual and within bundle" do
9
+ include_context "product is ordered as individual and within a bundle"
10
+
11
+ before { StockItem.update_all 'count_on_hand = 10' }
12
+
13
+ context "bundle part requires more units than individual product" do
14
+ before { order.contents.add(bundle_variant, 5) }
15
+
16
+ let(:bundle_item_quantity) { order.find_line_item_by_variant(bundle_variant).quantity }
17
+
18
+ it "calculates items quantity properly" do
19
+ expected_units_on_package = order.line_items.to_a.sum(&:quantity) - bundle_item_quantity + (bundle.parts.count * bundle_item_quantity)
20
+
21
+ expect(subject.packages.sum(&:quantity)).to eql expected_units_on_package
22
+ end
23
+ end
24
+ end
25
+
26
+ context "multiple stock locations" do
27
+ let!(:stock_locations) { (1..3).map { create(:stock_location) } }
28
+
29
+ let(:order) { create(:order_with_line_items) }
30
+ let(:parts) { (1..3).map { create(:variant) } }
31
+
32
+ let(:bundle_variant) { order.variants.first }
33
+ let(:bundle) { bundle_variant.product }
34
+
35
+ let(:bundle_item_quantity) { order.find_line_item_by_variant(bundle_variant).quantity }
36
+
37
+ before { bundle.parts << parts }
38
+
39
+ it "haha" do
40
+ expected_units_on_package = order.line_items.to_a.sum(&:quantity) - bundle_item_quantity + (bundle.parts.count * bundle_item_quantity)
41
+ expect(subject.packages.sum(&:quantity)).to eql expected_units_on_package
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ module Spree
4
+ module Stock
5
+ describe InventoryUnitBuilder, :type => :model do
6
+ subject { InventoryUnitBuilder.new(order) }
7
+
8
+ context "order shares variant as individual and within bundle" do
9
+ include_context "product is ordered as individual and within a bundle" do
10
+ let(:bundle_item_quantity) { order.find_line_item_by_variant(bundle_variant).quantity }
11
+
12
+ describe "#units" do
13
+ it "returns an inventory unit for each part of each quantity for the order's line items" do
14
+ units = subject.units
15
+ expect(units.count).to eq 4
16
+ expect(units[0].line_item.quantity).to eq order.line_items.first.quantity
17
+ expect(units[0].line_item.quantity).to eq bundle_item_quantity
18
+
19
+ line_item = order.line_items.first
20
+
21
+ expect(units.map(&:variant)).to match_array line_item.parts
22
+ end
23
+
24
+ it "builds the inventory units as pending" do
25
+ expect(subject.units.map(&:pending).uniq).to eq [true]
26
+ end
27
+
28
+ it "associates the inventory units to the order" do
29
+ expect(subject.units.map(&:order).uniq).to eq [order]
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ module Spree
4
+ describe Variant do
5
+ context "filter assemblies" do
6
+ let(:mug) { create(:product) }
7
+ let(:tshirt) { create(:product) }
8
+ let(:variant) { create(:variant) }
9
+
10
+ context "variant has more than one assembly" do
11
+ before { variant.assemblies.push [mug, tshirt] }
12
+
13
+ it "returns both products" do
14
+ expect(variant.assemblies_for([mug, tshirt])).to include mug
15
+ expect(variant.assemblies_for([mug, tshirt])).to include tshirt
16
+ end
17
+
18
+ it { expect(variant).to be_a_part }
19
+ end
20
+
21
+ context "variant no assembly" do
22
+ it "returns both products" do
23
+ variant.assemblies_for([mug, tshirt]).should be_empty
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,36 @@
1
+ require "spec_helper"
2
+
3
+ module Spree
4
+ module Wombat
5
+ describe AssemblyShipmentSerializer do
6
+
7
+ let(:order) { Order.create }
8
+ before { order.update_column :state, 'complete' }
9
+
10
+ context "with bundle line item" do
11
+
12
+ let(:bundle) { create(:variant) }
13
+ let!(:parts) { (1..2).map { create(:variant) } }
14
+ let!(:bundle_parts) { bundle.product.parts << parts }
15
+ let!(:line_item) { order.contents.add(bundle, 1) }
16
+ let!(:shipment) { order.create_proposed_shipments.first }
17
+ let(:serialized_shipment) { JSON.parse (AssemblyShipmentSerializer.new(shipment, root: false).to_json) }
18
+
19
+ it "adds a bundled_items object" do
20
+ expect(serialized_shipment["items"].first["bundled_items"]).to_not be_nil
21
+ end
22
+ end
23
+
24
+ context "with regular line_item" do
25
+ let!(:line_item) { order.contents.add(create(:variant), 1) }
26
+ let!(:shipment) { order.create_proposed_shipments.first }
27
+ let(:serialized_shipment) { JSON.parse (AssemblyShipmentSerializer.new(shipment, root: false).to_json) }
28
+
29
+ it "will not add the bundled_items object" do
30
+ expect(serialized_shipment["items"].first["bundled_items"]).to be_nil
31
+ end
32
+ end
33
+
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,56 @@
1
+ require 'simplecov'
2
+ SimpleCov.start 'rails'
3
+
4
+ ENV["RAILS_ENV"] = "test"
5
+
6
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
7
+
8
+ require 'rspec/rails'
9
+ require 'ffaker'
10
+ require 'database_cleaner'
11
+
12
+ require 'capybara/rspec'
13
+ require 'capybara/rails'
14
+ require 'capybara/poltergeist'
15
+ Capybara.javascript_driver = :poltergeist
16
+
17
+ Dir[File.join(File.dirname(__FILE__), "support/**/*.rb")].each {|f| require f }
18
+
19
+ require 'spree/testing_support/factories'
20
+ require 'spree/testing_support/url_helpers'
21
+ require 'spree/testing_support/authorization_helpers'
22
+ require 'spree/testing_support/capybara_ext'
23
+
24
+ # ActiveRecord::Base.logger = Logger.new(STDOUT)
25
+
26
+ RSpec.configure do |config|
27
+ config.mock_with :rspec
28
+ config.use_transactional_fixtures = false
29
+
30
+ config.before :suite do
31
+ Capybara.match = :prefer_exact
32
+ DatabaseCleaner.clean_with :truncation
33
+ end
34
+
35
+ config.before(:each) do
36
+ Rails.cache.clear
37
+
38
+ if RSpec.current_example.metadata[:js]
39
+ DatabaseCleaner.strategy = :truncation
40
+ else
41
+ DatabaseCleaner.strategy = :transaction
42
+ end
43
+
44
+ DatabaseCleaner.start
45
+ end
46
+
47
+ config.after(:each) do
48
+ # Ensure js requests finish processing before advancing to the next test
49
+ wait_for_ajax if RSpec.current_example.metadata[:js]
50
+
51
+ DatabaseCleaner.clean
52
+ end
53
+
54
+ config.include FactoryGirl::Syntax::Methods
55
+ config.include Spree::TestingSupport::UrlHelpers
56
+ end
@@ -0,0 +1,10 @@
1
+ require 'factory_girl'
2
+
3
+ FactoryGirl.define do
4
+ factory :assemblies_part, class: "Spree::AssembliesPart" do
5
+ assembly { build(:product) }
6
+ part { build(:variant) }
7
+ count 1
8
+ variant_selection_deferred false
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ require 'factory_girl'
2
+
3
+ FactoryGirl.define do
4
+ factory :part_line_item, class: "Spree::PartLineItem" do
5
+ line_item
6
+ variant
7
+ quantity 1
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ require 'factory_girl'
2
+
3
+ FactoryGirl.define do
4
+ factory :variant_in_stock, parent: :variant do
5
+ transient do
6
+ quantity_in_stock 10
7
+ end
8
+
9
+ after(:create) do |variant, evaluator|
10
+ variant.stock_items.first.adjust_count_on_hand(
11
+ evaluator.quantity_in_stock
12
+ )
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ shared_context "product is ordered as individual and within a bundle" do
2
+ let(:order) { create(:order_with_line_items) }
3
+ let(:parts) { (1..3).map { create(:variant) } }
4
+
5
+ let(:bundle_variant) { order.variants.first }
6
+ let(:bundle) { bundle_variant.product }
7
+
8
+ let(:common_product) { order.variants.last }
9
+
10
+ before do
11
+ bundle.parts << [parts, common_product]
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,374 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: solidus_product_bundle
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Sapna Tomar
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-03-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: solidus_api
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.0.pre
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '2'
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.0.pre
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '2'
33
+ - !ruby/object:Gem::Dependency
34
+ name: solidus_backend
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 1.0.0.pre
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '2'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 1.0.0.pre
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '2'
53
+ - !ruby/object:Gem::Dependency
54
+ name: solidus_core
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 1.0.0.pre
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: '2'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 1.0.0.pre
70
+ - - "<"
71
+ - !ruby/object:Gem::Version
72
+ version: '2'
73
+ - !ruby/object:Gem::Dependency
74
+ name: rspec-rails
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: 3.1.0
80
+ type: :development
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - "~>"
85
+ - !ruby/object:Gem::Version
86
+ version: 3.1.0
87
+ - !ruby/object:Gem::Dependency
88
+ name: sqlite3
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ type: :development
95
+ prerelease: false
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ - !ruby/object:Gem::Dependency
102
+ name: ffaker
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ type: :development
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ - !ruby/object:Gem::Dependency
116
+ name: factory_girl
117
+ requirement: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - "~>"
120
+ - !ruby/object:Gem::Version
121
+ version: '4.4'
122
+ type: :development
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - "~>"
127
+ - !ruby/object:Gem::Version
128
+ version: '4.4'
129
+ - !ruby/object:Gem::Dependency
130
+ name: coffee-rails
131
+ requirement: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - "~>"
134
+ - !ruby/object:Gem::Version
135
+ version: 4.0.0
136
+ type: :development
137
+ prerelease: false
138
+ version_requirements: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - "~>"
141
+ - !ruby/object:Gem::Version
142
+ version: 4.0.0
143
+ - !ruby/object:Gem::Dependency
144
+ name: sass-rails
145
+ requirement: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: 4.0.0
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - "~>"
155
+ - !ruby/object:Gem::Version
156
+ version: 4.0.0
157
+ - !ruby/object:Gem::Dependency
158
+ name: capybara
159
+ requirement: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - "~>"
162
+ - !ruby/object:Gem::Version
163
+ version: '2.4'
164
+ type: :development
165
+ prerelease: false
166
+ version_requirements: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - "~>"
169
+ - !ruby/object:Gem::Version
170
+ version: '2.4'
171
+ - !ruby/object:Gem::Dependency
172
+ name: poltergeist
173
+ requirement: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - "~>"
176
+ - !ruby/object:Gem::Version
177
+ version: '1.6'
178
+ type: :development
179
+ prerelease: false
180
+ version_requirements: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - "~>"
183
+ - !ruby/object:Gem::Version
184
+ version: '1.6'
185
+ - !ruby/object:Gem::Dependency
186
+ name: database_cleaner
187
+ requirement: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - "~>"
190
+ - !ruby/object:Gem::Version
191
+ version: '1.3'
192
+ type: :development
193
+ prerelease: false
194
+ version_requirements: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - "~>"
197
+ - !ruby/object:Gem::Version
198
+ version: '1.3'
199
+ - !ruby/object:Gem::Dependency
200
+ name: simplecov
201
+ requirement: !ruby/object:Gem::Requirement
202
+ requirements:
203
+ - - ">="
204
+ - !ruby/object:Gem::Version
205
+ version: '0'
206
+ type: :development
207
+ prerelease: false
208
+ version_requirements: !ruby/object:Gem::Requirement
209
+ requirements:
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ version: '0'
213
+ - !ruby/object:Gem::Dependency
214
+ name: pg
215
+ requirement: !ruby/object:Gem::Requirement
216
+ requirements:
217
+ - - ">="
218
+ - !ruby/object:Gem::Version
219
+ version: '0'
220
+ type: :development
221
+ prerelease: false
222
+ version_requirements: !ruby/object:Gem::Requirement
223
+ requirements:
224
+ - - ">="
225
+ - !ruby/object:Gem::Version
226
+ version: '0'
227
+ description: Adds oportunity to make bundle of products to your Spree store
228
+ email: ystomar12488@gmail.com
229
+ executables: []
230
+ extensions: []
231
+ extra_rdoc_files: []
232
+ files:
233
+ - ".gitignore"
234
+ - ".rspec"
235
+ - ".travis.yml"
236
+ - Gemfile
237
+ - LICENSE.md
238
+ - README.markdown
239
+ - README.md
240
+ - Rakefile
241
+ - app/assets/images/spinner.gif
242
+ - app/assets/javascripts/spree/backend/spree_product_assembly/index.js.coffee
243
+ - app/assets/javascripts/spree/backend/spree_product_assembly/translations.js.erb
244
+ - app/assets/javascripts/spree/frontend/spree_product_assembly.js
245
+ - app/assets/stylesheets/spree/backend/spree_product_assembly.css
246
+ - app/assets/stylesheets/spree/frontend/spree_product_assembly.css
247
+ - app/controllers/spree/admin/parts_controller.rb
248
+ - app/controllers/spree/checkout_controller_decorator.rb
249
+ - app/helpers/spree/admin/orders_helper_decorator.rb
250
+ - app/models/spree/assemblies_part.rb
251
+ - app/models/spree/assign_part_to_bundle_form.rb
252
+ - app/models/spree/inventory_unit_decorator.rb
253
+ - app/models/spree/line_item_decorator.rb
254
+ - app/models/spree/order_contents_decorator.rb
255
+ - app/models/spree/order_inventory_assembly.rb
256
+ - app/models/spree/part_line_item.rb
257
+ - app/models/spree/product_decorator.rb
258
+ - app/models/spree/shipment_decorator.rb
259
+ - app/models/spree/stock/availability_validator.rb
260
+ - app/models/spree/stock/inventory_unit_builder_decorator.rb
261
+ - app/models/spree/variant_decorator.rb
262
+ - app/overrides/add_admin_product_form_fields.rb
263
+ - app/overrides/add_admin_tabs.rb
264
+ - app/overrides/add_line_item_description.rb
265
+ - app/overrides/spree/admin/orders/_form/inject_product_assemblies.html.erb.deface
266
+ - app/overrides/spree/admin/orders/_shipment/stock_contents.html.erb.deface
267
+ - app/overrides/spree/checkout/_delivery/remove_unshippable_markup.html.erb.deface
268
+ - app/overrides/spree/checkout/_delivery/render_line_item_manifest.html.erb.deface
269
+ - app/overrides/spree/products/add_links_to_parts.rb
270
+ - app/overrides/spree/products/show/remove_add_to_cart_button_for_non_individual_sale_products.html.erb.deface
271
+ - app/overrides/spree/shared/_order_details/part_description.html.erb.deface
272
+ - app/serializers/spree/wombat/assembly_shipment_serializer.rb
273
+ - app/views/spree/admin/orders/_assemblies.html.erb
274
+ - app/views/spree/admin/orders/_stock_contents.html.erb
275
+ - app/views/spree/admin/orders/_stock_item.html.erb
276
+ - app/views/spree/admin/parts/_parts_table.html.erb
277
+ - app/views/spree/admin/parts/available.html.erb
278
+ - app/views/spree/admin/parts/index.html.erb
279
+ - app/views/spree/admin/parts/update_parts_table.js.erb
280
+ - app/views/spree/admin/products/_product_assembly_fields.html.erb
281
+ - app/views/spree/admin/shared/_product_assembly_product_tabs.html.erb
282
+ - app/views/spree/checkout/_line_item_manifest.html.erb
283
+ - app/views/spree/orders/_cart_description.html.erb
284
+ - app/views/spree/products/show/_parts.html.erb
285
+ - bin/rails
286
+ - config/locales/en.yml
287
+ - config/locales/fr.yml
288
+ - config/locales/ru.yml
289
+ - config/locales/sv.yml
290
+ - config/routes.rb
291
+ - db/migrate/20091028152124_add_many_to_many_relation_to_products.rb
292
+ - db/migrate/20091029165620_add_parts_fields_to_products.rb
293
+ - db/migrate/20120316141830_namespace_product_assembly_for_spree_one.rb
294
+ - db/migrate/20140620223938_add_id_to_spree_assemblies_parts.rb
295
+ - db/migrate/20150219192418_add_variant_selection_deferred_to_assemblies_parts.rb
296
+ - db/migrate/20150303105615_create_part_line_items.rb
297
+ - lib/generators/spree_product_assembly/install/install_generator.rb
298
+ - lib/spree_product_assembly.rb
299
+ - lib/spree_product_assembly/engine.rb
300
+ - lib/tasks/spree2_upgrade.rake
301
+ - solidus_product_bundle.gemspec
302
+ - spec/features/adding_items_to_cart_spec.rb
303
+ - spec/features/admin/orders_spec.rb
304
+ - spec/features/admin/parts_spec.rb
305
+ - spec/features/checkout_spec.rb
306
+ - spec/features/updating_items_in_cart_spec.rb
307
+ - spec/models/spree/assemblies_part_spec.rb
308
+ - spec/models/spree/assign_part_to_bundle_form_spec.rb
309
+ - spec/models/spree/inventory_unit_spec.rb
310
+ - spec/models/spree/line_item_spec.rb
311
+ - spec/models/spree/order_contents_spec.rb
312
+ - spec/models/spree/order_inventory_assembly_spec.rb
313
+ - spec/models/spree/order_inventory_spec.rb
314
+ - spec/models/spree/product_spec.rb
315
+ - spec/models/spree/shipment_spec.rb
316
+ - spec/models/spree/stock/availability_validator_spec.rb
317
+ - spec/models/spree/stock/coordinator_spec.rb
318
+ - spec/models/spree/stock/inventory_unit_builder_spec.rb
319
+ - spec/models/spree/variant_spec.rb
320
+ - spec/serializers/spree/wombat/assembly_shipment_serializer_spec.rb
321
+ - spec/spec_helper.rb
322
+ - spec/support/factories/assemblies_part_factory.rb
323
+ - spec/support/factories/part_line_item_factory.rb
324
+ - spec/support/factories/variant_factory.rb
325
+ - spec/support/shared_contexts/order_with_bundle.rb
326
+ homepage: https://github.com/YSTomar/solidus_product_bundle
327
+ licenses: []
328
+ metadata: {}
329
+ post_install_message:
330
+ rdoc_options: []
331
+ require_paths:
332
+ - lib
333
+ required_ruby_version: !ruby/object:Gem::Requirement
334
+ requirements:
335
+ - - ">="
336
+ - !ruby/object:Gem::Version
337
+ version: 1.9.3
338
+ required_rubygems_version: !ruby/object:Gem::Requirement
339
+ requirements:
340
+ - - ">="
341
+ - !ruby/object:Gem::Version
342
+ version: '0'
343
+ requirements:
344
+ - none
345
+ rubyforge_project:
346
+ rubygems_version: 2.4.5
347
+ signing_key:
348
+ specification_version: 4
349
+ summary: Adds oportunity to make bundle of products to your Spree store
350
+ test_files:
351
+ - spec/features/adding_items_to_cart_spec.rb
352
+ - spec/features/admin/orders_spec.rb
353
+ - spec/features/admin/parts_spec.rb
354
+ - spec/features/checkout_spec.rb
355
+ - spec/features/updating_items_in_cart_spec.rb
356
+ - spec/models/spree/assemblies_part_spec.rb
357
+ - spec/models/spree/assign_part_to_bundle_form_spec.rb
358
+ - spec/models/spree/inventory_unit_spec.rb
359
+ - spec/models/spree/line_item_spec.rb
360
+ - spec/models/spree/order_contents_spec.rb
361
+ - spec/models/spree/order_inventory_assembly_spec.rb
362
+ - spec/models/spree/order_inventory_spec.rb
363
+ - spec/models/spree/product_spec.rb
364
+ - spec/models/spree/shipment_spec.rb
365
+ - spec/models/spree/stock/availability_validator_spec.rb
366
+ - spec/models/spree/stock/coordinator_spec.rb
367
+ - spec/models/spree/stock/inventory_unit_builder_spec.rb
368
+ - spec/models/spree/variant_spec.rb
369
+ - spec/serializers/spree/wombat/assembly_shipment_serializer_spec.rb
370
+ - spec/spec_helper.rb
371
+ - spec/support/factories/assemblies_part_factory.rb
372
+ - spec/support/factories/part_line_item_factory.rb
373
+ - spec/support/factories/variant_factory.rb
374
+ - spec/support/shared_contexts/order_with_bundle.rb