piggybak 0.4.13 → 0.4.14

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