boutique 0.0.7 → 0.0.8

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
@@ -11,12 +11,19 @@ Installation
11
11
  You'll need some private/public certificates:
12
12
 
13
13
  % openssl genrsa -out private.pem 1024
14
- % openssl req -new -key private.pem -x509 -days 365 -out public.pem
14
+ % openssl req -new -key private.pem -x509 -days 1095 -out public.pem
15
15
 
16
- You can download PayPal's public certificate under `My Account > Encrypted
16
+ Make sure the email you use is the same as your PayPal merchant email, or else
17
+ PayPal will reject it.
18
+
19
+ You can download PayPal's public certificate under `Profile > Encrypted
17
20
  Payment Settings`. Click the download button for PayPal Public Certificate.
18
21
  Rename this certificate to something like `paypal.pem`.
19
22
 
23
+ While you're there, upload the `public.pem` certificate you just generated. Copy
24
+ the `Cert ID`, you'll use it for the `pem_cert_id` field in your config. You
25
+ can block unencrypted requests from `Website Payment Preferences`.
26
+
20
27
  Setup a `config.ru` file and run it like any other Sinatra application. You
21
28
  can configure what products you sell here:
22
29
 
@@ -84,6 +91,11 @@ Development
84
91
  Tests are setup to run individually via `ruby test/*_test.rb` or run them all
85
92
  via `rake`.
86
93
 
94
+ TODO
95
+ ====
96
+
97
+ * BUG: logs are required especially for errors
98
+
87
99
  License
88
100
  =======
89
101
 
data/boutique CHANGED
@@ -42,8 +42,11 @@ module Boutique
42
42
  end
43
43
 
44
44
  def self.migrate
45
- load_config rescue DataObjects::SyntaxError
45
+ load_config
46
+ DataMapper.auto_upgrade!
47
+ rescue DataObjects::SyntaxError => e
46
48
  DataMapper.auto_upgrade!
49
+ load_config
47
50
  end
48
51
 
49
52
  def self.stats(code)
@@ -9,8 +9,10 @@ require 'json'
9
9
  require 'openssl'
10
10
  require 'pony'
11
11
 
12
+ DataMapper::Model.raise_on_save_failure = true
13
+
12
14
  module Boutique
13
- VERSION = '0.0.7'
15
+ VERSION = '0.0.8'
14
16
 
15
17
  class << self
16
18
  def configure(setup_db=true)
@@ -238,7 +240,7 @@ module Boutique
238
240
  :body => "Thanks for purchasing #{self.product.name}! " +
239
241
  "To download it, follow this link:\n\n" +
240
242
  " #{self.product.return_url}?b=#{boutique_id}\n\n" +
241
- "Let us know if you have any troubles.\n"
243
+ "Please reply if you have any troubles.\n"
242
244
  )
243
245
  end
244
246
 
@@ -295,8 +297,8 @@ module Boutique
295
297
  error do
296
298
  Pony.mail(
297
299
  :to => Boutique.config.dev_email,
298
- :from => "boutique@#{Boutique.config.dev_email.split('@')[1..-1]}",
299
- :subject => 'Production Exception',
300
+ :from => "boutique@#{Boutique.config.dev_email.split('@')[1..-1].join}",
301
+ :subject => 'Boutique Error',
300
302
  :body => request.env['sinatra.error'].to_s
301
303
  ) if Boutique.config.dev_email
302
304
  end
@@ -324,6 +326,8 @@ module Boutique
324
326
  if !purchase.completed? &&
325
327
  params['txn_id'] &&
326
328
  params['payment_status'] &&
329
+ params['first_name'] &&
330
+ params['payer_email'] &&
327
331
  params['receiver_email'] == Boutique.config.pp_email
328
332
  purchase.complete(params['txn_id'], params['payer_email'], params['first_name'])
329
333
  purchase.send_mail
@@ -25,7 +25,7 @@ class AppTest < BoutiqueTest
25
25
  refute(purchase.completed?)
26
26
  assert_nil(Pony.last_mail)
27
27
 
28
- post "/notify/#{purchase.boutique_id}?payment_status=Completed&txn_id=1337&receiver_email=#{Boutique.config.pp_email}"
28
+ post "/notify/#{purchase.boutique_id}?payment_status=Completed&txn_id=1337&receiver_email=#{Boutique.config.pp_email}&payer_email=john@mailinator.com&first_name=John"
29
29
  assert(last_response.ok?)
30
30
 
31
31
  purchase.reload
@@ -5,7 +5,7 @@ class ModelTest < BoutiqueTest
5
5
  product = ebook_product
6
6
  product.save
7
7
  count = Boutique::Purchase.count
8
- purchase = Boutique::Purchase.create({})
8
+ purchase = Boutique::Purchase.new
9
9
  product.purchases << purchase
10
10
  product.save
11
11
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: boutique
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-01-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
16
- requirement: &70287039937920 !ruby/object:Gem::Requirement
16
+ requirement: &70164141101480 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70287039937920
24
+ version_requirements: *70164141101480
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: data_mapper
27
- requirement: &70287039937400 !ruby/object:Gem::Requirement
27
+ requirement: &70164141100940 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70287039937400
35
+ version_requirements: *70164141100940
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: pony
38
- requirement: &70287039953220 !ruby/object:Gem::Requirement
38
+ requirement: &70164141100480 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70287039953220
46
+ version_requirements: *70164141100480
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: minitest
49
- requirement: &70287039952700 !ruby/object:Gem::Requirement
49
+ requirement: &70164141099920 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70287039952700
57
+ version_requirements: *70164141099920
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: shotgun
60
- requirement: &70287039952160 !ruby/object:Gem::Requirement
60
+ requirement: &70164141099440 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70287039952160
68
+ version_requirements: *70164141099440
69
69
  description: A Sinatra module which accepts payments via PayPal and gives customers
70
70
  a secret URL to download your product.
71
71
  email: