alpha_card 0.1.8 → 0.1.9

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 706d4fb925ed92b75aeb824e9ac0cb1353b4cd5e
4
- data.tar.gz: ddd2530759a1516a3008c10635105acdb19d7782
3
+ metadata.gz: 9578c7b0b9b2681146ac0370640b26ed9b6d7cd4
4
+ data.tar.gz: a9ade4a67954c16fc8c3bff0dd8b92838b820358
5
5
  SHA512:
6
- metadata.gz: 35b50540e1457d8f9774307dcb7443d084c24ede72a009dca98430a265bb5a0dea4162b3fe9f7785a66c62dbdb2094c280a6fb164d08afd6d628515c30bca624
7
- data.tar.gz: ee1eb394decc0933f881f4f8e9931ae083cb215b4d1a0d622d15befa0d361cbdbfefb1cdd7d3bdd63e8651317c428c11ed11ec9d733e9bff4e7910f61ecb967a
6
+ metadata.gz: d9e4b44f63a547a82f1c4a4fd405790436fa663bb31aabe3ba22c995cccc5b7333b0c6f25c4bdc2802209e29c03141899d8bd1df5ed9fa95917c769eb6663a42
7
+ data.tar.gz: bff105616d044b9560ed7f53dc2b47702134b2aa4d3fc86f2a7939abadccebea6bcd9569b8210151f4456f817c6ffb7520c796c970fb8ddc301f5ab13cae47c5
data/README.md CHANGED
@@ -212,14 +212,16 @@ You are very welcome to help improve alpha_card if you have suggestions for feat
212
212
 
213
213
  To contribute:
214
214
 
215
- 1. Fork the project
216
- 2. Create your feature branch (`git checkout -b my-new-feature`)
217
- 3. Make your changes
218
- 4. Add tests
219
- 5. Run `rake` to make sure all tests pass
220
- 6. Commit your changes (`git commit -am 'Add new feature'`)
221
- 7. Push to the branch (`git push origin my-new-feature`)
222
- 8. Create new pull request
215
+ 1. Fork the project.
216
+ 2. Create your feature branch (`git checkout -b my-new-feature`).
217
+ 3. Implement your feature or bug fix.
218
+ 4. Add documentation for your feature or bug fix.
219
+ 5. Run <tt>rake doc:yard</tt>. If your changes are not 100% documented, go back to step 4.
220
+ 6. Add tests for your feature or bug fix.
221
+ 7. Run `rake` to make sure all tests pass.
222
+ 8. Commit your changes (`git commit -am 'Add new feature'`).
223
+ 9. Push to the branch (`git push origin my-new-feature`).
224
+ 10. Create new pull request.
223
225
 
224
226
  Thanks.
225
227
 
data/alpha_card.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = 'alpha_card'
3
- gem.version = '0.1.8'
4
- gem.date = '2014-07-01'
3
+ gem.version = '0.1.9'
4
+ gem.date = '2014-07-02'
5
5
  gem.summary = 'Alpha Card Services DirectPost API for Ruby'
6
6
  gem.description = 'Gem for creating sales with Alpha Card Services DirectPost API'
7
7
  gem.authors = ['Nikita Bulaj']
data/lib/alpha_card.rb CHANGED
@@ -25,7 +25,7 @@ module AlphaCard
25
25
  # Global Payment Systems (NDC) Credit Card Authorization Codes
26
26
  #
27
27
  # @see http://floristwiki.ftdi.com/images/c/ce/Appendix_A_-_Credit_Card_Authorization_Codes.pdf Credit Card Authorization Codes
28
- CREDIT_CARD_CODES = YAML.load_file(File.expand_path('../alpha_card/data/codes.yml', __FILE__)) unless defined? CREDIT_CARD_CODES
28
+ CREDIT_CARD_CODES ||= YAML.load_file(File.expand_path('../alpha_card/data/codes.yml', __FILE__))
29
29
 
30
30
  class << self
31
31
  # @return [String] Alpha Card Gateway DirectPost API URL.
@@ -35,7 +35,7 @@ module AlphaCard
35
35
  ##
36
36
  # Send the POST request to the AlphaCard Gateway from the
37
37
  # specified account. Request must contains params - Alpha Card
38
- # transcation variables.
38
+ # transaction variables.
39
39
  #
40
40
  # @param [Hash] params
41
41
  # Alpha Card transaction variables.
@@ -4,6 +4,8 @@ module AlphaCard
4
4
  # Contains all the data, that Alpha Card Gateway
5
5
  # returned for the request.
6
6
  class AlphaCardResponse
7
+ # Alpha Card Gateway response as a <code>Hash</code>.
8
+ # @attr_reader [Hash] data
7
9
  attr_reader :data
8
10
 
9
11
  # Success response code
@@ -13,30 +15,115 @@ module AlphaCard
13
15
  # Error response code
14
16
  ERROR = '3'
15
17
 
16
- def initialize(request_body)
17
- @data = AlphaCard::Utils.parse_query(request_body)
18
+ ##
19
+ # AlphaCardResponse constructor.
20
+ #
21
+ # @param [String] response_body
22
+ # Alpha Card Gateway response body text
23
+ #
24
+ # @return [AlphaCardResponse] AlphaCardResponse object
25
+ #
26
+ # @example
27
+ # AlphaCard::AlphaCardResponse.new('response=1&responsetext=Test')
28
+ #
29
+ # #=> #<AlphaCard::AlphaCardResponse:0x00000003f2b568 @data={"response"=>"1", "responsetext"=>"Test"}>
30
+ def initialize(response_body)
31
+ @data = AlphaCard::Utils.parse_query(response_body)
18
32
  end
19
33
 
34
+ ##
35
+ # The text of the Alpha Card Gateway response.
36
+ #
37
+ # @return [String] text of the response
38
+ #
39
+ # @example
40
+ #
41
+ # r = AlphaCardResponse.new("response=1&responsetext=Test")
42
+ # r.text
43
+ #
44
+ # #=> 'Test'
20
45
  def text
21
46
  @data['responsetext']
22
47
  end
23
48
 
49
+ ##
50
+ # The ID of the transaction. Can be used to process
51
+ # refund operation.
52
+ #
53
+ # @return [String] transaction ID
54
+ #
55
+ # @example
56
+ #
57
+ # r = AlphaCardResponse.new("response=1&transactionid=123")
58
+ # r.transaction_id
59
+ #
60
+ # #=> '123'
24
61
  def transaction_id
25
62
  @data['transactionid']
26
63
  end
27
64
 
65
+ ##
66
+ # The code of the Alpha Card Gateway response.
67
+ #
68
+ # @return [String] code of the response
69
+ #
70
+ # @example
71
+ #
72
+ # r = AlphaCardResponse.new("response=1&response_code=100")
73
+ # r.code
74
+ #
75
+ # #=> '100'
28
76
  def code
29
77
  @data['response_code']
30
78
  end
31
79
 
80
+ ##
81
+ # Indicate the state of the request to the
82
+ # Alpha Card Gateway. Returns <i>true</i> if
83
+ # response was <i>approved</i>.
84
+ #
85
+ # @return [Bool] true if request if successful
86
+ #
87
+ # @example
88
+ #
89
+ # r = AlphaCardResponse.new("response=1")
90
+ # r.success?
91
+ #
92
+ # #=> true
32
93
  def success?
33
94
  @data['response'] == APPROVED
34
95
  end
35
96
 
97
+ ##
98
+ # Indicate the state of the request to the
99
+ # Alpha Card Gateway. Returns <i>true</i> if
100
+ # response was <i>declined</i>.
101
+ #
102
+ # @return [Bool] true if request was declined
103
+ #
104
+ # @example
105
+ #
106
+ # r = AlphaCardResponse.new("response=2")
107
+ # r.declined?
108
+ #
109
+ # #=> true
36
110
  def declined?
37
111
  @data['response'] == DECLINED
38
112
  end
39
113
 
114
+ ##
115
+ # Indicate the state of the request to the
116
+ # Alpha Card Gateway. Returns <i>true</i> if
117
+ # response has some <i>errors</i>.
118
+ #
119
+ # @return [Bool] true if request has some errors
120
+ #
121
+ # @example
122
+ #
123
+ # r = AlphaCardResponse.new("response=3")
124
+ # r.error?
125
+ #
126
+ # #=> true
40
127
  def error?
41
128
  @data['response'] == ERROR
42
129
  end
@@ -11,67 +11,55 @@ module AlphaCard
11
11
  # Default separators for the query string.
12
12
  DEFAULT_SEP = /[&;] */n
13
13
 
14
- # A part of the rack gem.
15
- class KeySpaceConstrainedParams
16
- def initialize(limit = 65536)
17
- @limit = limit
18
- @size = 0
19
- @params = {}
20
- end
21
-
22
- def [](key)
23
- @params[key]
24
- end
25
-
26
- def []=(key, value)
27
- @size += key.size if key && !@params.key?(key)
28
- raise RangeError, 'exceeded available parameter key space' if @size > @limit
29
- @params[key] = value
30
- end
31
-
32
- ##
33
- # Returns <code>true</code> if the given key is present
34
- # in <i>params</i>.
35
- def key?(key)
36
- @params.key?(key)
37
- end
38
-
39
- ##
40
- # Converts params to <code>Hash</code> object.
41
- def to_params_hash
42
- hash = @params
43
- hash.keys.each do |key|
44
- value = hash[key]
45
- if value.kind_of?(self.class)
46
- hash[key] = value.to_params_hash
47
- elsif value.kind_of?(Array)
48
- value.map! { |x| x.kind_of?(self.class) ? x.to_params_hash : x }
49
- end
50
- end
51
- hash
52
- end
53
- end
54
-
55
14
  ##
56
15
  # Unescapes a URI escaped string with +encoding+. +encoding+ will be the
57
16
  # target encoding of the string returned, and it defaults to UTF-8
58
- if defined?(::Encoding)
59
- def unescape(s, encoding = Encoding::UTF_8)
60
- URI.decode_www_form_component(s, encoding)
61
- end
62
- else
63
- def unescape(s, encoding = nil)
64
- URI.decode_www_form_component(s, encoding)
65
- end
17
+ #
18
+ # @param [String] s
19
+ # String to unescape.
20
+ #
21
+ # @param [Encoding] encoding
22
+ # Type of <code>Encoding</code>.
23
+ #
24
+ # @return [String] URI encoded string
25
+ #
26
+ # @raise [ArgumentError] if invalid Encoding is passed
27
+ #
28
+ # @example
29
+ #
30
+ # unescape('Test%20str')
31
+ # #=> "Test str"
32
+ #
33
+ # unescape('Test%20str', Encoding::WINDOWS_31J)
34
+ # #=> "Test str"
35
+ def unescape(s, encoding = Encoding::UTF_8)
36
+ URI.decode_www_form_component(s, encoding)
66
37
  end
67
38
 
68
39
  ##
69
- # Parses a query string to a Hash by breaking it up
40
+ # Parse query string to a <code>Hash</code> by breaking it up
70
41
  # at the '&' and ';' characters.
42
+ #
43
+ # @param [String] qs
44
+ # query string
45
+ # @param [String] d
46
+ # delimiter for the params
47
+ # @yieldparam unescaper
48
+ # method, that will unescape the param value
49
+ #
50
+ # @return [Hash] query
51
+ #
52
+ # @example
53
+ #
54
+ # query = AlphaCard::Utils.parse_query("param1=value1&params2=")
55
+ # #=> {"param1"=>"value1", "params2"=>""}
56
+ #
57
+ # query = AlphaCard::Utils.parse_query("cars[]=Saab&cars[]=Audi")
58
+ # #=> {"cars[]"=>["Saab", "Audi"]}
71
59
  def parse_query(qs, d = nil, &unescaper)
72
60
  unescaper ||= method(:unescape)
73
61
 
74
- params = KeySpaceConstrainedParams.new
62
+ params = {}
75
63
 
76
64
  (qs || '').split(d ? /[#{d}] */n : DEFAULT_SEP).each do |p|
77
65
  next if p.empty?
@@ -88,7 +76,7 @@ module AlphaCard
88
76
  end
89
77
  end
90
78
 
91
- params.to_params_hash
79
+ params
92
80
  end
93
81
  end
94
82
  end
@@ -0,0 +1,18 @@
1
+ require "spec_helper"
2
+
3
+ describe AlphaCard::Account do
4
+ let!(:valid_account) { AlphaCard::Account.new('demo', 'password') }
5
+ let!(:invalid_account) { AlphaCard::Account.new('', '') }
6
+
7
+ context 'with valid credentials' do
8
+ it 'should return true if credentials are filled' do
9
+ expect(valid_account.filled?).to be_truthy
10
+ end
11
+ end
12
+
13
+ context 'with invalid credentials' do
14
+ it 'should return false if credentials are filled' do
15
+ expect(invalid_account.filled?).to be_falsey
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,25 @@
1
+ #encoding: utf-8
2
+ require "spec_helper"
3
+
4
+ describe AlphaCard::Utils do
5
+ it 'parse query strings correctly' do
6
+ expect(AlphaCard::Utils.parse_query("foo=bar")).to eq("foo" => "bar")
7
+ expect(AlphaCard::Utils.parse_query('cars[]=Saab&cars[]=Audi')).to eq({'cars[]' => ['Saab', 'Audi']})
8
+ expect(AlphaCard::Utils.parse_query("foo=bar&foo=quux")).to eq("foo" => ["bar", "quux"])
9
+ expect(AlphaCard::Utils.parse_query("foo=1&bar=2")).to eq("foo" => "1", "bar" => "2")
10
+ expect(AlphaCard::Utils.parse_query("my+weird+field=q1%212%22%27w%245%267%2Fz8%29%3F")).to eq("my weird field" => "q1!2\"'w$5&7/z8)?")
11
+ expect(AlphaCard::Utils.parse_query("foo%3Dbaz=bar")).to eq("foo=baz" => "bar")
12
+ expect(AlphaCard::Utils.parse_query("=")).to eq("" => "")
13
+ expect(AlphaCard::Utils.parse_query("=value")).to eq("" => "value")
14
+ expect(AlphaCard::Utils.parse_query("key=")).to eq("key" => "")
15
+ expect(AlphaCard::Utils.parse_query("&key&")).to eq("key" => nil)
16
+ end
17
+
18
+ it 'unescape the characters correctly' do
19
+ expect(AlphaCard::Utils.unescape('%E9%9F%93', Encoding::UTF_8)).to eq('韓')
20
+ expect(AlphaCard::Utils.unescape("fo%3Co%3Ebar")).to eq("fo<o>bar")
21
+ expect(AlphaCard::Utils.unescape("a+space")).to eq("a space")
22
+ expect(AlphaCard::Utils.unescape("a%20space")).to eq("a space")
23
+ expect(AlphaCard::Utils.unescape("q1%212%22%27w%245%267%2Fz8%29%3F%5C")).to eq("q1!2\"'w$5&7/z8)?\\")
24
+ end
25
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alpha_card
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nikita Bulaj
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-01 00:00:00.000000000 Z
11
+ date: 2014-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -49,8 +49,10 @@ files:
49
49
  - lib/alpha_card/sale.rb
50
50
  - lib/alpha_card/shipping.rb
51
51
  - lib/alpha_card/utils.rb
52
+ - spec/alpha_card/alpha_card_account_spec.rb
52
53
  - spec/alpha_card/alpha_card_response_spec.rb
53
54
  - spec/alpha_card/alpha_card_spec.rb
55
+ - spec/alpha_card/alpha_card_utils_spec.rb
54
56
  - spec/spec_helper.rb
55
57
  homepage: http://github.com/budev/alpha_card
56
58
  licenses: