omise 0.1.0
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 +7 -0
- data/.gitignore +14 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +56 -0
- data/Rakefile +8 -0
- data/data/ca_certificates.pem +105 -0
- data/lib/omise.rb +6 -0
- data/lib/omise/account.rb +8 -0
- data/lib/omise/all.rb +9 -0
- data/lib/omise/attributes.rb +63 -0
- data/lib/omise/balance.rb +8 -0
- data/lib/omise/card.rb +19 -0
- data/lib/omise/card_list.rb +22 -0
- data/lib/omise/charge.rb +55 -0
- data/lib/omise/config.rb +36 -0
- data/lib/omise/customer.rb +50 -0
- data/lib/omise/error.rb +12 -0
- data/lib/omise/list.rb +37 -0
- data/lib/omise/object.rb +60 -0
- data/lib/omise/refund.rb +32 -0
- data/lib/omise/refund_list.rb +19 -0
- data/lib/omise/resource.rb +43 -0
- data/lib/omise/singleton_resource.rb +21 -0
- data/lib/omise/testing/resource.rb +38 -0
- data/lib/omise/token.rb +26 -0
- data/lib/omise/transaction.rb +16 -0
- data/lib/omise/transfer.rb +32 -0
- data/lib/omise/util.rb +24 -0
- data/lib/omise/vault.rb +15 -0
- data/lib/omise/version.rb +3 -0
- data/omise.gemspec +25 -0
- data/test/fixtures/api.omise.co/account-get.json +6 -0
- data/test/fixtures/api.omise.co/balance-get.json +7 -0
- data/test/fixtures/api.omise.co/charges-get.json +59 -0
- data/test/fixtures/api.omise.co/charges-post.json +36 -0
- data/test/fixtures/api.omise.co/charges/404-get.json +6 -0
- data/test/fixtures/api.omise.co/charges/chrg_test_4yq7duw15p9hdrjp8oq-get.json +58 -0
- data/test/fixtures/api.omise.co/charges/chrg_test_4yq7duw15p9hdrjp8oq-patch.json +58 -0
- data/test/fixtures/api.omise.co/charges/chrg_test_4yq7duw15p9hdrjp8oq/refunds-get.json +21 -0
- data/test/fixtures/api.omise.co/charges/chrg_test_4yq7duw15p9hdrjp8oq/refunds-post.json +10 -0
- data/test/fixtures/api.omise.co/charges/chrg_test_4yq7duw15p9hdrjp8oq/refunds/404-get.json +6 -0
- data/test/fixtures/api.omise.co/charges/chrg_test_4yq7duw15p9hdrjp8oq/refunds/rfnd_test_4yqmv79ahghsiz23y3c-get.json +10 -0
- data/test/fixtures/api.omise.co/customers-get.json +49 -0
- data/test/fixtures/api.omise.co/customers-post.json +22 -0
- data/test/fixtures/api.omise.co/customers/404-get.json +6 -0
- data/test/fixtures/api.omise.co/customers/cust_test_4yq6txdpfadhbaqnwp3-delete.json +6 -0
- data/test/fixtures/api.omise.co/customers/cust_test_4yq6txdpfadhbaqnwp3-get.json +39 -0
- data/test/fixtures/api.omise.co/customers/cust_test_4yq6txdpfadhbaqnwp3-patch.json +39 -0
- data/test/fixtures/api.omise.co/customers/cust_test_4yq6txdpfadhbaqnwp3/cards/404-get.json +6 -0
- data/test/fixtures/api.omise.co/customers/cust_test_4yq6txdpfadhbaqnwp3/cards/card_test_4yq6tuucl9h4erukfl0-delete.json +6 -0
- data/test/fixtures/api.omise.co/customers/cust_test_4yq6txdpfadhbaqnwp3/cards/card_test_4yq6tuucl9h4erukfl0-get.json +18 -0
- data/test/fixtures/api.omise.co/customers/cust_test_4yq6txdpfadhbaqnwp3/cards/card_test_4yq6tuucl9h4erukfl0-patch.json +18 -0
- data/test/fixtures/api.omise.co/transactions-get.json +26 -0
- data/test/fixtures/api.omise.co/transactions/trxn_test_4yq7duwb9jts1vxgqua-get.json +8 -0
- data/test/fixtures/api.omise.co/transactions/trxn_test_4yqafnvlztbf3908vs1-get.json +8 -0
- data/test/fixtures/api.omise.co/transactions/trxn_test_4yqmv79fzpy0gmz5mmq-get.json +8 -0
- data/test/fixtures/api.omise.co/transfers-get.json +24 -0
- data/test/fixtures/api.omise.co/transfers-post.json +14 -0
- data/test/fixtures/api.omise.co/transfers/trsf_test_4yqacz8t3cbipcj766u-get.json +14 -0
- data/test/fixtures/vault.omise.co/tokens-post.json +25 -0
- data/test/fixtures/vault.omise.co/tokens/tokn_test_4yq8lbecl0q6dsjzxr5-get.json +25 -0
- data/test/omise/test_account.rb +19 -0
- data/test/omise/test_balance.rb +19 -0
- data/test/omise/test_card.rb +52 -0
- data/test/omise/test_charge.rb +56 -0
- data/test/omise/test_customer.rb +59 -0
- data/test/omise/test_refund.rb +41 -0
- data/test/omise/test_token.rb +31 -0
- data/test/omise/test_transaction.rb +18 -0
- data/test/omise/test_transfer.rb +24 -0
- data/test/support.rb +12 -0
- data/test/test_omise.rb +7 -0
- metadata +214 -0
@@ -0,0 +1,50 @@
|
|
1
|
+
require "omise/object"
|
2
|
+
require "omise/list"
|
3
|
+
require "omise/card_list"
|
4
|
+
|
5
|
+
module Omise
|
6
|
+
class Customer < OmiseObject
|
7
|
+
self.endpoint = "/customers"
|
8
|
+
|
9
|
+
def self.retrieve(id = nil, attributes = {})
|
10
|
+
new resource(location(id), attributes).get
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.list(attributes = {})
|
14
|
+
List.new resource(location, attributes).get
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.create(attributes = {})
|
18
|
+
new resource(location, attributes).post(attributes)
|
19
|
+
end
|
20
|
+
|
21
|
+
def reload(attributes = {})
|
22
|
+
assign_attributes resource(attributes).get
|
23
|
+
end
|
24
|
+
|
25
|
+
def update(attributes = {})
|
26
|
+
assign_attributes resource(attributes).patch(attributes)
|
27
|
+
end
|
28
|
+
|
29
|
+
def destroy(attributes = {})
|
30
|
+
assign_attributes resource(attributes).delete
|
31
|
+
end
|
32
|
+
|
33
|
+
def default_card(options = {})
|
34
|
+
if @attributes["default_card"]
|
35
|
+
@default_card ||= cards.retrieve(@attributes["default_card"], options)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def cards
|
40
|
+
@cards ||= CardList.new(self, @attributes["cards"])
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def cleanup!
|
46
|
+
@default_card = nil
|
47
|
+
@cards = nil
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/omise/error.rb
ADDED
data/lib/omise/list.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require "omise/util"
|
2
|
+
require "omise/object"
|
3
|
+
|
4
|
+
module Omise
|
5
|
+
class List < OmiseObject
|
6
|
+
include Enumerable
|
7
|
+
|
8
|
+
def initialize(attributes = {})
|
9
|
+
super(attributes)
|
10
|
+
setup_data
|
11
|
+
end
|
12
|
+
|
13
|
+
def reload(attributes = {})
|
14
|
+
assign_attributes resource(attributes).get do
|
15
|
+
setup_data
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def each(*args, &block)
|
20
|
+
to_a.each(*args, &block)
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_a
|
24
|
+
@data
|
25
|
+
end
|
26
|
+
|
27
|
+
def last
|
28
|
+
to_a.last
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def setup_data
|
34
|
+
@data = @attributes["data"].map { |o| Omise::Util.typecast(o) }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/omise/object.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
require "omise/config"
|
2
|
+
require "omise/attributes"
|
3
|
+
require "omise/resource"
|
4
|
+
|
5
|
+
module Omise
|
6
|
+
class OmiseObject
|
7
|
+
include Attributes
|
8
|
+
|
9
|
+
class << self
|
10
|
+
attr_accessor :endpoint
|
11
|
+
|
12
|
+
def location(id = nil)
|
13
|
+
[endpoint, id].compact.join("/")
|
14
|
+
end
|
15
|
+
|
16
|
+
def resource(path, attributes = {})
|
17
|
+
key = attributes.delete(:key) { resource_key }
|
18
|
+
preprocess_attributes!(attributes)
|
19
|
+
Omise.resource.new(resource_url, path, key)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def collection
|
25
|
+
self
|
26
|
+
end
|
27
|
+
|
28
|
+
def singleton!
|
29
|
+
require "omise/singleton_resource"
|
30
|
+
include SingletonResource
|
31
|
+
end
|
32
|
+
|
33
|
+
def preprocess_attributes!(attributes)
|
34
|
+
if attributes[:card].is_a?(Hash)
|
35
|
+
require "omise/token"
|
36
|
+
card_attributes = attributes.delete(:card)
|
37
|
+
attributes[:card] = Token.create(card: card_attributes).id
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def resource_url
|
42
|
+
Omise.api_url
|
43
|
+
end
|
44
|
+
|
45
|
+
def resource_key
|
46
|
+
Omise.api_key
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def collection
|
53
|
+
self.class
|
54
|
+
end
|
55
|
+
|
56
|
+
def resource(*args)
|
57
|
+
collection.resource(location, *args)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/lib/omise/refund.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require "omise/object"
|
2
|
+
require "omise/charge"
|
3
|
+
require "omise/transaction"
|
4
|
+
|
5
|
+
module Omise
|
6
|
+
class Refund < OmiseObject
|
7
|
+
self.endpoint = "/refunds"
|
8
|
+
|
9
|
+
def reload(attributes = {})
|
10
|
+
assign_attributes resource(attributes).get
|
11
|
+
end
|
12
|
+
|
13
|
+
def charge(options = {})
|
14
|
+
if @attributes["charge"]
|
15
|
+
@charge ||= Charge.retrieve(@attributes["charge"], options)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def transaction(options = {})
|
20
|
+
if @attributes["transaction"]
|
21
|
+
@transaction ||= Transaction.retrieve(@attributes["transaction"], options)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def cleanup!
|
28
|
+
@charge = nil
|
29
|
+
@transaction = nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "omise/list"
|
2
|
+
require "omise/refund"
|
3
|
+
|
4
|
+
module Omise
|
5
|
+
class RefundList < List
|
6
|
+
def initialize(charge, attributes = {})
|
7
|
+
super(attributes)
|
8
|
+
@charge = charge
|
9
|
+
end
|
10
|
+
|
11
|
+
def create(attributes = {})
|
12
|
+
Refund.new self.class.resource(location, attributes).post(attributes)
|
13
|
+
end
|
14
|
+
|
15
|
+
def retrieve(id, attributes = {})
|
16
|
+
Refund.new self.class.resource(location(id), attributes).get
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require "uri"
|
2
|
+
require "json"
|
3
|
+
require "openssl"
|
4
|
+
require "rest-client"
|
5
|
+
|
6
|
+
require "omise/util"
|
7
|
+
require "omise/config"
|
8
|
+
require "omise/error"
|
9
|
+
|
10
|
+
module Omise
|
11
|
+
class Resource
|
12
|
+
CA_BUNDLE_PATH = File.expand_path("../../../data/ca_certificates.pem", __FILE__)
|
13
|
+
|
14
|
+
def initialize(url, path, key)
|
15
|
+
@uri = URI.parse(url)
|
16
|
+
@uri.path = [@uri.path, path].join
|
17
|
+
@resource = RestClient::Resource.new(@uri.to_s, {
|
18
|
+
user: key,
|
19
|
+
verify_ssl: OpenSSL::SSL::VERIFY_PEER,
|
20
|
+
ssl_ca_file: CA_BUNDLE_PATH,
|
21
|
+
headers: {
|
22
|
+
user_agent: "OmiseRuby/#{Omise::VERSION} OmiseAPI/#{Omise.api_version} Ruby/#{RUBY_VERSION}"
|
23
|
+
}
|
24
|
+
})
|
25
|
+
end
|
26
|
+
|
27
|
+
def get
|
28
|
+
@resource.get { |r| Omise::Util.load_response(r) }
|
29
|
+
end
|
30
|
+
|
31
|
+
def patch(attributes)
|
32
|
+
@resource.patch(attributes) { |r| Omise::Util.load_response(r) }
|
33
|
+
end
|
34
|
+
|
35
|
+
def post(attributes)
|
36
|
+
@resource.post(attributes) { |r| Omise::Util.load_response(r) }
|
37
|
+
end
|
38
|
+
|
39
|
+
def delete
|
40
|
+
@resource.delete { |r| Omise::Util.load_response(r) }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Omise
|
2
|
+
module SingletonResource
|
3
|
+
def self.included(base)
|
4
|
+
base.extend ClassMethods
|
5
|
+
end
|
6
|
+
|
7
|
+
def reload(attributes = {})
|
8
|
+
assign_attributes resource(attributes).get
|
9
|
+
end
|
10
|
+
|
11
|
+
def location
|
12
|
+
self.class.location
|
13
|
+
end
|
14
|
+
|
15
|
+
module ClassMethods
|
16
|
+
def retrieve(attributes = {})
|
17
|
+
new resource(location, attributes).get
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "uri"
|
2
|
+
|
3
|
+
require "omise/util"
|
4
|
+
|
5
|
+
module Omise
|
6
|
+
module Testing
|
7
|
+
class Resource
|
8
|
+
def initialize(url, path, key)
|
9
|
+
@uri = URI.parse(url)
|
10
|
+
@uri.path = [@uri.path, path].join
|
11
|
+
@key = key
|
12
|
+
end
|
13
|
+
|
14
|
+
def get(attributes = {})
|
15
|
+
Omise::Util.load_response(read_file("get"))
|
16
|
+
end
|
17
|
+
|
18
|
+
def patch(attributes = {})
|
19
|
+
Omise::Util.load_response(read_file("patch"))
|
20
|
+
end
|
21
|
+
|
22
|
+
def delete(attributes = {})
|
23
|
+
Omise::Util.load_response(read_file("delete"))
|
24
|
+
end
|
25
|
+
|
26
|
+
def post(attributes = {})
|
27
|
+
Omise::Util.load_response(read_file("post"))
|
28
|
+
end
|
29
|
+
|
30
|
+
def read_file(verb)
|
31
|
+
File.read(File.expand_path(File.join(
|
32
|
+
Omise::LIB_PATH, "..", "test", "fixtures",
|
33
|
+
[@uri.host, @uri.path, "-#{verb}.json"].join
|
34
|
+
)))
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/omise/token.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require "omise/object"
|
2
|
+
require "omise/vault"
|
3
|
+
|
4
|
+
module Omise
|
5
|
+
class Token < OmiseObject
|
6
|
+
self.endpoint = "/tokens"
|
7
|
+
|
8
|
+
extend Vault
|
9
|
+
|
10
|
+
def self.retrieve(id, attributes = {})
|
11
|
+
new resource(location(id), attributes).get
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.create(attributes = {})
|
15
|
+
new resource(location, attributes).post(attributes)
|
16
|
+
end
|
17
|
+
|
18
|
+
def reload(attributes = {})
|
19
|
+
assign_attributes resource(attributes).get
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.preprocess_attributes!(attributes)
|
23
|
+
# noop
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "omise/object"
|
2
|
+
require "omise/list"
|
3
|
+
|
4
|
+
module Omise
|
5
|
+
class Transaction < OmiseObject
|
6
|
+
self.endpoint = "/transactions"
|
7
|
+
|
8
|
+
def self.retrieve(id = nil, attributes = {})
|
9
|
+
new resource(location(id), attributes).get
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.list(attributes = {})
|
13
|
+
List.new resource(location, attributes).get
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "omise/object"
|
2
|
+
require "omise/list"
|
3
|
+
|
4
|
+
module Omise
|
5
|
+
class Transfer < OmiseObject
|
6
|
+
self.endpoint = "/transfers"
|
7
|
+
|
8
|
+
def self.create(attributes = {})
|
9
|
+
new resource(location, attributes).post(attributes)
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.retrieve(id, attributes = {})
|
13
|
+
new resource(location(id), attributes).get
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.list(attributes = {})
|
17
|
+
List.new resource(location, attributes).get
|
18
|
+
end
|
19
|
+
|
20
|
+
def reload(attributes = {})
|
21
|
+
assign_attributes resource(attributes).get
|
22
|
+
end
|
23
|
+
|
24
|
+
def update(attributes = {})
|
25
|
+
assign_attributes resource(attributes).patch(attributes)
|
26
|
+
end
|
27
|
+
|
28
|
+
def destroy(attributes = {})
|
29
|
+
assign_attributes resource(attributes).delete
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/omise/util.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require "json"
|
2
|
+
|
3
|
+
require "omise/object"
|
4
|
+
require "omise/error"
|
5
|
+
|
6
|
+
module Omise
|
7
|
+
module Util module_function
|
8
|
+
def typecast(object)
|
9
|
+
klass = begin
|
10
|
+
const_get(object["object"].capitalize)
|
11
|
+
rescue NameError
|
12
|
+
OmiseObject
|
13
|
+
end
|
14
|
+
|
15
|
+
klass.new(object)
|
16
|
+
end
|
17
|
+
|
18
|
+
def load_response(response)
|
19
|
+
object = JSON.load(response)
|
20
|
+
raise Omise::Error.new(object) if object["object"] == "error"
|
21
|
+
object
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/omise/vault.rb
ADDED