piggybak 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +7 -9
- data/VERSION +1 -1
- data/app/helpers/piggybak_helper.rb +1 -1
- data/app/models/piggybak/payment_calculator/authorize_net.rb +1 -1
- data/app/models/piggybak/payment_calculator/fake.rb +1 -1
- data/app/models/piggybak/payment_method.rb +6 -9
- data/app/models/piggybak/shipping_calculator/flat_rate.rb +1 -1
- data/app/models/piggybak/shipping_calculator/free.rb +1 -1
- data/app/models/piggybak/shipping_calculator/range.rb +1 -1
- data/app/models/piggybak/shipping_method.rb +6 -9
- data/app/models/piggybak/tax_calculator/percent.rb +1 -1
- data/app/models/piggybak/tax_method.rb +6 -9
- data/app/views/piggybak/orders/_address_form.html.erb +5 -1
- data/lib/piggybak.rb +14 -0
- data/lib/piggybak/config.rb +20 -0
- data/piggybak.gemspec +3 -6
- metadata +4 -7
- data/app/models/piggybak/payment_calculator.rb +0 -7
- data/app/models/piggybak/shipping_calculator.rb +0 -12
- data/app/models/piggybak/shipping_calculator/pickup.rb +0 -23
- data/app/models/piggybak/tax_calculator.rb +0 -7
data/README.md
CHANGED
@@ -99,17 +99,15 @@ Recipes
|
|
99
99
|
end
|
100
100
|
|
101
101
|
|
102
|
-
|
102
|
+
TODOs
|
103
103
|
========
|
104
104
|
|
105
|
-
*
|
106
|
-
*
|
107
|
-
*
|
108
|
-
|
109
|
-
*
|
110
|
-
* Test
|
111
|
-
* Test a different user model
|
112
|
-
* Add unit testing
|
105
|
+
* Bug: Handle state options in admin: selected state or free text
|
106
|
+
* Feature: Figure out how to make entire payments section read only, except for ability to refund
|
107
|
+
* Feature: Add refunds: Add actionable link under payments, include on payments page only
|
108
|
+
* Feature: Create rake task for copying over views, and make sure app views will override gems
|
109
|
+
* Test: Test email send functionality
|
110
|
+
* Test: Add unit testing
|
113
111
|
|
114
112
|
Copyright
|
115
113
|
========
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.1
|
@@ -5,7 +5,7 @@ module PiggybakHelper
|
|
5
5
|
def cart_link
|
6
6
|
cart = Piggybak::Cart.new(request.cookies["cart"])
|
7
7
|
nitems = cart.items.inject(0) { |nitems, item| nitems + item[:quantity] }
|
8
|
-
if nitems > 0
|
8
|
+
if nitems > 0 && !["piggybak/orders", "piggybak/cart"].include?(params[:controller])
|
9
9
|
link_to "#{pluralize(nitems, 'item')}: #{number_to_currency(cart.total)}", piggybak.cart_url
|
10
10
|
end
|
11
11
|
end
|
@@ -1,12 +1,5 @@
|
|
1
1
|
module Piggybak
|
2
2
|
class PaymentMethod < ActiveRecord::Base
|
3
|
-
|
4
|
-
# klass_enum requires the ShippingCalculator subclasses to be loaded
|
5
|
-
shipping_calcs_path = File.expand_path("../payment_calculator", __FILE__)
|
6
|
-
Dir.glob(shipping_calcs_path + "**/*.rb").each do |subclass|
|
7
|
-
ActiveSupport::Dependencies.require_or_load subclass
|
8
|
-
end
|
9
|
-
|
10
3
|
has_many :payment_method_values, :dependent => :destroy
|
11
4
|
alias :metadata :payment_method_values
|
12
5
|
|
@@ -16,7 +9,7 @@ module Piggybak
|
|
16
9
|
validates_presence_of :description
|
17
10
|
|
18
11
|
def klass_enum
|
19
|
-
|
12
|
+
Piggybak.config.payment_calculators
|
20
13
|
end
|
21
14
|
|
22
15
|
validates_each :payment_method_values do |record, attr, value|
|
@@ -24,7 +17,11 @@ module Piggybak
|
|
24
17
|
payment_method = record.klass.constantize
|
25
18
|
metadata_keys = value.collect { |v| v.key }.sort
|
26
19
|
if payment_method::KEYS.sort != metadata_keys
|
27
|
-
|
20
|
+
if payment_method::KEYS.empty?
|
21
|
+
record.errors.add attr, "You don't need any metadata for this method."
|
22
|
+
else
|
23
|
+
record.errors.add attr, "You must define key values for #{payment_method::KEYS.join(', ')} for this payment method."
|
24
|
+
end
|
28
25
|
end
|
29
26
|
end
|
30
27
|
end
|
@@ -1,12 +1,5 @@
|
|
1
1
|
module Piggybak
|
2
2
|
class ShippingMethod < ActiveRecord::Base
|
3
|
-
|
4
|
-
# klass_enum requires the ShippingCalculator subclasses to be loaded
|
5
|
-
shipping_calcs_path = File.expand_path("../shipping_calculator", __FILE__)
|
6
|
-
Dir.glob(shipping_calcs_path + "**/*.rb").each do |subclass|
|
7
|
-
ActiveSupport::Dependencies.require_or_load subclass
|
8
|
-
end
|
9
|
-
|
10
3
|
has_many :shipping_method_values, :dependent => :destroy
|
11
4
|
alias :metadata :shipping_method_values
|
12
5
|
|
@@ -20,13 +13,17 @@ module Piggybak
|
|
20
13
|
calculator = record.klass.constantize
|
21
14
|
metadata_keys = value.collect { |v| v.key }.sort
|
22
15
|
if calculator::KEYS.sort != metadata_keys
|
23
|
-
|
16
|
+
if calculator::KEYS.empty?
|
17
|
+
record.errors.add attr, "You don't need any metadata for this method."
|
18
|
+
else
|
19
|
+
record.errors.add attr, "You must define key values for #{calculator::KEYS.join(', ')} for this shipping method."
|
20
|
+
end
|
24
21
|
end
|
25
22
|
end
|
26
23
|
end
|
27
24
|
|
28
25
|
def klass_enum
|
29
|
-
Piggybak
|
26
|
+
Piggybak.config.shipping_calculators
|
30
27
|
end
|
31
28
|
|
32
29
|
def self.available_methods(cart)
|
@@ -1,12 +1,5 @@
|
|
1
1
|
module Piggybak
|
2
2
|
class TaxMethod < ActiveRecord::Base
|
3
|
-
|
4
|
-
# klass_enum requires the ShippingCalculator subclasses to be loaded
|
5
|
-
shipping_calcs_path = File.expand_path("../tax_calculator", __FILE__)
|
6
|
-
Dir.glob(shipping_calcs_path + "**/*.rb").each do |subclass|
|
7
|
-
ActiveSupport::Dependencies.require_or_load subclass
|
8
|
-
end
|
9
|
-
|
10
3
|
has_many :tax_method_values, :dependent => :destroy
|
11
4
|
alias :metadata :tax_method_values
|
12
5
|
|
@@ -20,13 +13,17 @@ module Piggybak
|
|
20
13
|
calculator = record.klass.constantize
|
21
14
|
metadata_keys = value.collect { |v| v.key }.sort
|
22
15
|
if calculator::KEYS.sort != metadata_keys
|
23
|
-
|
16
|
+
if calculator::KEYS.empty?
|
17
|
+
record.errors.add attr, "You don't need any metadata for this method."
|
18
|
+
else
|
19
|
+
record.errors.add attr, "You must define key values for #{calculator::KEYS.join(', ')} for this tax method."
|
20
|
+
end
|
24
21
|
end
|
25
22
|
end
|
26
23
|
end
|
27
24
|
|
28
25
|
def klass_enum
|
29
|
-
Piggybak
|
26
|
+
Piggybak.config.tax_calculators
|
30
27
|
end
|
31
28
|
|
32
29
|
def self.calculate_tax(object)
|
@@ -7,9 +7,13 @@
|
|
7
7
|
<%= address.text_field :lastname %>
|
8
8
|
</div>
|
9
9
|
<div class="item">
|
10
|
-
<%= address.label :address1 %>
|
10
|
+
<%= address.label :address1, "Address" %>
|
11
11
|
<%= address.text_field :address1 %>
|
12
12
|
</div>
|
13
|
+
<div class="item">
|
14
|
+
<%= address.label :address2, "Address cont." %>
|
15
|
+
<%= address.text_field :address2 %>
|
16
|
+
</div>
|
13
17
|
<div class="item">
|
14
18
|
<%= address.label :city %>
|
15
19
|
<%= address.text_field :city %>
|
data/lib/piggybak.rb
CHANGED
@@ -1,9 +1,23 @@
|
|
1
|
+
require 'piggybak/config'
|
1
2
|
require 'acts_as_variant/base'
|
2
3
|
require 'acts_as_orderer/base'
|
3
4
|
require 'active_merchant'
|
4
5
|
require 'currency'
|
5
6
|
|
6
7
|
module Piggybak
|
8
|
+
def self.config(entity = nil, &block)
|
9
|
+
if entity
|
10
|
+
Piggybak::Config.model(entity, &block)
|
11
|
+
elsif block_given? && ENV['SKIP_RAILS_ADMIN_INITIALIZER'] != "true"
|
12
|
+
block.call(Piggybak::Config)
|
13
|
+
else
|
14
|
+
Piggybak::Config
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.reset
|
19
|
+
Piggybak::Config.reset
|
20
|
+
end
|
7
21
|
|
8
22
|
class Engine < Rails::Engine
|
9
23
|
initializer "piggybak.add_helper" do |app|
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Piggybak
|
2
|
+
module Config
|
3
|
+
class << self
|
4
|
+
attr_accessor :payment_calculators
|
5
|
+
attr_accessor :shipping_calculators
|
6
|
+
attr_accessor :tax_calculators
|
7
|
+
|
8
|
+
def reset
|
9
|
+
@payment_calculators = ["::Piggybak::PaymentCalculator::Fake",
|
10
|
+
"::Piggybak::PaymentCalculator::AuthorizeNet"]
|
11
|
+
@shipping_calculators = ["::Piggybak::ShippingCalculator::FlatRate",
|
12
|
+
"::Piggybak::ShippingCalculator::Free",
|
13
|
+
"::Piggybak::ShippingCalculator::Range"]
|
14
|
+
@tax_calculators = ["::Piggybak::TaxCalculator::Percent"]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
self.reset
|
19
|
+
end
|
20
|
+
end
|
data/piggybak.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "piggybak"
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Steph Skardal", "Brian Buchalter"]
|
12
|
-
s.date = "2012-01-
|
12
|
+
s.date = "2012-01-07"
|
13
13
|
s.description = "Mountable ecommerce"
|
14
14
|
s.email = "steph@endpoint.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -34,21 +34,17 @@ Gem::Specification.new do |s|
|
|
34
34
|
"app/models/piggybak/line_item.rb",
|
35
35
|
"app/models/piggybak/order.rb",
|
36
36
|
"app/models/piggybak/payment.rb",
|
37
|
-
"app/models/piggybak/payment_calculator.rb",
|
38
37
|
"app/models/piggybak/payment_calculator/authorize_net.rb",
|
39
38
|
"app/models/piggybak/payment_calculator/fake.rb",
|
40
39
|
"app/models/piggybak/payment_method.rb",
|
41
40
|
"app/models/piggybak/payment_method_value.rb",
|
42
41
|
"app/models/piggybak/shipment.rb",
|
43
|
-
"app/models/piggybak/shipping_calculator.rb",
|
44
42
|
"app/models/piggybak/shipping_calculator/flat_rate.rb",
|
45
43
|
"app/models/piggybak/shipping_calculator/free.rb",
|
46
|
-
"app/models/piggybak/shipping_calculator/pickup.rb",
|
47
44
|
"app/models/piggybak/shipping_calculator/range.rb",
|
48
45
|
"app/models/piggybak/shipping_method.rb",
|
49
46
|
"app/models/piggybak/shipping_method_value.rb",
|
50
47
|
"app/models/piggybak/state.rb",
|
51
|
-
"app/models/piggybak/tax_calculator.rb",
|
52
48
|
"app/models/piggybak/tax_calculator/percent.rb",
|
53
49
|
"app/models/piggybak/tax_method.rb",
|
54
50
|
"app/models/piggybak/tax_method_value.rb",
|
@@ -86,6 +82,7 @@ Gem::Specification.new do |s|
|
|
86
82
|
"lib/acts_as_variant/base.rb",
|
87
83
|
"lib/currency.rb",
|
88
84
|
"lib/piggybak.rb",
|
85
|
+
"lib/piggybak/config.rb",
|
89
86
|
"piggybak.gemspec"
|
90
87
|
]
|
91
88
|
s.homepage = "http://github.com/stephskardal/piggybak"
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: piggybak
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.2.
|
5
|
+
version: 0.2.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Steph Skardal
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2012-01-
|
14
|
+
date: 2012-01-07 00:00:00 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: countries
|
@@ -128,21 +128,17 @@ files:
|
|
128
128
|
- app/models/piggybak/line_item.rb
|
129
129
|
- app/models/piggybak/order.rb
|
130
130
|
- app/models/piggybak/payment.rb
|
131
|
-
- app/models/piggybak/payment_calculator.rb
|
132
131
|
- app/models/piggybak/payment_calculator/authorize_net.rb
|
133
132
|
- app/models/piggybak/payment_calculator/fake.rb
|
134
133
|
- app/models/piggybak/payment_method.rb
|
135
134
|
- app/models/piggybak/payment_method_value.rb
|
136
135
|
- app/models/piggybak/shipment.rb
|
137
|
-
- app/models/piggybak/shipping_calculator.rb
|
138
136
|
- app/models/piggybak/shipping_calculator/flat_rate.rb
|
139
137
|
- app/models/piggybak/shipping_calculator/free.rb
|
140
|
-
- app/models/piggybak/shipping_calculator/pickup.rb
|
141
138
|
- app/models/piggybak/shipping_calculator/range.rb
|
142
139
|
- app/models/piggybak/shipping_method.rb
|
143
140
|
- app/models/piggybak/shipping_method_value.rb
|
144
141
|
- app/models/piggybak/state.rb
|
145
|
-
- app/models/piggybak/tax_calculator.rb
|
146
142
|
- app/models/piggybak/tax_calculator/percent.rb
|
147
143
|
- app/models/piggybak/tax_method.rb
|
148
144
|
- app/models/piggybak/tax_method_value.rb
|
@@ -180,6 +176,7 @@ files:
|
|
180
176
|
- lib/acts_as_variant/base.rb
|
181
177
|
- lib/currency.rb
|
182
178
|
- lib/piggybak.rb
|
179
|
+
- lib/piggybak/config.rb
|
183
180
|
- piggybak.gemspec
|
184
181
|
homepage: http://github.com/stephskardal/piggybak
|
185
182
|
licenses:
|
@@ -194,7 +191,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
194
191
|
requirements:
|
195
192
|
- - ">="
|
196
193
|
- !ruby/object:Gem::Version
|
197
|
-
hash:
|
194
|
+
hash: 2778086706911643141
|
198
195
|
segments:
|
199
196
|
- 0
|
200
197
|
version: "0"
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module Piggybak
|
2
|
-
class ShippingCalculator::Pickup < ShippingCalculator
|
3
|
-
KEYS = ["state_abbr", "rate"]
|
4
|
-
|
5
|
-
def self.available?(method, object)
|
6
|
-
abbr = method.metadata.detect { |t| t.key == "state_abbr" }.value
|
7
|
-
|
8
|
-
if object.is_a?(Cart)
|
9
|
-
state = State.find(object.extra_data["state_id"])
|
10
|
-
return true if state && state.abbr == abbr
|
11
|
-
else
|
12
|
-
if object.billing_address && object.billing_address.state
|
13
|
-
return object.billing_address.state.abbr == abbr
|
14
|
-
end
|
15
|
-
end
|
16
|
-
return false
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.rate(method, object)
|
20
|
-
method.metadata.detect { |m| m.key == "rate" }.value.to_f.to_c
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|