liberty_reserve_link 0.0.1 → 0.0.2

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
@@ -1,6 +1,6 @@
1
1
  # LibertyReserveLink
2
2
 
3
- TODO: Write a gem description
3
+ LibertyReserveLink is a library to communicate with [Liberty Reserve](http://libertyreserve.com) API and SCI
4
4
 
5
5
  ## Installation
6
6
 
@@ -18,7 +18,53 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- TODO: Write usage instructions here
21
+ Create a credential object:
22
+
23
+ cred = LibertyReserveLink::Credential.new("account_name", "secret", "api_name")
24
+
25
+ For API create Client object:
26
+
27
+ api = LibertyReserveLink::Client.new(cred)
28
+
29
+ For SCI create Sci object:
30
+
31
+ sci = LibertyReserveLink::Sci.new(cred)
32
+
33
+ ## API
34
+
35
+ To get balance:
36
+
37
+ api.balance
38
+ => {"Euro" => 0.0, "Usd" => 0.0, "GoldGram" => 0.0}
39
+
40
+ api_balance("usd")
41
+ => 0.0
42
+
43
+ To make a trasfer:
44
+
45
+ api.transfer(receiver, amount, currency, memo)
46
+
47
+ ## SCI
48
+
49
+ To generate URL to LibertyReserve payment processing:
50
+
51
+ sci.payment_uri(amount, currency, order_id, item_name, options={})
52
+
53
+ Options can be one of (See [LR SCI Guide](http://www.libertyreserve.com/en/help/sciguide) for more info):
54
+
55
+ * `lr_acc_from` - Buyer's account number.
56
+ * `lr_comments` - Memo, that Merchant may want to include along with payment.
57
+ * `lr_success_url` - URL address of payment successful page at the Merchant's web site.
58
+ * `lr_success_url_method` - Payment successful page redirect HTTP method.
59
+ * `lr_fail_url` - URL address of payment failed page at the Merchant's web site.
60
+ * `lr_fail_url_method` - Payment failed page redirect HTTP method.
61
+ * `lr_status_url` - URL address of payment status page at the Merchant's web site or E-mail address to send a successful payment notification via e-mail.
62
+ * `lr_status_url_method` - payment status form data transmit HTTP method.
63
+
64
+ To validate callback from LibertyReserve in controller:
65
+
66
+ sci.valid?(params)
67
+
22
68
 
23
69
  ## Contributing
24
70
 
@@ -0,0 +1,54 @@
1
+ # coding: utf-8
2
+
3
+ class LibertyReserveLink::Sci
4
+
5
+ ENDPOINT = 'https://sci.libertyreserve.com'
6
+ ALLOWED_OPTIONS = %w{lr_acc_from lr_comments lr_success_url lr_success_url_method lr_fail_url lr_fail_url_method lr_status_url lr_status_url_method}
7
+
8
+ def initialize(credential)
9
+ @credential = credential
10
+ check_credential
11
+ end
12
+
13
+ def check_credential
14
+ raise LibertyReserveLink::Client::InvalidCredentialException unless @credential.valid?
15
+ end
16
+
17
+ def account
18
+ @credential.account
19
+ end
20
+
21
+ def name
22
+ @credential.name
23
+ end
24
+
25
+ def secret
26
+ @credential.secret
27
+ end
28
+
29
+ def escape_options options
30
+ options.reject {|k, v| !(ALLOWED_OPTIONS.include? k.to_s)}
31
+ end
32
+
33
+ def payment_request_uri(amount, currency, order_id, item_name, options={})
34
+ endpoint = URI.parse ENDPOINT
35
+ @query = {lr_acc: account, lr_store: name, lr_amnt: amount,
36
+ lr_currency: currency, lr_merchant_ref: order_id,
37
+ item_name: item_name, order_id: order_id
38
+ }.merge(escape_options(options))
39
+ endpoint.query = @query.to_query
40
+ endpoint.to_s
41
+ end
42
+
43
+ def hash(input)
44
+ Digest::SHA256.new.digest(input).unpack('H*').first.upcase
45
+ end
46
+
47
+ def prepare_string(params)
48
+ "#{account}:#{params[:lr_paidby]}:#{name.gsub(/\\\//, '')}:#{params[:lr_amnt]}:#{params[:lr_transfer]}:#{params[:lr_currency]}:#{secret}"
49
+ end
50
+
51
+ def valid?(params)
52
+ params[:lr_encrypted] == hash(prepare_string(params)) && params[:lr_paidto] == account
53
+ end
54
+ end
@@ -1,3 +1,3 @@
1
1
  module LibertyReserveLink
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -2,6 +2,7 @@ require "liberty_reserve_link/version"
2
2
  require "liberty_reserve_link/client"
3
3
  require "liberty_reserve_link/credential"
4
4
  require "liberty_reserve_link/token"
5
+ require 'liberty_reserve_link/sci'
5
6
 
6
7
  module LibertyReserveLink
7
8
  # Your code goes here...
@@ -0,0 +1,18 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe LibertyReserveLink::Sci do
6
+ let(:credential) { LibertyReserveLink::Credential.new("account", "secret", "name") }
7
+ let(:sci) { LibertyReserveLink::Sci.new(credential) }
8
+ let(:sci_options) { sci.escape_options options }
9
+ let(:options) { {:valenok => "valenok", :test => "test", :lr_success_url => "url"} }
10
+
11
+ it "filter options" do
12
+ expect(sci_options.keys).to eq [:lr_success_url]
13
+ end
14
+
15
+ it "returns hash" do
16
+ expect(sci.hash("test")).to eq "9F86D081884C7D659A2FEAA0C55AD015A3BF4F1B2B0B822CD15D6C15B0F00A08"
17
+ end
18
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: liberty_reserve_link
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
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: 2013-05-21 00:00:00.000000000 Z
12
+ date: 2013-05-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -139,11 +139,13 @@ files:
139
139
  - lib/liberty_reserve_link.rb
140
140
  - lib/liberty_reserve_link/client.rb
141
141
  - lib/liberty_reserve_link/credential.rb
142
+ - lib/liberty_reserve_link/sci.rb
142
143
  - lib/liberty_reserve_link/token.rb
143
144
  - lib/liberty_reserve_link/version.rb
144
145
  - liberty_reserve_link.gemspec
145
146
  - spec/models/client_spec.rb
146
147
  - spec/models/credential_spec.rb
148
+ - spec/models/sci_spec.rb
147
149
  - spec/models/token_spec.rb
148
150
  - spec/spec_helper.rb
149
151
  homepage: ''
@@ -174,5 +176,6 @@ summary: Library for communicating with LibertyReserve API and SCI
174
176
  test_files:
175
177
  - spec/models/client_spec.rb
176
178
  - spec/models/credential_spec.rb
179
+ - spec/models/sci_spec.rb
177
180
  - spec/models/token_spec.rb
178
181
  - spec/spec_helper.rb