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