solidus_product_bundle 1.0.0

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 (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