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