pesapal 1.5.2 → 1.5.3

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/.travis.yml CHANGED
@@ -1,4 +1,7 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 2.1.0
4
+ - 2.0.0
3
5
  - 1.9.3
6
+ - 1.9.2
4
7
  script: bundle exec rspec spec
data/CHANGELOG.md CHANGED
@@ -1,6 +1,12 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ v1.5.3
5
+ ------
6
+
7
+ * Fix HTTPS calls throwing Timeout::Error (on production)
8
+ * Simplified environment settings (kill :auto)
9
+
4
10
  v1.5.2
5
11
  ------
6
12
 
data/README.md CHANGED
@@ -21,7 +21,8 @@ out of their reach.
21
21
  The gem should be [up on RubyGems.org][7], it's [accompanying RubyDoc reference
22
22
  here][13], the [CHANGELOG here][21] and [all the releases here][12].
23
23
 
24
- If you are [feeling generous and want to contribute, feel free][9].
24
+ If you are [feeling generous and want to contribute, feel free][9]. See [current
25
+ contributors][19].
25
26
 
26
27
  _Ps: No 3rd party oAuth library dependencies, it handles all the oAuth flows on
27
28
  it's own so your app is one dependency less._
@@ -63,20 +64,14 @@ Initialize Pesapal object and choose the environment, there are two environments
63
64
  with the testing or the live Pesapal API.
64
65
 
65
66
  ```ruby
66
- # defaults to :auto
67
+ # Sets environment intelligently to 'Rails.env' (if Rails) or :development (if non-Rails)
67
68
  pesapal = Pesapal::Merchant.new
68
69
 
69
- # Set to :development
70
+ # Sets environment to :development
70
71
  pesapal = Pesapal::Merchant.new(:development)
71
72
 
72
- # Set to :production
73
+ # Sets environment to :production
73
74
  pesapal = Pesapal::Merchant.new(:production)
74
-
75
- # Set to Rails environment in use
76
- pesapal = Pesapal::Merchant.new(Rails.env)
77
-
78
- # Set to intelligently to 'Rails.env' (if Rails) or :development (if non-Rails)
79
- pesapal = Pesapal::Merchant.new(:auto)
80
75
  ```
81
76
 
82
77
  ####Option 1####
@@ -242,18 +237,19 @@ _Ps: Refer to Pesapal official documentation to make sure you understand what
242
237
  data Pesapal sends to IPN and what result they expect back._
243
238
 
244
239
 
245
- Contributing
246
- ------------
240
+ Contributing & Testing
241
+ ----------------------
247
242
 
248
243
  1. Make sure you've read the [M.O. ★][14] ([blog article here][16])
249
244
  2. Especially [the part about my conventions when writing and merging new features][15]
250
- 2. [Fork it][8]
251
- 2. Create your feature branch (`git checkout -b BRANCH_NAME`)
252
- 3. Commit your changes (`git commit -am 'AWESOME COMMIT MESSAGE'`)
253
- 4. Push to the branch (`git push origin BRANCH_NAME`)
254
- 5. Create new pull request and we can [have the conversations here][17]
255
-
256
- _Ps: See [current contributors][19]._
245
+ 3. [Fork it][8]
246
+ 4. Create your feature branch (`git checkout -b BRANCH_NAME`)
247
+ 5. Make your changes, write tests for them if necessary & run `bundle exec rspec spec`
248
+ 6. Commit your changes (`git commit -am 'AWESOME COMMIT MESSAGE'`)
249
+ 7. Push to the branch (`git push origin BRANCH_NAME`)
250
+ 8. Create new pull request and we can [have the conversations here][17]
251
+
252
+ _Ps: By the time we have a conversation your [pull request tests should pass on Travis-CI][22] or if they aren't at least you know why._
257
253
 
258
254
 
259
255
  References
@@ -41,7 +41,7 @@ module Pesapal
41
41
  public
42
42
 
43
43
  # constructor
44
- def initialize(env = :auto)
44
+ def initialize(env = false)
45
45
  set_env env
46
46
  if defined?(Rails)
47
47
  set_configuration Rails.application.config.pesapal_credentials
@@ -82,9 +82,15 @@ module Pesapal
82
82
  query_string = Pesapal::Oauth::generate_encoded_params_query_string @params
83
83
 
84
84
  # get status response
85
- response = Net::HTTP.get(URI("#{@api_endpoints[:querypaymentdetails]}?#{query_string}"))
86
- response = CGI::parse(response)
87
- response = response["pesapal_response_data"][0].split(',')
85
+ uri = URI.parse "#{@api_endpoints[:querypaymentstatus]}?#{query_string}"
86
+ http = Net::HTTP.new(uri.host, uri.port)
87
+ if @env == 'production'
88
+ http.use_ssl = true
89
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
90
+ end
91
+ response = http.request(Net::HTTP::Get.new(uri.request_uri))
92
+ response = CGI::parse response.body
93
+ response = response['pesapal_response_data'][0].split(',')
88
94
 
89
95
  details = { :method => response[1],
90
96
  :status => response[2],
@@ -105,19 +111,21 @@ module Pesapal
105
111
  query_string = Pesapal::Oauth::generate_encoded_params_query_string @params
106
112
 
107
113
  # get status response
108
- response = Net::HTTP.get(URI("#{@api_endpoints[:querypaymentstatus]}?#{query_string}"))
109
- response = CGI::parse(response)
110
-
111
- # return the string result of what we want
112
- response["pesapal_response_data"][0]
114
+ uri = URI.parse "#{@api_endpoints[:querypaymentstatus]}?#{query_string}"
115
+ http = Net::HTTP.new(uri.host, uri.port)
116
+ if @env == 'production'
117
+ http.use_ssl = true
118
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
119
+ end
120
+ response = http.request(Net::HTTP::Get.new(uri.request_uri))
121
+ response = CGI::parse response.body
122
+ response['pesapal_response_data'][0]
113
123
  end
114
124
 
115
125
  # set env when called
116
- def set_env(env = :auto)
126
+ def set_env(env = false)
117
127
  env = env.to_s.downcase
118
- if env == 'development'
119
- @env = 'development'
120
- elsif env == 'production'
128
+ if env == 'production'
121
129
  @env = 'production'
122
130
  else
123
131
  @env = 'development'
@@ -130,15 +138,11 @@ module Pesapal
130
138
  def ipn_listener(notification_type, merchant_reference, transaction_tracking_id)
131
139
 
132
140
  status = query_payment_status(merchant_reference, transaction_tracking_id)
141
+ output = { :status => status, :response => nil }
133
142
 
134
- output = { :status => status }
135
-
136
- if status == "COMPLETED"
137
- output[:response] = "pesapal_notification_type=CHANGE&pesapal_transaction_tracking_id=#{transaction_tracking_id}&pesapal_merchant_reference=#{merchant_reference}"
138
- elsif status == "FAILED"
139
- output[:response] = "pesapal_notification_type=CHANGE&pesapal_transaction_tracking_id=#{transaction_tracking_id}&pesapal_merchant_reference=#{merchant_reference}"
140
- else
141
- output[:response] = ""
143
+ case status
144
+ when 'COMPLETED' then output[:response] = "pesapal_notification_type=CHANGE&pesapal_transaction_tracking_id=#{transaction_tracking_id}&pesapal_merchant_reference=#{merchant_reference}"
145
+ when 'FAILED' then output[:response] = "pesapal_notification_type=CHANGE&pesapal_transaction_tracking_id=#{transaction_tracking_id}&pesapal_merchant_reference=#{merchant_reference}"
142
146
  end
143
147
 
144
148
  output
@@ -1,3 +1,3 @@
1
1
  module Pesapal
2
- VERSION = '1.5.2'
2
+ VERSION = '1.5.3'
3
3
  end
data/pesapal.gemspec CHANGED
@@ -5,7 +5,7 @@ require 'pesapal/version'
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'pesapal'
7
7
  spec.version = Pesapal::VERSION
8
- spec.date = Time.new.getlocal('+03:00').strftime('%Y-%m-%d')
8
+ spec.date = Time.new.getutc.strftime('%Y-%m-%d')
9
9
  spec.authors = ['Job King\'ori Maina']
10
10
  spec.email = ['j@kingori.co']
11
11
  spec.description = 'Make authenticated Pesapal API calls without the fuss!'
@@ -4,10 +4,27 @@ describe Pesapal::Merchant do
4
4
 
5
5
  before :each do
6
6
  @pesapal = Pesapal::Merchant.new
7
+ @pesapal_dev = Pesapal::Merchant.new(:development)
8
+ @pesapal_prod = Pesapal::Merchant.new(:production)
7
9
  end
8
10
 
9
11
  describe '#new' do
10
12
 
13
+ it 'sets default environment variable' do
14
+ @pesapal.send(:env).should == 'development'
15
+ @pesapal.send(:env).should_not == 'production'
16
+ end
17
+
18
+ it 'sets development environment variable' do
19
+ @pesapal_dev.send(:env).should == 'development'
20
+ @pesapal_dev.send(:env).should_not == 'production'
21
+ end
22
+
23
+ it 'sets production environment variable' do
24
+ @pesapal_prod.send(:env).should == 'production'
25
+ @pesapal_prod.send(:env).should_not == 'development'
26
+ end
27
+
11
28
  # Check if the initializer successfully sets a Pesapal::Merchant object
12
29
  it 'returns a new instance of a pesapal object' do
13
30
  @pesapal.should be_an_instance_of Pesapal::Merchant
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pesapal
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.2
4
+ version: 1.5.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-31 00:00:00.000000000 Z
12
+ date: 2014-02-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler