piggybak 0.4.13 → 0.4.14

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.
data/README.md CHANGED
@@ -41,6 +41,11 @@ Visit the project website [here][project-website] to see more documentation and
41
41
 
42
42
  [project-website]: http://www.piggybak.org/
43
43
 
44
+ TODO
45
+ ========
46
+
47
+ On order notes functionality, changes in addresses are not recorded. This functionality is broken and needs attention.
48
+
44
49
  Copyright
45
50
  ========
46
51
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.13
1
+ 0.4.14
@@ -5,27 +5,49 @@ module Piggybak
5
5
  @cart = Piggybak::Cart.new(request.cookies["cart"])
6
6
 
7
7
  if request.post?
8
+ logger = Logger.new("#{Rails.root}/#{Piggybak.config.logging_file}")
9
+
8
10
  begin
9
11
  ActiveRecord::Base.transaction do
10
12
  @order = Piggybak::Order.new(params[:piggybak_order])
13
+
14
+ if Piggybak.config.logging
15
+ clean_params = params[:piggybak_order].clone
16
+ clean_params["payments_attributes"]["0"]["number"] = clean_params["payments_attributes"]["0"]["number"].mask_cc_number
17
+ clean_params["payments_attributes"]["0"]["verification_value"] = clean_params["payments_attributes"]["0"]["verification_value"].mask_csv
18
+ logger.info "#{request.remote_ip}:#{Time.now.strftime("%Y-%m-%d %H:%M")} Order received with params #{clean_params.inspect}"
19
+ end
11
20
  @order.initialize_user(current_user, true)
12
21
 
13
22
  @order.ip_address = request.remote_ip
14
23
  @order.user_agent = request.user_agent
15
24
  @order.add_line_items(@cart)
16
25
 
26
+ if Piggybak.config.logging
27
+ logger.info "#{request.remote_ip}:#{Time.now.strftime("%Y-%m-%d %H:%M")} Order contains: #{cookies["cart"]} for user #{current_user ? current_user.email : 'guest'}"
28
+ end
29
+
17
30
  if @order.save
18
31
  Piggybak::Notifier.order_notification(@order).deliver
19
32
 
33
+ if Piggybak.config.logging
34
+ logger.info "#{request.remote_ip}:#{Time.now.strftime("%Y-%m-%d %H:%M")} Order saved: #{@order.inspect}"
35
+ end
36
+
20
37
  cookies["cart"] = { :value => '', :path => '/' }
21
38
  session[:last_order] = @order.id
22
39
  redirect_to piggybak.receipt_url
23
40
  else
41
+ if Piggybak.config.logging
42
+ logger.warn "#{request.remote_ip}:#{Time.now.strftime("%Y-%m-%d %H:%M")} Order failed to save #{@order.errors.full_messages} with #{@order.inspect}."
43
+ end
24
44
  raise Exception, @order.errors.full_messages
25
45
  end
26
46
  end
27
47
  rescue Exception => e
28
- Rails.logger.warn "Generic Order Exception: #{e.inspect}"
48
+ if Piggybak.config.logging
49
+ logger.warn "#{request.remote_ip}:#{Time.now.strftime("%Y-%m-%d %H:%M")} Order exception: #{e.inspect}"
50
+ end
29
51
  if @order.errors.empty?
30
52
  @order.errors[:base] << "Your order could not go through. Please try again."
31
53
  end
@@ -45,7 +45,7 @@ module Piggybak
45
45
  if gateway_response.success?
46
46
  self.attributes = { :total => self.order.total_due,
47
47
  :transaction_id => payment_gateway.transaction_id(gateway_response),
48
- :masked_number => mask_number(self.number) }
48
+ :masked_number => self.number.mask_cc_number }
49
49
  gateway.capture(self.order.total_due*100, gateway_response.authorization, { :credit_card => p_credit_card } )
50
50
  return true
51
51
  else
@@ -57,15 +57,6 @@ module Piggybak
57
57
  end
58
58
  end
59
59
 
60
- def mask_number(number)
61
- masked_number = ''
62
- if number.gsub(/\D+/i, '').match(/^(\d\d)(.+)(\d\d\d\d)$/)
63
- masked_number = $1 + $2.length.times.inject('') { |s, i| "#{s}*" } + $3
64
- end
65
-
66
- masked_number
67
- end
68
-
69
60
  # TODO: Add refund support at some point
70
61
  # Note: It is not added now, because for methods that do not store
71
62
  # user profiles, a credit card number must be passed
@@ -0,0 +1,15 @@
1
+ class String
2
+ def mask_cc_number
3
+ masked = ''
4
+
5
+ if self.gsub(/\D+/i, '').match(/^(\d\d)(.+)(\d\d\d\d)$/)
6
+ masked = $1 + $2.length.times.inject('') { |s, i| "#{s}*" } + $3
7
+ end
8
+
9
+ masked
10
+ end
11
+
12
+ def mask_csv
13
+ self.length.times.inject('') { |s, i| "#{s}*" }
14
+ end
15
+ end
data/lib/piggybak.rb CHANGED
@@ -5,6 +5,7 @@ require 'acts_as_changer'
5
5
  require 'active_merchant'
6
6
  require 'formatted_changes'
7
7
  require 'currency'
8
+ require 'mask_submissions'
8
9
 
9
10
  module Piggybak
10
11
  def self.config(entity = nil, &block)
@@ -8,6 +8,8 @@ module Piggybak
8
8
  attr_accessor :activemerchant_mode
9
9
  attr_accessor :email_sender
10
10
  attr_accessor :order_cc
11
+ attr_accessor :logging
12
+ attr_accessor :logging_file
11
13
 
12
14
  def reset
13
15
  @email_sender = "support@piggybak.org"
@@ -23,6 +25,9 @@ module Piggybak
23
25
  @default_country = "US"
24
26
 
25
27
  @activemerchant_mode = :production
28
+
29
+ @logging = false
30
+ @logging_file = "/log/orders.log"
26
31
  end
27
32
  end
28
33
 
data/piggybak.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "piggybak"
8
- s.version = "0.4.13"
8
+ s.version = "0.4.14"
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"]
@@ -100,6 +100,7 @@ Gem::Specification.new do |s|
100
100
  "lib/acts_as_variant.rb",
101
101
  "lib/currency.rb",
102
102
  "lib/formatted_changes.rb",
103
+ "lib/mask_submissions.rb",
103
104
  "lib/piggybak.rb",
104
105
  "lib/piggybak/config.rb",
105
106
  "piggybak.gemspec",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: piggybak
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.13
4
+ version: 0.4.14
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -14,7 +14,7 @@ date: 2012-07-17 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: countries
17
- requirement: &16531060 !ruby/object:Gem::Requirement
17
+ requirement: &12946340 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *16531060
25
+ version_requirements: *12946340
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: bundler
28
- requirement: &16530480 !ruby/object:Gem::Requirement
28
+ requirement: &12945540 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 1.0.0
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *16530480
36
+ version_requirements: *12945540
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: jeweler
39
- requirement: &16529740 !ruby/object:Gem::Requirement
39
+ requirement: &12944360 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 1.6.4
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *16529740
47
+ version_requirements: *12944360
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: rspec
50
- requirement: &16528980 !ruby/object:Gem::Requirement
50
+ requirement: &12943760 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *16528980
58
+ version_requirements: *12943760
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: rspec-rails
61
- requirement: &16528280 !ruby/object:Gem::Requirement
61
+ requirement: &12943200 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ~>
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: 2.7.0
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *16528280
69
+ version_requirements: *12943200
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: factory_girl
72
- requirement: &16527660 !ruby/object:Gem::Requirement
72
+ requirement: &12942560 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: '0'
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *16527660
80
+ version_requirements: *12942560
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: diff-lcs
83
- requirement: &16545180 !ruby/object:Gem::Requirement
83
+ requirement: &12941900 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: '0'
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *16545180
91
+ version_requirements: *12941900
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: shoulda
94
- requirement: &16544000 !ruby/object:Gem::Requirement
94
+ requirement: &12960020 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: '0'
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *16544000
102
+ version_requirements: *12960020
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: simplecov
105
- requirement: &16543300 !ruby/object:Gem::Requirement
105
+ requirement: &12959260 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ! '>='
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: '0'
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *16543300
113
+ version_requirements: *12959260
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: tzinfo
116
- requirement: &16542580 !ruby/object:Gem::Requirement
116
+ requirement: &12957420 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ! '>='
@@ -121,10 +121,10 @@ dependencies:
121
121
  version: '0'
122
122
  type: :development
123
123
  prerelease: false
124
- version_requirements: *16542580
124
+ version_requirements: *12957420
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: devise
127
- requirement: &16541980 !ruby/object:Gem::Requirement
127
+ requirement: &12955260 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
130
130
  - - ! '>='
@@ -132,10 +132,10 @@ dependencies:
132
132
  version: '0'
133
133
  type: :development
134
134
  prerelease: false
135
- version_requirements: *16541980
135
+ version_requirements: *12955260
136
136
  - !ruby/object:Gem::Dependency
137
137
  name: rails_admin
138
- requirement: &16541260 !ruby/object:Gem::Requirement
138
+ requirement: &12954240 !ruby/object:Gem::Requirement
139
139
  none: false
140
140
  requirements:
141
141
  - - ! '>='
@@ -143,10 +143,10 @@ dependencies:
143
143
  version: '0'
144
144
  type: :runtime
145
145
  prerelease: false
146
- version_requirements: *16541260
146
+ version_requirements: *12954240
147
147
  - !ruby/object:Gem::Dependency
148
148
  name: devise
149
- requirement: &16540440 !ruby/object:Gem::Requirement
149
+ requirement: &12953420 !ruby/object:Gem::Requirement
150
150
  none: false
151
151
  requirements:
152
152
  - - ! '>='
@@ -154,10 +154,10 @@ dependencies:
154
154
  version: '0'
155
155
  type: :runtime
156
156
  prerelease: false
157
- version_requirements: *16540440
157
+ version_requirements: *12953420
158
158
  - !ruby/object:Gem::Dependency
159
159
  name: activemerchant
160
- requirement: &16539760 !ruby/object:Gem::Requirement
160
+ requirement: &12952840 !ruby/object:Gem::Requirement
161
161
  none: false
162
162
  requirements:
163
163
  - - ! '>='
@@ -165,10 +165,10 @@ dependencies:
165
165
  version: '0'
166
166
  type: :runtime
167
167
  prerelease: false
168
- version_requirements: *16539760
168
+ version_requirements: *12952840
169
169
  - !ruby/object:Gem::Dependency
170
170
  name: countries
171
- requirement: &16539180 !ruby/object:Gem::Requirement
171
+ requirement: &12952240 !ruby/object:Gem::Requirement
172
172
  none: false
173
173
  requirements:
174
174
  - - ! '>='
@@ -176,10 +176,10 @@ dependencies:
176
176
  version: '0'
177
177
  type: :runtime
178
178
  prerelease: false
179
- version_requirements: *16539180
179
+ version_requirements: *12952240
180
180
  - !ruby/object:Gem::Dependency
181
181
  name: rspec
182
- requirement: &16538640 !ruby/object:Gem::Requirement
182
+ requirement: &12971080 !ruby/object:Gem::Requirement
183
183
  none: false
184
184
  requirements:
185
185
  - - ! '>='
@@ -187,10 +187,10 @@ dependencies:
187
187
  version: '0'
188
188
  type: :development
189
189
  prerelease: false
190
- version_requirements: *16538640
190
+ version_requirements: *12971080
191
191
  - !ruby/object:Gem::Dependency
192
192
  name: rspec-rails
193
- requirement: &16538040 !ruby/object:Gem::Requirement
193
+ requirement: &12969860 !ruby/object:Gem::Requirement
194
194
  none: false
195
195
  requirements:
196
196
  - - ! '>='
@@ -198,10 +198,10 @@ dependencies:
198
198
  version: '0'
199
199
  type: :development
200
200
  prerelease: false
201
- version_requirements: *16538040
201
+ version_requirements: *12969860
202
202
  - !ruby/object:Gem::Dependency
203
203
  name: diff-lcs
204
- requirement: &16537540 !ruby/object:Gem::Requirement
204
+ requirement: &12969120 !ruby/object:Gem::Requirement
205
205
  none: false
206
206
  requirements:
207
207
  - - ! '>='
@@ -209,10 +209,10 @@ dependencies:
209
209
  version: '0'
210
210
  type: :development
211
211
  prerelease: false
212
- version_requirements: *16537540
212
+ version_requirements: *12969120
213
213
  - !ruby/object:Gem::Dependency
214
214
  name: factory_girl
215
- requirement: &16557200 !ruby/object:Gem::Requirement
215
+ requirement: &12967720 !ruby/object:Gem::Requirement
216
216
  none: false
217
217
  requirements:
218
218
  - - ! '>='
@@ -220,10 +220,10 @@ dependencies:
220
220
  version: '0'
221
221
  type: :development
222
222
  prerelease: false
223
- version_requirements: *16557200
223
+ version_requirements: *12967720
224
224
  - !ruby/object:Gem::Dependency
225
225
  name: shoulda
226
- requirement: &16556620 !ruby/object:Gem::Requirement
226
+ requirement: &12965640 !ruby/object:Gem::Requirement
227
227
  none: false
228
228
  requirements:
229
229
  - - ! '>='
@@ -231,7 +231,7 @@ dependencies:
231
231
  version: '0'
232
232
  type: :development
233
233
  prerelease: false
234
- version_requirements: *16556620
234
+ version_requirements: *12965640
235
235
  description: Mountable ecommerce
236
236
  email: steph@endpoint.com
237
237
  executables: []
@@ -323,6 +323,7 @@ files:
323
323
  - lib/acts_as_variant.rb
324
324
  - lib/currency.rb
325
325
  - lib/formatted_changes.rb
326
+ - lib/mask_submissions.rb
326
327
  - lib/piggybak.rb
327
328
  - lib/piggybak/config.rb
328
329
  - piggybak.gemspec
@@ -397,7 +398,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
397
398
  version: '0'
398
399
  segments:
399
400
  - 0
400
- hash: -1995502199532514212
401
+ hash: -3955004474758538586
401
402
  required_rubygems_version: !ruby/object:Gem::Requirement
402
403
  none: false
403
404
  requirements: