piggybak 0.6.34 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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