balanced 0.1.0 → 0.2.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.
- data/.gitignore +3 -0
- data/Gemfile +5 -0
- data/Rakefile +8 -0
- data/balanced.gemspec +2 -2
- data/examples/examples.rb +47 -0
- data/lib/balanced.rb +81 -1
- data/lib/balanced/base.rb +123 -0
- data/lib/balanced/client.rb +83 -0
- data/lib/balanced/resources.rb +160 -0
- data/lib/balanced/utils.rb +48 -0
- data/lib/balanced/version.rb +2 -2
- data/spec/api_key_spec.rb +20 -0
- data/spec/balanced_spec.rb +16 -0
- data/spec/client_spec.rb +12 -0
- data/spec/utils_spec.rb +8 -0
- metadata +15 -4
- data/tests/balanced-specs.rb +0 -0
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/Rakefile
CHANGED
data/balanced.gemspec
CHANGED
@@ -3,7 +3,7 @@ require File.expand_path('../lib/balanced/version', __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.authors = ["Mahmoud Abdelkader"]
|
6
|
-
gem.email =
|
6
|
+
gem.email = %w(mahmoud@poundpay.com)
|
7
7
|
gem.description = %q{Balanced is the payments platform for marketplaces.
|
8
8
|
Integrate a payments experience just like Amazon for your marketplace.
|
9
9
|
Forget about dealing with banking systems, compliance, fraud, and security.
|
@@ -15,6 +15,6 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
16
16
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
17
17
|
gem.name = "balanced"
|
18
|
-
gem.require_paths =
|
18
|
+
gem.require_paths = %w(lib)
|
19
19
|
gem.version = Balanced::VERSION
|
20
20
|
end
|
data/examples/examples.rb
CHANGED
@@ -0,0 +1,47 @@
|
|
1
|
+
|
2
|
+
# create our new api key
|
3
|
+
api_key = Balanced::ApiKey.new.save
|
4
|
+
puts "Our secret is: ", api_key
|
5
|
+
|
6
|
+
# configure with our secret
|
7
|
+
Balanced.configure(api_key.secret)
|
8
|
+
|
9
|
+
# create our marketplace
|
10
|
+
marketplace = Balanced::Marketplace.new.save
|
11
|
+
|
12
|
+
card = Balanced::Card.new(
|
13
|
+
:card_number => "5105105105105100",
|
14
|
+
:expiration_month => "12",
|
15
|
+
:expiration_year => "2015",
|
16
|
+
).save
|
17
|
+
|
18
|
+
# create our account
|
19
|
+
buyer = marketplace.create_buyer(
|
20
|
+
:email_address => "buyer@example.org",
|
21
|
+
:card_uri => card.uri
|
22
|
+
)
|
23
|
+
|
24
|
+
# hold some amount of funds on the buyer, lets say 15$
|
25
|
+
the_hold = buyer.hold(
|
26
|
+
:amount => 1500,
|
27
|
+
)
|
28
|
+
|
29
|
+
# the hold has a fee of 35c
|
30
|
+
assert the_hold.fee == 35
|
31
|
+
|
32
|
+
# nah, lets just debit it
|
33
|
+
debit = the_hold.debit()
|
34
|
+
|
35
|
+
# hmm, how much money do i have in escrow? should equal
|
36
|
+
# the debit amount
|
37
|
+
marketplace = marketplace.find(marketplace.uri)
|
38
|
+
assert marketplace.in_escrow == 1500
|
39
|
+
|
40
|
+
|
41
|
+
# cool. now let me refund
|
42
|
+
refund = debit.refund() # the full amount!
|
43
|
+
|
44
|
+
# notice how Balanced refunds you your fees?
|
45
|
+
assert (refund.fee + debit.fee) == 0
|
46
|
+
|
47
|
+
|
data/lib/balanced.rb
CHANGED
@@ -1 +1,81 @@
|
|
1
|
-
require '
|
1
|
+
require 'uri'
|
2
|
+
require 'balanced/version' unless defined? Balanced::VERSION
|
3
|
+
|
4
|
+
module Balanced
|
5
|
+
autoload :Client, 'balanced/client'
|
6
|
+
autoload :Utils, 'balanced/utils'
|
7
|
+
autoload :Resource, 'balanced/base'
|
8
|
+
autoload :ApiKey, 'balanced/resources'
|
9
|
+
autoload :Marketplace, 'balanced/resources'
|
10
|
+
|
11
|
+
@client = nil
|
12
|
+
@config = {
|
13
|
+
:scheme => 'http',
|
14
|
+
:host => 'localhost',
|
15
|
+
:port => 5000,
|
16
|
+
:version => '1',
|
17
|
+
}
|
18
|
+
|
19
|
+
class << self
|
20
|
+
|
21
|
+
attr_accessor 'client'
|
22
|
+
attr_accessor 'config'
|
23
|
+
|
24
|
+
def configure(api_key=nil, options={})
|
25
|
+
options = @config.merge! options
|
26
|
+
@config = options
|
27
|
+
@client = Balanced::Client.new(api_key, @config)
|
28
|
+
end
|
29
|
+
|
30
|
+
def get uri, params = {}
|
31
|
+
self.client.get uri, params
|
32
|
+
end
|
33
|
+
|
34
|
+
def post uri, data = {}
|
35
|
+
self.client.post uri, data
|
36
|
+
end
|
37
|
+
|
38
|
+
def put uri, data = {}
|
39
|
+
self.client.put uri, data
|
40
|
+
end
|
41
|
+
|
42
|
+
def delete uri
|
43
|
+
self.client.delete uri
|
44
|
+
end
|
45
|
+
|
46
|
+
def split_the_uri uri
|
47
|
+
parsed_uri = URI.parse(uri)
|
48
|
+
parsed_uri.path.sub(/\/$/, '').split('/')
|
49
|
+
end
|
50
|
+
|
51
|
+
def from_uri uri
|
52
|
+
split_uri = split_the_uri(uri)
|
53
|
+
# this is such an ugly hack, basically, we're trying to
|
54
|
+
# see if we have the symbol that matches the capitalized
|
55
|
+
#
|
56
|
+
class_name = Balanced::Utils.classify(split_uri[-1])
|
57
|
+
begin
|
58
|
+
klass = Balanced.const_get class_name
|
59
|
+
rescue NameError
|
60
|
+
class_name = Utils.classify(split_uri[-2])
|
61
|
+
klass = Balanced.const_get(class_name)
|
62
|
+
end
|
63
|
+
klass
|
64
|
+
end
|
65
|
+
|
66
|
+
def is_collection uri
|
67
|
+
split_uri = split_the_uri(uri)
|
68
|
+
class_name = Balanced::Utils.classify(split_uri[-1])
|
69
|
+
begin
|
70
|
+
Balanced.const_get class_name
|
71
|
+
rescue NameError
|
72
|
+
false
|
73
|
+
end
|
74
|
+
true
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# configure on import so we don't have to configure for creating
|
79
|
+
# an api key
|
80
|
+
configure
|
81
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
module Balanced
|
2
|
+
class Resource
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
def resource_name
|
7
|
+
Utils.demodulize name
|
8
|
+
end
|
9
|
+
|
10
|
+
def collection_name
|
11
|
+
Utils.pluralize Utils.underscore(resource_name)
|
12
|
+
end
|
13
|
+
|
14
|
+
def collection_path
|
15
|
+
["/v#{Balanced.config[:version]}", collection_name].compact.join '/'
|
16
|
+
end
|
17
|
+
|
18
|
+
def member_name
|
19
|
+
Utils.underscore resource_name
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
attr_reader :attributes
|
25
|
+
|
26
|
+
def initialize attributes = {}
|
27
|
+
@attributes = attributes
|
28
|
+
self.attributes = attributes
|
29
|
+
end
|
30
|
+
|
31
|
+
def attributes= attributes = {}
|
32
|
+
attributes.each_pair { |k, v|
|
33
|
+
respond_to?(name = "#{k}=") and send(name, v) or (self[k] = v)
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
def read_attribute key
|
38
|
+
attributes[key.to_s]
|
39
|
+
end
|
40
|
+
alias [] read_attribute
|
41
|
+
|
42
|
+
def write_attribute key, value
|
43
|
+
attributes[key] = value
|
44
|
+
end
|
45
|
+
alias []= write_attribute
|
46
|
+
|
47
|
+
# delegate the query to the pager module
|
48
|
+
|
49
|
+
def find (uri, options={})
|
50
|
+
payload = Balanced.get :uri => uri
|
51
|
+
construct_from_response payload
|
52
|
+
end
|
53
|
+
|
54
|
+
def save
|
55
|
+
uri = self.attributes.delete('uri') { |key| nil }
|
56
|
+
method = :post
|
57
|
+
if uri.nil?
|
58
|
+
uri = self.class.collection_path
|
59
|
+
else
|
60
|
+
method = :put
|
61
|
+
end
|
62
|
+
response = Balanced.send(method, uri, self.attributes)
|
63
|
+
reload response
|
64
|
+
end
|
65
|
+
|
66
|
+
def destroy
|
67
|
+
Balanced.delete :uri => self.attributes['uri']
|
68
|
+
end
|
69
|
+
|
70
|
+
def construct_from_response payload
|
71
|
+
klass = Balanced.from_uri(payload['uri'])
|
72
|
+
instance = klass.new payload
|
73
|
+
payload.each do |name, value|
|
74
|
+
klass.class_eval {
|
75
|
+
attr_accessor name.to_s
|
76
|
+
}
|
77
|
+
# here is where our interpretations will begin.
|
78
|
+
# if the value is a sub-resource, lets instantiate the class
|
79
|
+
# and set it correctly
|
80
|
+
if value.instance_of? Hash and value.has_key? 'uri'
|
81
|
+
value = construct_from_response value
|
82
|
+
elsif name =~ /_uri$/
|
83
|
+
modified_name = name.sub(/_uri$/, '')
|
84
|
+
klass.instance_eval {
|
85
|
+
define_method(modified_name) {
|
86
|
+
values_class = Balanced.from_uri(value)
|
87
|
+
# if uri is a collection -> this would definitely be if it ends in a symbol
|
88
|
+
# then we should allow a lazy executor of the query pager
|
89
|
+
if Balanced.is_collection(value)
|
90
|
+
# TODO: return the pager
|
91
|
+
p "TODO: return the pager for this class: #{values_class}"
|
92
|
+
values_class.new
|
93
|
+
else
|
94
|
+
values_class.find(value)
|
95
|
+
end
|
96
|
+
}
|
97
|
+
}
|
98
|
+
end
|
99
|
+
|
100
|
+
instance.instance_variable_set "@#{name}", value
|
101
|
+
end
|
102
|
+
instance
|
103
|
+
end
|
104
|
+
|
105
|
+
def reload response = nil
|
106
|
+
if response
|
107
|
+
return if response.body.to_s.length.zero?
|
108
|
+
fresh = self.construct_from_response response.body
|
109
|
+
else
|
110
|
+
fresh = self.find(@attributes['uri'])
|
111
|
+
end
|
112
|
+
fresh and copy_from fresh
|
113
|
+
self
|
114
|
+
end
|
115
|
+
|
116
|
+
def copy_from other
|
117
|
+
other.instance_variables.each do |ivar|
|
118
|
+
instance_variable_set ivar, other.instance_variable_get(ivar)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require "uri"
|
2
|
+
require "faraday"
|
3
|
+
require "faraday_middleware"
|
4
|
+
|
5
|
+
module Balanced
|
6
|
+
class Client
|
7
|
+
|
8
|
+
HTTP_HEADERS = {
|
9
|
+
'Accept' => 'application/json',
|
10
|
+
'Accept-Charset' => 'utf-8',
|
11
|
+
'User-Agent' => "balanced-ruby/#{Balanced::VERSION}",
|
12
|
+
}
|
13
|
+
|
14
|
+
DEFAULTS = {
|
15
|
+
:scheme => 'http',
|
16
|
+
:host => 'localhost',
|
17
|
+
:port => 5000,
|
18
|
+
:version => '1',
|
19
|
+
}
|
20
|
+
|
21
|
+
attr :api_key, true
|
22
|
+
attr_reader :conn
|
23
|
+
attr_accessor :config
|
24
|
+
|
25
|
+
def initialize(api_key, options={})
|
26
|
+
@api_key = api_key.nil? ? api_key : api_key.strip
|
27
|
+
@config = DEFAULTS.merge! options
|
28
|
+
build_conn
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
def build_conn
|
33
|
+
@conn = Faraday.new url do |cxn|
|
34
|
+
cxn.request :json
|
35
|
+
|
36
|
+
cxn.response :logger
|
37
|
+
cxn.response :json
|
38
|
+
cxn.adapter Faraday.default_adapter
|
39
|
+
end
|
40
|
+
@conn.path_prefix = '/'
|
41
|
+
end
|
42
|
+
|
43
|
+
def inspect # :nodoc:
|
44
|
+
"<Balanced::Client @api_key=#{@api_key}, @url=#{url}>"
|
45
|
+
end
|
46
|
+
|
47
|
+
def url
|
48
|
+
URI::HTTP.build(
|
49
|
+
:scheme => @config[:scheme],
|
50
|
+
:host => @config[:host],
|
51
|
+
:port => @config[:port],
|
52
|
+
).to_s
|
53
|
+
end
|
54
|
+
|
55
|
+
# wtf..
|
56
|
+
def get *args
|
57
|
+
op(:get, *args)
|
58
|
+
end
|
59
|
+
|
60
|
+
def post *args
|
61
|
+
op(:post, *args)
|
62
|
+
end
|
63
|
+
|
64
|
+
def put *args
|
65
|
+
op(:put, *args)
|
66
|
+
end
|
67
|
+
|
68
|
+
def delete *args
|
69
|
+
op(:delete, *args)
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def op (method, *args)
|
75
|
+
unless @api_key.nil?
|
76
|
+
@conn.basic_auth(@api_key, '')
|
77
|
+
end
|
78
|
+
@conn.send(method, *args)
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
@@ -0,0 +1,160 @@
|
|
1
|
+
module Balanced
|
2
|
+
|
3
|
+
class ApiKey < Resource
|
4
|
+
end
|
5
|
+
|
6
|
+
class Account < Resource
|
7
|
+
|
8
|
+
def debit (amount=nil,
|
9
|
+
appears_on_statement_as=nil,
|
10
|
+
hold_uri=nil,
|
11
|
+
meta=nil,
|
12
|
+
description=nil,
|
13
|
+
source_uri=nil)
|
14
|
+
debit = Debit.new(
|
15
|
+
:uri => self.debits_uri,
|
16
|
+
:amount => amount,
|
17
|
+
:appears_on_statement_as => appears_on_statement_as,
|
18
|
+
:hold_uri => hold_uri,
|
19
|
+
:meta => meta,
|
20
|
+
:description => description,
|
21
|
+
:source_uri => source_uri,
|
22
|
+
)
|
23
|
+
debit.save
|
24
|
+
end
|
25
|
+
|
26
|
+
def hold amount, meta={}, source_uri=nil
|
27
|
+
hold = Hold.new(
|
28
|
+
:uri => self.holds_uri,
|
29
|
+
:amount => amount,
|
30
|
+
:meta => meta,
|
31
|
+
:source_uri => source_uri,
|
32
|
+
)
|
33
|
+
hold.save
|
34
|
+
end
|
35
|
+
|
36
|
+
def credit amount, description=nil, meta={}, destination_uri=nil
|
37
|
+
credit = Credit.new(
|
38
|
+
:uri => self.debits_uri,
|
39
|
+
:amount => amount,
|
40
|
+
:meta => meta,
|
41
|
+
:description => description,
|
42
|
+
:destination_uri => destination_uri,
|
43
|
+
)
|
44
|
+
credit.save
|
45
|
+
end
|
46
|
+
|
47
|
+
def add_card card_uri
|
48
|
+
self.card_uri = card_uri
|
49
|
+
save
|
50
|
+
end
|
51
|
+
|
52
|
+
def add_bank_account bank_account_uri
|
53
|
+
self.bank_account_uri = bank_account_uri
|
54
|
+
save
|
55
|
+
end
|
56
|
+
|
57
|
+
def promote_to_merchant merchant_data
|
58
|
+
self.merchant = merchant
|
59
|
+
save
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
class Merchant < Resource
|
65
|
+
|
66
|
+
def self.me
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
class Marketplace < Resource
|
73
|
+
|
74
|
+
def self.my_marketplace
|
75
|
+
end
|
76
|
+
|
77
|
+
def create_buyer email_address, card_uri, name=nil, meta={}
|
78
|
+
account = Account.new(
|
79
|
+
:uri => self.accounts_uri,
|
80
|
+
:email_address => email_address,
|
81
|
+
:card_uri => card_uri,
|
82
|
+
:name => name,
|
83
|
+
:meta => meta,
|
84
|
+
)
|
85
|
+
account.save
|
86
|
+
end
|
87
|
+
|
88
|
+
def create_merchant email_address, merchant, bank_account_uri=nil, name=nil, meta={}
|
89
|
+
account = Account.new(
|
90
|
+
:uri => self.accounts_uri,
|
91
|
+
:email_address => email_address,
|
92
|
+
:merchant => merchant,
|
93
|
+
:bank_account_uri => bank_account_uri,
|
94
|
+
:name => name,
|
95
|
+
:meta => meta,
|
96
|
+
)
|
97
|
+
account.save
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
class Hold < Resource
|
103
|
+
|
104
|
+
def void
|
105
|
+
@is_void = true
|
106
|
+
save
|
107
|
+
end
|
108
|
+
|
109
|
+
def capture amount, appears_on_statement_as, meta, description
|
110
|
+
self.account.debit(amount, appears_on_statement_as, self.uri, meta, description)
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
|
115
|
+
class Debit < Resource
|
116
|
+
|
117
|
+
def refund amount=nil, description=nil
|
118
|
+
refund = Refund.new(
|
119
|
+
:uri => self.refunds_uri,
|
120
|
+
:debit_uri => self.uri,
|
121
|
+
:amount => amount,
|
122
|
+
:description => description,
|
123
|
+
)
|
124
|
+
refund.save
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
|
129
|
+
class Credit < Resource
|
130
|
+
end
|
131
|
+
|
132
|
+
class Refund < Resource
|
133
|
+
end
|
134
|
+
|
135
|
+
class Transaction < Resource
|
136
|
+
end
|
137
|
+
|
138
|
+
class Card < Resource
|
139
|
+
|
140
|
+
def debit amount=nil, appears_on_statement_as=nil, holds_uri=nil, meta=nil, description=nil
|
141
|
+
self.account.debit(amount, appears_on_statement_as, holds_uri, meta, description, self.uri)
|
142
|
+
end
|
143
|
+
|
144
|
+
def hold amount=nil, meta=nil
|
145
|
+
self.account.hold(amount, meta, self.uri)
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
class BankAccount < Resource
|
150
|
+
|
151
|
+
def debit amount, appears_on_statement_as=nil, meta=mil, description=nil
|
152
|
+
self.account.debit(amount, appears_on_statement_as, meta, description, self.uri)
|
153
|
+
end
|
154
|
+
|
155
|
+
def credit amount, description=nil, meta=nil
|
156
|
+
self.account.credit(amount, description, meta, self.uri)
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Balanced
|
2
|
+
module Utils
|
3
|
+
def camelize underscored_word
|
4
|
+
underscored_word.to_s.gsub(/(?:^|_)(.)/) { $1.upcase }
|
5
|
+
end
|
6
|
+
|
7
|
+
def classify table_name
|
8
|
+
camelize singularize(table_name.to_s.sub(/.*\./, ''))
|
9
|
+
end
|
10
|
+
|
11
|
+
def demodulize class_name_in_module
|
12
|
+
class_name_in_module.to_s.sub(/^.*::/, '')
|
13
|
+
end
|
14
|
+
|
15
|
+
def pluralize word
|
16
|
+
word.to_s.sub(/([^s])$/, '\1s')
|
17
|
+
end
|
18
|
+
|
19
|
+
def singularize word
|
20
|
+
word.to_s.sub(/s$/, '').sub(/ie$/, 'y')
|
21
|
+
end
|
22
|
+
|
23
|
+
def underscore camel_cased_word
|
24
|
+
word = camel_cased_word.to_s.dup
|
25
|
+
word.gsub!(/::/, '/')
|
26
|
+
word.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
|
27
|
+
word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
|
28
|
+
word.tr! "-", "_"
|
29
|
+
word.downcase!
|
30
|
+
word
|
31
|
+
end
|
32
|
+
|
33
|
+
def hash_with_indifferent_read_access base = {}
|
34
|
+
indifferent = Hash.new { |hash, key| hash[key.to_s] if key.is_a? Symbol }
|
35
|
+
base.each_pair { |key, value| indifferent[key.to_s] = value }
|
36
|
+
indifferent
|
37
|
+
end
|
38
|
+
|
39
|
+
def stringify_keys! hash
|
40
|
+
hash.keys.each do |key|
|
41
|
+
stringify_keys! hash[key] if hash[key].is_a? Hash
|
42
|
+
hash[key.to_s] = hash.delete key if key.is_a? Symbol
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
extend self
|
47
|
+
end
|
48
|
+
end
|
data/lib/balanced/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module Balanced
|
2
|
-
VERSION = '0.
|
3
|
-
end
|
2
|
+
VERSION = '0.2.0'
|
3
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "balanced"
|
2
|
+
|
3
|
+
describe "ApiKey Resource" do
|
4
|
+
before(:each) do
|
5
|
+
end
|
6
|
+
|
7
|
+
it "should create my api key and let me access the secret" do
|
8
|
+
key = Balanced::ApiKey.new.save
|
9
|
+
key.should_not eq(nil)
|
10
|
+
# make sure my secret is there.
|
11
|
+
key.secret.should_not eq(nil)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should construct the merchant sub resource as an instance of Balanced::Merchant" do
|
15
|
+
key = Balanced::ApiKey.new.save
|
16
|
+
(key.merchant.instance_of? Balanced::Merchant).should == true
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "balanced"
|
2
|
+
|
3
|
+
describe "Balanced module" do
|
4
|
+
before(:each) do
|
5
|
+
Balanced.configure "some-secret"
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should have a non-nil client" do
|
9
|
+
Balanced.client.should_not eq(nil)
|
10
|
+
end
|
11
|
+
|
12
|
+
its "client should not have a nil conn" do
|
13
|
+
Balanced.client.conn.should_not eq(nil)
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
data/spec/client_spec.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require "balanced"
|
2
|
+
|
3
|
+
describe "balanced client" do
|
4
|
+
|
5
|
+
it "should allow setting and reading of the api_key" do
|
6
|
+
client = Balanced::Client.new "miscreant"
|
7
|
+
client.api_key.should eq("miscreant")
|
8
|
+
client.api_key = "foo"
|
9
|
+
client.api_key.should eq("foo")
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
data/spec/utils_spec.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: balanced
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
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: 2012-05-
|
12
|
+
date: 2012-05-19 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: ! "Balanced is the payments platform for marketplaces.\n Integrate
|
15
15
|
a payments experience just like Amazon for your marketplace.\n Forget about dealing
|
@@ -29,8 +29,15 @@ files:
|
|
29
29
|
- balanced.gemspec
|
30
30
|
- examples/examples.rb
|
31
31
|
- lib/balanced.rb
|
32
|
+
- lib/balanced/base.rb
|
33
|
+
- lib/balanced/client.rb
|
34
|
+
- lib/balanced/resources.rb
|
35
|
+
- lib/balanced/utils.rb
|
32
36
|
- lib/balanced/version.rb
|
33
|
-
-
|
37
|
+
- spec/api_key_spec.rb
|
38
|
+
- spec/balanced_spec.rb
|
39
|
+
- spec/client_spec.rb
|
40
|
+
- spec/utils_spec.rb
|
34
41
|
homepage: https://balancedpayments.com
|
35
42
|
licenses: []
|
36
43
|
post_install_message:
|
@@ -55,4 +62,8 @@ rubygems_version: 1.8.23
|
|
55
62
|
signing_key:
|
56
63
|
specification_version: 3
|
57
64
|
summary: Sign up on https://balancedpayments.com/
|
58
|
-
test_files:
|
65
|
+
test_files:
|
66
|
+
- spec/api_key_spec.rb
|
67
|
+
- spec/balanced_spec.rb
|
68
|
+
- spec/client_spec.rb
|
69
|
+
- spec/utils_spec.rb
|
data/tests/balanced-specs.rb
DELETED
File without changes
|