pesapal 1.2.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 417c91efd39cf8a739a0869680ba67e3926f924a
4
- data.tar.gz: 28268660a0ddfc0795269c5865487762f755050e
3
+ metadata.gz: 1b3d98d9279b31f66a9996b6045d19a0ae01c2c7
4
+ data.tar.gz: e132dc33bd5a88e3c2980e4c5eff9f8bfe438e33
5
5
  SHA512:
6
- metadata.gz: 13dbf2a7c26cf350980808df0d384054245331d68b6dab29fc595f4f6d29b86a7eb3e69eeaa79f8353954d4c2e3726ec9f527e1c8c89180b76407fc05a5845d7
7
- data.tar.gz: e0de54ad41503932cbe7fc5b623b64d4cf83f5a8c84534679f28e61d9e197b4af7f8e73679ba34b2c06192d2981496cd17622833fe00d48d99152c5a32f3cb4d
6
+ metadata.gz: 64ff6e09c9b02066fe9b78120cc2f60594eea9fc3d23c5c010b2eb9eccce2ef3d5bd0d4d4de20b360f380a171278a18794e472dec65ff69f572e721a1797d61e
7
+ data.tar.gz: 510c5cadf3d39ed31c86d266c5023c9b79bd087329818401e801a2e3a1075f9bb858f7fd891f89966005b4ca3ce20a44d7571be948069dac60fd4640dc5f0fbb
data/CHANGELOG.md CHANGED
@@ -1,6 +1,13 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ v1.2.1
5
+ ------
6
+
7
+ * Fix severe bug caused by buggy initializer
8
+
9
+ Ps: Run the install generator again, overwrite the initializer only!
10
+
4
11
  v1.2.0
5
12
  ------
6
13
 
data/README.md CHANGED
@@ -16,7 +16,7 @@ other people get to share in the conversation that would have been private and
16
16
  out of their reach.
17
17
 
18
18
  The gem should be [up on RubyGems.org][7], it's [accompanying RubyDoc reference
19
- here][13] and [all the releases here][12].
19
+ here][13], the [CHANGELOG here][21] and [all the releases here][12].
20
20
 
21
21
  If you are [feeling generous and want to contribute, feel free][9].
22
22
 
@@ -68,9 +68,11 @@ pesapal = Pesapal::Merchant.new(:development)
68
68
 
69
69
  ####Option 1####
70
70
 
71
- In the case, the configuration has already been loaded (at application start by
72
- initializer) from a YAML file located at `"#{Rails.root}/config/pesapal.yml"` by
73
- default. This is the recommended method.
71
+ In the above case, the configuration has already been loaded (at application
72
+ start by initializer) from a YAML file located at
73
+ `"#{Rails.root}/config/pesapal.yml"` by default.
74
+
75
+ This is the recommended method.
74
76
 
75
77
  ####Option 2####
76
78
 
@@ -124,6 +126,12 @@ production:
124
126
  consumer_secret: '<YOUR_CONSUMER_SECRET>'
125
127
  ```
126
128
 
129
+ _Ps: Immediately after initializing the Pesapal object, some people might find
130
+ it peculiar that the `pesapal.config` is an empty hash i.e. `{}`. Don't worry.
131
+ If you have set up the `pesapal.yml` correctly, any attempt to run any of the
132
+ methods will eventually populate this hash with the values that were loaded by
133
+ the initializer (see option #1 above, stated as the default)._
134
+
127
135
 
128
136
  ### Posting An Order ###
129
137
 
@@ -133,7 +141,7 @@ you wish to ignore just leave it with a blank string but make sure it's included
133
141
  e.g. the phonenumber.
134
142
 
135
143
  ```ruby
136
- #set order details
144
+ #set order details
137
145
  pesapal.order_details = { :amount => 1000,
138
146
  :description => 'this is the transaction description',
139
147
  :type => 'MERCHANT',
@@ -201,7 +209,7 @@ payment_details = pesapal.query_payment_details("<MERCHANT_REFERENCE>","<TRANSAC
201
209
  The result is a hash that looks something like this ...
202
210
 
203
211
  ```
204
- {
212
+ {
205
213
  :method => "<PAYMENT_METHOD>",
206
214
  :status => "<PAYMENT_STATUS>",
207
215
  :merchant_reference => "<MERCHANT_REFERENCE>",
@@ -226,7 +234,7 @@ updates) and finally, it's upto you to send the `:response` back to pesapal. The
226
234
  hard part is done for you.
227
235
 
228
236
  ```
229
- {
237
+ {
230
238
  :status => "<PAYMENT_STATUS>",
231
239
  :response => "<IPN_RESPONSE>"
232
240
  }
@@ -289,3 +297,4 @@ they want as long as they provide attribution and waive liability.
289
297
  [18]: http://developer.pesapal.com/how-to-integrate/step-by-step
290
298
  [19]: https://github.com/itsmrwave/pesapal-rubygem/graphs/contributors
291
299
  [20]: http://guides.rubyonrails.org/
300
+ [21]: https://github.com/itsmrwave/pesapal-rubygem/blob/master/CHANGELOG.md#changelog
@@ -1,7 +1,2 @@
1
- # Load Pesapal config file when applicatin is loaded ... the config can then be
2
- # accessed from PesapalRails::Application.config.yaml
3
- module PesapalRails
4
- class Application < Rails::Application
5
- config.yaml = YAML::load(IO.read("#{Rails.root}/config/pesapal.yml"))
6
- end
7
- end
1
+ # Load Pesapal config file from YAML file when applicatin is loaded
2
+ Pesapal.config = YAML::load(IO.read("#{Rails.root}/config/pesapal.yml"))
data/lib/pesapal.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require "rails"
2
2
  require "htmlentities"
3
+ require "pesapal/configuration"
3
4
  require "pesapal/merchant"
4
5
  require "pesapal/merchant/details"
5
6
  require "pesapal/merchant/post"
@@ -0,0 +1,15 @@
1
+ module Pesapal
2
+
3
+ # Returns our config hash, or if empty, returns an empty hash
4
+ def config
5
+ @@config ||= {}
6
+ end
7
+
8
+ # Sets our config class variable, which we expect to be a hash
9
+ def config=(hash)
10
+ @@config = hash
11
+ end
12
+
13
+ # Allows us to use instance methods on a Module e.g. Pesapal.config
14
+ module_function :config, :config=
15
+ end
@@ -5,11 +5,11 @@ module Pesapal
5
5
  attr_accessor :config, :order_details
6
6
 
7
7
  def config
8
- @config
8
+ @config ||= {}
9
9
  end
10
10
 
11
11
  def order_details
12
- @order_details
12
+ @order_details ||= {}
13
13
  end
14
14
 
15
15
  private
@@ -50,12 +50,9 @@ module Pesapal
50
50
 
51
51
  set_mode mode
52
52
 
53
- # set the credentials if we have not set a custom path for the YAML config file
54
- if path_to_file.nil?
55
- # no path to file so no YAML override so we load from initializer
56
- set_configuration PesapalRails::Application.config.yaml[@mode]
57
- else
58
- # we have custom path so we load from file
53
+ # set the credentials if we have specified a path from which we
54
+ # will access a YAML file with the configurations
55
+ unless path_to_file.nil?
59
56
  set_configuration_from_yaml path_to_file
60
57
  end
61
58
 
@@ -64,6 +61,11 @@ module Pesapal
64
61
  # generate pesapal order url (often iframed)
65
62
  def generate_order_url
66
63
 
64
+ # check if the config is empty, if yes, we try load what was set by the initializer into Pesapal.config
65
+ if config.empty?
66
+ set_configuration Pesapal.config[@mode]
67
+ end
68
+
67
69
  # build xml with input data, the format is standard so no editing is
68
70
  # required
69
71
  @post_xml = Pesapal::Post::generate_post_xml @order_details
@@ -83,6 +85,11 @@ module Pesapal
83
85
  # query the details of the transaction
84
86
  def query_payment_details(merchant_reference, transaction_tracking_id)
85
87
 
88
+ # check if the config is empty, if yes, we try load what was set by the initializer into Pesapal.config
89
+ if config.empty?
90
+ set_configuration Pesapal.config[@mode]
91
+ end
92
+
86
93
  # initialize setting of @params (oauth_signature left empty)
87
94
  @params = Pesapal::Details::set_parameters(@config[:consumer_key], merchant_reference, transaction_tracking_id)
88
95
 
@@ -105,7 +112,12 @@ module Pesapal
105
112
 
106
113
  # query the status of the transaction
107
114
  def query_payment_status(merchant_reference, transaction_tracking_id = nil)
108
-
115
+
116
+ # check if the config is empty, if yes, we try load what was set by the initializer into Pesapal.config
117
+ if config.empty?
118
+ set_configuration Pesapal.config[@mode]
119
+ end
120
+
109
121
  # initialize setting of @params (oauth_signature left empty)
110
122
  @params = Pesapal::Status::set_parameters(@config[:consumer_key], merchant_reference, transaction_tracking_id)
111
123
 
@@ -125,7 +137,7 @@ module Pesapal
125
137
 
126
138
  # set mode when called
127
139
  def set_mode(mode = :development)
128
-
140
+
129
141
  # convert symbol to string and downcase
130
142
  @mode = "#{mode.to_s.downcase}"
131
143
 
@@ -135,7 +147,7 @@ module Pesapal
135
147
 
136
148
  # listen to ipn response
137
149
  def ipn_listener(notification_type, merchant_reference, transaction_tracking_id)
138
-
150
+
139
151
  status = query_payment_status(merchant_reference, transaction_tracking_id)
140
152
 
141
153
  output = { :status => status }
@@ -1,14 +1,14 @@
1
1
  module Pesapal
2
2
 
3
3
  module Details
4
-
4
+
5
5
  # set parameters required by the QueryPaymentDetails call
6
6
  def Details.set_parameters(consumer_key, merchant_reference, transaction_tracking_id)
7
7
 
8
8
  # parameters required by the QueryPaymentDetails call (excludes
9
9
  # oauth_signature parameter as per the instructions here
10
10
  # http://developer.pesapal.com/how-to-integrate/api-reference#QueryPaymentDetails)
11
-
11
+
12
12
  timestamp = Time.now.to_i.to_s
13
13
 
14
14
  params = { :oauth_consumer_key => consumer_key,
@@ -4,7 +4,7 @@ module Pesapal
4
4
 
5
5
  # build html encoded xml string for PostPesapalDirectOrderV4
6
6
  def Post.generate_post_xml(details)
7
-
7
+
8
8
  # build xml with input data, the format is standard so no editing is
9
9
  # required
10
10
  post_xml = ''
@@ -28,14 +28,14 @@ module Pesapal
28
28
 
29
29
  "#{post_xml}"
30
30
  end
31
-
31
+
32
32
  # set parameters required by the PostPesapalDirectOrderV4 call
33
33
  def Post.set_parameters(callback_url, consumer_key, post_xml)
34
34
 
35
35
  # parameters required by the PostPesapalDirectOrderV4 call (excludes
36
36
  # oauth_signature parameter as per the instructions here
37
37
  # http://developer.pesapal.com/how-to-integrate/api-reference#PostPesapalDirectOrderV4)
38
-
38
+
39
39
  timestamp = Time.now.to_i.to_s
40
40
 
41
41
  params = { :oauth_callback => callback_url,
@@ -1,14 +1,14 @@
1
1
  module Pesapal
2
2
 
3
3
  module Status
4
-
4
+
5
5
  # set parameters required by the QueryPaymentStatus & QueryPaymentStatusByMerchantRef calls
6
6
  def Status.set_parameters(consumer_key, merchant_reference, transaction_tracking_id = nil)
7
7
 
8
8
  # parameters required by the QueryPaymentStatus call (excludes
9
9
  # oauth_signature parameter as per the instructions here
10
10
  # http://developer.pesapal.com/how-to-integrate/api-reference)
11
-
11
+
12
12
  timestamp = Time.now.to_i.to_s
13
13
 
14
14
  params = { :oauth_consumer_key => consumer_key,
data/lib/pesapal/oauth.rb CHANGED
@@ -25,7 +25,7 @@ module Pesapal
25
25
  # parameters are sorted by name, using lexicographical byte value
26
26
  # ordering
27
27
  queries.sort!
28
-
28
+
29
29
  queries.join('&')
30
30
  end
31
31
 
@@ -57,7 +57,7 @@ module Pesapal
57
57
  # for pesapal flow we don't have a token secret to we will set as
58
58
  # nil and the appropriate action will be taken as per the oauth
59
59
  # spec. see notes in the method that creates signing keys
60
-
60
+
61
61
  # prepare the values we need
62
62
  digest = OpenSSL::Digest::Digest.new('sha1')
63
63
  signature_base_string = self.generate_signature_base_string(http_method, absolute_url, params)
@@ -144,7 +144,7 @@ module Pesapal
144
144
  # unless specified, url scheme and authority must be lowercase and
145
145
  # include the port number; http default port 80 and https default
146
146
  # port 443 must be excluded.
147
-
147
+
148
148
  u = URI.parse(absolute_url)
149
149
 
150
150
  scheme = u.scheme.downcase
@@ -1,3 +1,3 @@
1
1
  module Pesapal
2
- VERSION = "1.2.0"
2
+ VERSION = "1.2.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pesapal
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Job King'ori Maina
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-27 00:00:00.000000000 Z
11
+ date: 2013-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -70,6 +70,7 @@ files:
70
70
  - lib/generators/templates/pesapal.rb
71
71
  - lib/generators/templates/pesapal.yml
72
72
  - lib/pesapal.rb
73
+ - lib/pesapal/configuration.rb
73
74
  - lib/pesapal/merchant.rb
74
75
  - lib/pesapal/merchant/details.rb
75
76
  - lib/pesapal/merchant/post.rb