piggybak 0.6.34 → 0.7.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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -14
  3. data/Gemfile.lock +18 -149
  4. data/README.md +6 -0
  5. data/app/assets/javascripts/piggybak/piggybak.js +18 -15
  6. data/app/assets/javascripts/piggybak/piggybak.states.js +7 -4
  7. data/app/assets/javascripts/rails_admin/custom/ui.js.erb +33 -28
  8. data/app/controllers/piggybak/orders_controller.rb +15 -3
  9. data/app/models/piggybak/address.rb +8 -11
  10. data/app/models/piggybak/country.rb +3 -4
  11. data/app/models/piggybak/line_item.rb +3 -3
  12. data/app/models/piggybak/order.rb +11 -6
  13. data/app/models/piggybak/order_note.rb +2 -3
  14. data/app/models/piggybak/payment.rb +4 -7
  15. data/app/models/piggybak/payment_method.rb +2 -4
  16. data/app/models/piggybak/payment_method_value.rb +2 -4
  17. data/app/models/piggybak/sellable.rb +4 -7
  18. data/app/models/piggybak/shipment.rb +2 -4
  19. data/app/models/piggybak/shipping_calculator/flat_rate.rb +1 -1
  20. data/app/models/piggybak/shipping_calculator/range.rb +1 -1
  21. data/app/models/piggybak/shipping_method +0 -0
  22. data/app/models/piggybak/shipping_method.rb +3 -6
  23. data/app/models/piggybak/shipping_method_value.rb +2 -3
  24. data/app/models/piggybak/state.rb +0 -1
  25. data/app/models/piggybak/tax_calculator/percent.rb +6 -10
  26. data/app/models/piggybak/tax_method.rb +5 -6
  27. data/app/models/piggybak/tax_method_value.rb +2 -3
  28. data/app/views/piggybak/orders/_user_details.html.erb +2 -2
  29. data/app/views/rails_admin/main/{_copy_from_billing.html.haml → _copy_from_billing.html.erb} +0 -0
  30. data/app/views/rails_admin/main/_location_select.html.haml +2 -4
  31. data/app/views/rails_admin/main/_polymorphic_nested.html.haml +1 -25
  32. data/config/routes.rb +17 -19
  33. data/db/migrate/20140325133841_upgrade_piggybak_tables.rb +19 -0
  34. data/lib/piggybak.rb +1 -477
  35. data/lib/piggybak/config.rb +2 -0
  36. data/lib/piggybak/engine.rb +481 -0
  37. data/lib/piggybak/version.rb +1 -1
  38. metadata +6 -46
  39. data/lib/currency.rb +0 -5
@@ -17,6 +17,7 @@ module Piggybak
17
17
  attr_accessor :extra_secure_paths
18
18
  attr_accessor :manage_classes
19
19
  attr_accessor :extra_abilities
20
+ attr_accessor :additional_line_item_attributes
20
21
 
21
22
  def reset
22
23
  @manage_classes = ["::Piggybak::Sellable",
@@ -75,6 +76,7 @@ module Piggybak
75
76
  @secure_checkout = false
76
77
  @secure_prefix = ''
77
78
  @extra_secure_paths = []
79
+ @additional_line_item_attributes = {}
78
80
  end
79
81
  end
80
82
 
@@ -0,0 +1,481 @@
1
+ module Piggybak
2
+ class Engine < Rails::Engine
3
+ isolate_namespace Piggybak
4
+
5
+ initializer "piggybak.ssl_enforcer" do |app|
6
+ # Note: If your main application also uses rack-ssl-enforcer,
7
+ # append to Piggyak.config.extra_secure_paths
8
+ # inside a before_initialize block
9
+ if Piggybak.config.secure_checkout
10
+ paths = [/^#{Piggybak.config.secure_prefix}\/checkout\/$/,
11
+ "#{Piggybak.config.secure_prefix}/checkout/orders/tax",
12
+ "#{Piggybak.config.secure_prefix}/checkout/orders/shipping",
13
+ "#{Piggybak.config.secure_prefix}/checkout/orders/geodata",
14
+ /^\/users$/,
15
+ "/users/sign_in",
16
+ "/users/sign_out",
17
+ "/users/sign_up"]
18
+ Piggybak.config.extra_secure_paths.each do |extra_path|
19
+ paths << [/^#{Piggybak.config.secure_prefix}#{extra_path}/]
20
+ end
21
+ app.config.middleware.use Rack::SslEnforcer,
22
+ :only => paths,
23
+ :strict => true
24
+ end
25
+ end
26
+
27
+ initializer "piggybak.add_helper" do |app|
28
+ ActiveSupport.on_load :action_controller do
29
+ helper :piggybak
30
+ end
31
+ end
32
+
33
+ initializer "piggybak.assets.precompile" do |app|
34
+ app.config.assets.precompile += ['piggybak/piggybak-application.js']
35
+ end
36
+
37
+ # Needed for development
38
+ config.to_prepare do
39
+ Piggybak.config.line_item_types.each do |k, v|
40
+ plural_k = k.to_s.pluralize.to_sym
41
+ if v[:nested_attrs]
42
+ Piggybak::LineItem.class_eval do
43
+ # TODO: dependent destroy destroys all line items. Fix and remove after_destroy on line items
44
+ has_one k, :class_name => v[:class_name] #, :dependent => :destroy
45
+ accepts_nested_attributes_for k
46
+ end
47
+ end
48
+ Piggybak::Order.class_eval do
49
+ define_method "#{k}_charge" do
50
+ self.line_items.send(plural_k).map(&:price).reduce(:+) || 0
51
+ end
52
+ end
53
+ end
54
+ Piggybak::Order.class_eval do
55
+ has_many :line_items, :inverse_of => :order do
56
+ Piggybak.config.line_item_types.each do |k, v|
57
+ # Define proxy association method for line items
58
+ # e.g. self.line_items.sellables
59
+ # e.g. self.line_items.taxes
60
+ define_method "#{k.to_s.pluralize}" do
61
+ proxy_association.select { |li| li.line_item_type == "#{k}" && !li.marked_for_destruction? }
62
+ end
63
+ end
64
+ end
65
+ # Define method subtotal on order, alias to sellable_charge
66
+ alias :subtotal :sellable_charge
67
+ end
68
+ end
69
+
70
+ initializer "piggybak.rails_admin_config" do |app|
71
+ Piggybak.config.line_item_types.each do |k, v|
72
+ plural_k = k.to_s.pluralize.to_sym
73
+ if v[:nested_attrs]
74
+ Piggybak::LineItem.class_eval do
75
+ # TODO: See above
76
+ has_one k, :class_name => v[:class_name]
77
+ accepts_nested_attributes_for k
78
+ end
79
+ end
80
+ end
81
+ RailsAdmin::Config.reset_model(Piggybak::LineItem)
82
+
83
+ RailsAdmin.config do |config|
84
+ config.label_methods << :admin_label
85
+
86
+ config.model Piggybak::LineItem do
87
+ label "Line Item"
88
+ visible false
89
+
90
+ edit do
91
+ field :line_item_type do
92
+ label "Line Item Type"
93
+ partial "polymorphic_nested"
94
+ help ""
95
+ end
96
+ Piggybak.config.line_item_types.each do |k, v|
97
+ if v[:nested_attrs]
98
+ field k do
99
+ active true
100
+ end
101
+ end
102
+ end
103
+ field :sellable_id, :enum do
104
+ label "Sellable"
105
+ help "Required"
106
+ end
107
+ field :price
108
+ field :quantity
109
+ field :description
110
+ end
111
+ end
112
+
113
+ config.model Piggybak::Sellable do
114
+ label "Sellable"
115
+ visible false
116
+ edit do
117
+ field :sku
118
+ field :description
119
+ field :price
120
+ field :active
121
+ field :quantity
122
+ field :unlimited_inventory do
123
+ help "If true, backorders on this variant will be allowed, regardless of quantity on hand."
124
+ end
125
+ end
126
+ end
127
+
128
+ config.model Piggybak::Order do
129
+ label "Order"
130
+ navigation_label "Orders"
131
+ weight 1
132
+ object_label_method :admin_label
133
+
134
+ show do
135
+ field :status
136
+ field :total do
137
+ formatted_value do
138
+ "$%.2f" % value
139
+ end
140
+ end
141
+ field :total_due do
142
+ formatted_value do
143
+ "$%.2f" % value
144
+ end
145
+ end
146
+ field :created_at
147
+ field :email
148
+ field :phone
149
+
150
+ field :user if defined?(User)
151
+
152
+ field :line_items
153
+ field :billing_address
154
+ field :shipping_address
155
+ field :order_notes do
156
+ pretty_value do
157
+ value.inject([]) { |arr, o| arr << o.details }.join("<br /><br />").html_safe
158
+ end
159
+ end
160
+ field :ip_address
161
+ field :user_agent
162
+ end
163
+ list do
164
+ field :id
165
+ field :billing_address do
166
+ label "Billing Name"
167
+ pretty_value do
168
+ "#{value.lastname}, #{value.firstname}"
169
+ end
170
+ searchable [:firstname, :lastname]
171
+ sortable false
172
+ end
173
+ field :total do
174
+ formatted_value do
175
+ "$%.2f" % value
176
+ end
177
+ end
178
+ field :created_at do
179
+ strftime_format "%d-%m-%Y"
180
+ end
181
+ field :status
182
+ end
183
+ edit do
184
+ field :recorded_changer, :hidden do
185
+ partial "recorded_changer"
186
+ end
187
+ field :status do
188
+ visible do
189
+ !bindings[:object].new_record?
190
+ end
191
+ read_only do
192
+ !bindings[:object].new_record?
193
+ end
194
+ end
195
+
196
+ field :details do
197
+ partial "order_details"
198
+ help ""
199
+ visible do
200
+ !bindings[:object].new_record?
201
+ end
202
+ end
203
+
204
+ field :user if defined?(User)
205
+ field :email
206
+ field :phone
207
+ field :ip_address do
208
+ partial "ip_address"
209
+ end
210
+ field :user_agent do
211
+ read_only true
212
+ end
213
+ field :billing_address do
214
+ active true
215
+ help "Required"
216
+ end
217
+ field :shipping_address do
218
+ active true
219
+ help "Required"
220
+ end
221
+ field :line_items do
222
+ active true
223
+ help ""
224
+ end
225
+ field :order_notes do
226
+ active true
227
+ end
228
+ end
229
+ end
230
+
231
+ config.model Piggybak::OrderNote do
232
+ visible false
233
+ list do
234
+ field :user if defined?(User)
235
+ field :note
236
+ field :created_at
237
+ end
238
+ edit do
239
+ field :details do
240
+ label "Order Note"
241
+ help ""
242
+ visible do
243
+ !bindings[:object].new_record?
244
+ end
245
+ read_only do
246
+ !bindings[:object].new_record?
247
+ end
248
+ end
249
+ field :user_id, :hidden do
250
+ default_value do
251
+ bindings[:view]._current_user.id
252
+ end
253
+ end
254
+ field :note do
255
+ visible do
256
+ bindings[:object].new_record?
257
+ end
258
+ end
259
+ end
260
+ end
261
+
262
+ config.model Piggybak::Address do
263
+ label "Address"
264
+ visible false
265
+
266
+ edit do
267
+ field :copy_from_billing do
268
+ visible do
269
+ bindings[:object].respond_to?(:is_shipping) && bindings[:object].is_shipping
270
+ end
271
+ partial "copy_from_billing"
272
+ label "Help"
273
+ help "Copies address from billing to shipping."
274
+ end
275
+ field :firstname
276
+ field :lastname
277
+ field :address1
278
+ field :address2
279
+ field :city
280
+ field :zip
281
+ field :country
282
+ field :state_id, :hidden do
283
+ help ""
284
+ end
285
+ field :location do
286
+ partial "location_select"
287
+ help "Required"
288
+ label "State"
289
+ end
290
+ end
291
+ end
292
+
293
+ config.model Piggybak::Shipment do
294
+ visible false
295
+
296
+ edit do
297
+ field :shipping_method do
298
+ read_only do
299
+ bindings[:object].status == "shipped"
300
+ end
301
+ end
302
+ field :status do
303
+ label "Shipping Status"
304
+ end
305
+ end
306
+ end
307
+
308
+ config.model Piggybak::Adjustment do
309
+ visible false
310
+ end
311
+
312
+ config.model Piggybak::Payment do
313
+ visible false
314
+
315
+ edit do
316
+ field :payment_method do
317
+ read_only do
318
+ !bindings[:object].new_record?
319
+ end
320
+ end
321
+ field :masked_number do
322
+ help "Required"
323
+ label "Number"
324
+ visible do
325
+ !bindings[:object].new_record?
326
+ end
327
+ read_only do
328
+ !bindings[:object].new_record?
329
+ end
330
+ end
331
+ field :number do
332
+ help "Required"
333
+ visible do
334
+ bindings[:object].new_record?
335
+ end
336
+ end
337
+ field :verification_value do
338
+ help "Required"
339
+ visible do
340
+ bindings[:object].new_record?
341
+ end
342
+ end
343
+ field :month do
344
+ label "Exp. Month"
345
+ read_only do
346
+ !bindings[:object].new_record?
347
+ end
348
+ end
349
+ field :year do
350
+ label "Exp. Year"
351
+ read_only do
352
+ !bindings[:object].new_record?
353
+ end
354
+ end
355
+ end
356
+ end
357
+
358
+ config.model Piggybak::PaymentMethod do
359
+ navigation_label "Configuration"
360
+ weight 2
361
+ list do
362
+ field :description
363
+ field :active
364
+ end
365
+ edit do
366
+ field :description do
367
+ help "This is the label the user sees."
368
+ end
369
+ field :klass do
370
+ label "Calculator"
371
+ end
372
+ field :active
373
+ field :payment_method_values do
374
+ label "Metadata"
375
+ end
376
+ end
377
+ end
378
+
379
+ config.model Piggybak::PaymentMethodValue do
380
+ visible false
381
+ edit do
382
+ include_all_fields
383
+ field :payment_method do
384
+ visible false
385
+ end
386
+ end
387
+ end
388
+
389
+ config.model Piggybak::ShippingMethod do
390
+ navigation_label "Configuration"
391
+ edit do
392
+ field :description do
393
+ help "This is the label the user sees."
394
+ end
395
+ field :klass do
396
+ label "Calculator"
397
+ end
398
+ field :active
399
+ field :shipping_method_values do
400
+ label "Metadata"
401
+ end
402
+ end
403
+ list do
404
+ field :description
405
+ field :active
406
+ end
407
+ end
408
+
409
+ config.model Piggybak::ShippingMethodValue do
410
+ visible false
411
+ edit do
412
+ include_all_fields
413
+ field :shipping_method do
414
+ visible false
415
+ end
416
+ end
417
+ end
418
+
419
+ config.model Piggybak::TaxMethod do
420
+ navigation_label "Configuration"
421
+ edit do
422
+ field :description
423
+ field :klass do
424
+ label "Calculator"
425
+ end
426
+ field :active
427
+ field :tax_method_values do
428
+ label "Metadata"
429
+ end
430
+ end
431
+ list do
432
+ field :description
433
+ field :active
434
+ end
435
+ end
436
+
437
+ config.model Piggybak::TaxMethodValue do
438
+ visible false
439
+ edit do
440
+ include_all_fields
441
+ field :tax_method do
442
+ visible false
443
+ end
444
+ end
445
+ end
446
+
447
+ config.model Piggybak::Country do
448
+ label "Countries"
449
+ navigation_label "Geodata"
450
+ weight 3
451
+ list do
452
+ sort_by :name
453
+ field :name
454
+ field :abbr
455
+ end
456
+ edit do
457
+ field :name
458
+ field :abbr
459
+ field :active_shipping
460
+ field :active_billing
461
+ end
462
+ end
463
+
464
+ config.model Piggybak::State do
465
+ navigation_label "Geodata"
466
+ label "States"
467
+ list do
468
+ field :name
469
+ field :abbr
470
+ field :country
471
+ end
472
+ edit do
473
+ field :name
474
+ field :abbr
475
+ field :country
476
+ end
477
+ end
478
+ end
479
+ end
480
+ end
481
+ end