espago 0.0.9 → 0.1.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.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +6 -0
  3. data/Gemfile.lock +14 -1
  4. data/Guardfile +1 -0
  5. data/README.md +118 -6
  6. data/espago.gemspec +6 -1
  7. data/lib/espago.rb +4 -3
  8. data/lib/espago/api_connection.rb +16 -7
  9. data/lib/espago/api_connection/{post_clients.rb → api.rb} +1 -5
  10. data/lib/espago/api_connection/api_delete.rb +9 -0
  11. data/lib/espago/api_connection/api_get.rb +13 -0
  12. data/lib/espago/api_connection/api_post.rb +9 -0
  13. data/lib/espago/api_connection/api_put.rb +9 -0
  14. data/lib/espago/api_connection/charges_complete_post.rb +9 -0
  15. data/lib/espago/api_connection/charges_delete.rb +9 -0
  16. data/lib/espago/api_connection/charges_get.rb +9 -0
  17. data/lib/espago/api_connection/charges_post.rb +9 -0
  18. data/lib/espago/api_connection/{post_charges_refund.rb → charges_refund_post.rb} +1 -5
  19. data/lib/espago/api_connection/clients_authorize_post.rb +9 -0
  20. data/lib/espago/api_connection/clients_delete.rb +9 -0
  21. data/lib/espago/api_connection/clients_get.rb +9 -0
  22. data/lib/espago/api_connection/clients_invoices_get.rb +9 -0
  23. data/lib/espago/api_connection/clients_post.rb +9 -0
  24. data/lib/espago/api_connection/clients_put.rb +9 -0
  25. data/lib/espago/api_connection/clients_subscriptions_get.rb +9 -0
  26. data/lib/espago/api_connection/complete_post.rb +14 -0
  27. data/lib/espago/api_connection/invoice_items_delete.rb +9 -0
  28. data/lib/espago/api_connection/invoice_items_get.rb +9 -0
  29. data/lib/espago/api_connection/invoice_items_post.rb +9 -0
  30. data/lib/espago/api_connection/invoices_get.rb +9 -0
  31. data/lib/espago/api_connection/line_items_get.rb +9 -0
  32. data/lib/espago/api_connection/plans_delete.rb +9 -0
  33. data/lib/espago/api_connection/plans_get.rb +9 -0
  34. data/lib/espago/api_connection/plans_post.rb +9 -0
  35. data/lib/espago/api_connection/plans_put.rb +9 -0
  36. data/lib/espago/api_connection/subscriptions_delete.rb +9 -0
  37. data/lib/espago/api_connection/subscriptions_get.rb +9 -0
  38. data/lib/espago/api_connection/subscriptions_post.rb +9 -0
  39. data/lib/espago/api_connection/tokens_get.rb +9 -0
  40. data/lib/espago/api_connection/{post_tokens.rb → tokens_post.rb} +2 -2
  41. data/lib/espago/back_request.rb +33 -0
  42. data/lib/espago/client.rb +12 -3
  43. data/lib/espago/router.rb +1 -1
  44. data/lib/espago/version.rb +1 -1
  45. data/spec/espago/api_connection_spec.rb +4 -3
  46. data/spec/espago/back_request_spec.rb +33 -0
  47. data/spec/espago/client_spec.rb +3 -2
  48. data/spec/espago/router_spec.rb +2 -2
  49. data/spec/features/apis_spec.rb +21 -0
  50. data/spec/features/charges_spec.rb +79 -0
  51. data/spec/features/clients_spec.rb +100 -0
  52. data/spec/features/error_spec.rb +28 -0
  53. data/spec/features/invoice_items_spec.rb +37 -0
  54. data/spec/features/invoices_spec.rb +24 -0
  55. data/spec/features/line_items_spec.rb +17 -0
  56. data/spec/features/plans_spec.rb +61 -0
  57. data/spec/features/subscriptions_spec.rb +43 -0
  58. data/spec/features/tokens_spec.rb +40 -0
  59. data/spec/fixtures/cassettes/api_2.yml +68 -0
  60. data/spec/fixtures/cassettes/api_3.yml +68 -0
  61. data/spec/fixtures/cassettes/charges_complete.yml +48 -0
  62. data/spec/fixtures/cassettes/charges_complete_deprecation.yml +48 -0
  63. data/spec/fixtures/cassettes/charges_destroy.yml +46 -0
  64. data/spec/fixtures/cassettes/charges_get.yml +67 -0
  65. data/spec/fixtures/cassettes/charges_get_pay_mTOngouLTJWZ0w.yml +46 -0
  66. data/spec/fixtures/cassettes/charges_post.yml +48 -0
  67. data/spec/fixtures/cassettes/charges_refund.yml +48 -0
  68. data/spec/fixtures/cassettes/clients_authorize.yml +48 -0
  69. data/spec/fixtures/cassettes/clients_delete.yml +42 -0
  70. data/spec/fixtures/cassettes/clients_get.yml +46 -0
  71. data/spec/fixtures/cassettes/clients_get_cli_w0Se2smYwyQ0Uw.yml +46 -0
  72. data/spec/fixtures/cassettes/clients_invoices.yml +46 -0
  73. data/spec/fixtures/cassettes/clients_post.yml +48 -0
  74. data/spec/fixtures/cassettes/clients_put.yml +48 -0
  75. data/spec/fixtures/cassettes/clients_subscriptions.yml +46 -0
  76. data/spec/fixtures/cassettes/error_400.yml +46 -0
  77. data/spec/fixtures/cassettes/error_401.yml +46 -0
  78. data/spec/fixtures/cassettes/error_500.yml +46 -0
  79. data/spec/fixtures/cassettes/invoice_items_delete_ii_WDzszvhTshe78Xd.yml +42 -0
  80. data/spec/fixtures/cassettes/invoice_items_get_ii_5LS-YR7S1QaJBl3.yml +47 -0
  81. data/spec/fixtures/cassettes/invoice_items_post_ii_5LS-YR7S1QaJBl3.yml +49 -0
  82. data/spec/fixtures/cassettes/invoices_get.yml +46 -0
  83. data/spec/fixtures/cassettes/invoices_get_in_tUCMhwlg2nkvAaL.yml +46 -0
  84. data/spec/fixtures/cassettes/line_items_get.yml +47 -0
  85. data/spec/fixtures/cassettes/plans_delete.yml +42 -0
  86. data/spec/fixtures/cassettes/plans_get.yml +46 -0
  87. data/spec/fixtures/cassettes/plans_get_pl_12345.yml +46 -0
  88. data/spec/fixtures/cassettes/plans_post.yml +48 -0
  89. data/spec/fixtures/cassettes/plans_put.yml +44 -0
  90. data/spec/fixtures/cassettes/subscriptions_delete_sub_8yYuCBKdywr7e2.yml +42 -0
  91. data/spec/fixtures/cassettes/subscriptions_get.yml +46 -0
  92. data/spec/fixtures/cassettes/subscriptions_get_sub_8yYuCBKdywr7e2.yml +46 -0
  93. data/spec/fixtures/cassettes/subscriptions_post.yml +48 -0
  94. data/spec/fixtures/cassettes/tokens_get.yml +46 -0
  95. data/spec/fixtures/cassettes/tokens_post.yml +54 -0
  96. data/spec/spec_helper.rb +30 -0
  97. metadata +197 -37
  98. data/lib/espago/api_connection/delete_charges.rb +0 -13
  99. data/lib/espago/api_connection/delete_clients.rb +0 -13
  100. data/lib/espago/api_connection/get_charges.rb +0 -17
  101. data/lib/espago/api_connection/get_clients.rb +0 -17
  102. data/lib/espago/api_connection/get_tokens.rb +0 -13
  103. data/lib/espago/api_connection/post_charges.rb +0 -13
  104. data/lib/espago/api_connection/post_clients_authorize.rb +0 -13
  105. data/lib/espago/api_connection/post_complete.rb +0 -13
  106. data/lib/espago/api_connection/put_clients.rb +0 -13
@@ -0,0 +1,9 @@
1
+ module Espago
2
+ class ApiConnection
3
+ class ClientsDelete < ApiDelete
4
+ def request(params = {})
5
+ super("clients",params[:client_id])
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Espago
2
+ class ApiConnection
3
+ class ClientsGet < ApiGet
4
+ def request(params = {})
5
+ super('clients',params,params[:client_id])
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Espago
2
+ class ApiConnection
3
+ class ClientsInvoicesGet < ApiGet
4
+ def request(params = {})
5
+ super("clients/#{params[:client_id]}/invoices")
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Espago
2
+ class ApiConnection
3
+ class ClientsPost < ApiPost
4
+ def request(params = {})
5
+ super('clients', params)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Espago
2
+ class ApiConnection
3
+ class ClientsPut < ApiPut
4
+ def request(params = {})
5
+ super("clients/#{params[:client_id]}", params)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Espago
2
+ class ApiConnection
3
+ class ClientsSubscriptionsGet < ApiGet
4
+ def request(params = {})
5
+ super("clients/#{params[:client_id]}/subscriptions")
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,14 @@
1
+ module Espago
2
+ class ApiConnection
3
+ class CompletePost < ApiPost
4
+ def initialize(connection)
5
+ warn "[DEPRECATION] `complete` is deprecated. Please use `charges_complete` instead."
6
+ super(connection)
7
+ end
8
+
9
+ def request(params = {})
10
+ super("charges/#{params[:charge_id]}/complete")
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,9 @@
1
+ module Espago
2
+ class ApiConnection
3
+ class InvoiceItemsDelete < ApiDelete
4
+ def request(params = {})
5
+ super("invoice_items",params[:invoice_item_id])
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Espago
2
+ class ApiConnection
3
+ class InvoiceItemsGet < ApiGet
4
+ def request(params = {})
5
+ super("invoice_items",{},params[:invoice_item_id])
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Espago
2
+ class ApiConnection
3
+ class InvoiceItemsPost < ApiPost
4
+ def request(params = {})
5
+ super("invoice_items", params)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Espago
2
+ class ApiConnection
3
+ class InvoicesGet < ApiGet
4
+ def request(params = {})
5
+ super('invoices',params,params[:invoice_id])
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Espago
2
+ class ApiConnection
3
+ class LineItemsGet < ApiGet
4
+ def request(params = {})
5
+ super("invoices/#{params[:invoice_id]}/line_items")
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Espago
2
+ class ApiConnection
3
+ class PlansDelete < ApiDelete
4
+ def request(params = {})
5
+ super("plans",params[:plan_id])
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Espago
2
+ class ApiConnection
3
+ class PlansGet < ApiGet
4
+ def request(params = {})
5
+ super('plans',params,params[:plan_id])
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Espago
2
+ class ApiConnection
3
+ class PlansPost < ApiPost
4
+ def request(params = {})
5
+ super("plans", params)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Espago
2
+ class ApiConnection
3
+ class PlansPut < ApiPut
4
+ def request(params = {})
5
+ super("plans/#{params[:plan_id]}", params)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Espago
2
+ class ApiConnection
3
+ class SubscriptionsDelete < ApiDelete
4
+ def request(params = {})
5
+ super("subscriptions",params[:subscription_id])
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Espago
2
+ class ApiConnection
3
+ class SubscriptionsGet < ApiGet
4
+ def request(params = {})
5
+ super('subscriptions',params,params[:subscription_id])
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Espago
2
+ class ApiConnection
3
+ class SubscriptionsPost < ApiPost
4
+ def request(params = {})
5
+ super("subscriptions", params)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Espago
2
+ class ApiConnection
3
+ class TokensGet < ApiGet
4
+ def request(params = {})
5
+ super("tokens",{},params[:token_id])
6
+ end
7
+ end
8
+ end
9
+ end
@@ -1,13 +1,13 @@
1
1
  module Espago
2
2
  class ApiConnection
3
- class PostTokens
3
+ class TokensPost < ApiPost
4
4
  def initialize(connection)
5
5
  @connection = connection
6
6
  @connection.basic_auth(Espago.public_key, '')
7
7
  end
8
8
 
9
9
  def request(params = {})
10
- @connection.post "tokens", params
10
+ super("tokens", params)
11
11
  end
12
12
  end
13
13
  end
@@ -0,0 +1,33 @@
1
+ require "json"
2
+ require "time"
3
+
4
+ module Espago
5
+ class BackRequest
6
+ attr_reader :params
7
+
8
+ def initialize(params)
9
+ @params = parse(params)
10
+ end
11
+
12
+ def method_missing(attribute_name)
13
+ params[attribute_name.to_s]
14
+ end
15
+
16
+ def card
17
+ params["card"] || {}
18
+ end
19
+
20
+ def created_at
21
+ Time.at(params["created_at"].to_i) rescue nil
22
+ end
23
+
24
+ private
25
+
26
+ def parse(params)
27
+ JSON.parse params
28
+ rescue
29
+ params
30
+ end
31
+ end
32
+ end
33
+
@@ -3,17 +3,17 @@ require "espago/response"
3
3
 
4
4
  module Espago
5
5
  class Client
6
- attr_accessor :public_key, :app_id, :app_password, :production
6
+ attr_accessor :public_key, :app_id, :app_password, :api_version, :production
7
7
  NotAuthenticated = Class.new(StandardError)
8
8
 
9
9
  def initialize(options = {})
10
- @public_key, @app_id, @app_password = options.values_at( :public_key, :app_id, :app_password)
10
+ @public_key, @app_id, @app_password, @api_version = options.values_at( :public_key, :app_id, :app_password, :api_version)
11
11
  @connection = options[:connection] || ApiConnection
12
12
  end
13
13
 
14
14
  def send_request(path, method, params = {})
15
15
  raise NotAuthenticated unless valid?
16
- connection = @connection.new(enviroment)
16
+ connection = @connection.new(enviroment,api_version_header)
17
17
  connection.authenticate(@app_id, @app_password)
18
18
  connection.create(path, method, params)
19
19
  end
@@ -27,6 +27,15 @@ module Espago
27
27
  production ? "https://secure.espago.com/api" : "https://sandbox.espago.com/api"
28
28
  end
29
29
 
30
+ def api_version_header
31
+ if @api_version.to_s == '3'
32
+ {'Accept' => "application/vnd.espago.v3+json"}
33
+ else
34
+ {'Accept' => "application/vnd.espago.v2+json"}
35
+ end
36
+ end
37
+
38
+
30
39
  def valid?
31
40
  @app_id && @app_password
32
41
  end
@@ -27,7 +27,7 @@ module Espago
27
27
  end
28
28
 
29
29
  def get_class_name
30
- method.to_s.capitalize + path.to_s.split("_").map(&:capitalize).join
30
+ path.to_s.split("_").map(&:capitalize).join + method.to_s.capitalize
31
31
  end
32
32
  end
33
33
  end
@@ -1,3 +1,3 @@
1
1
  module Espago
2
- VERSION = "0.0.9"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -4,7 +4,7 @@ require "json"
4
4
 
5
5
  class StubbedResponse < Struct.new(:body, :status); end
6
6
 
7
- class Espago::ApiConnection::StubbedPath
7
+ class Espago::ApiConnection::PathStubbed
8
8
  def initialize(connection); end
9
9
 
10
10
  def request(params = {})
@@ -12,7 +12,7 @@ class Espago::ApiConnection::StubbedPath
12
12
  end
13
13
  end
14
14
 
15
- class Espago::ApiConnection::UnauthorizedPath
15
+ class Espago::ApiConnection::PathUnauthorized
16
16
  def initialize(connection)
17
17
  end
18
18
 
@@ -21,8 +21,9 @@ class Espago::ApiConnection::UnauthorizedPath
21
21
  end
22
22
  end
23
23
 
24
+
24
25
  describe Espago::ApiConnection do
25
- subject { Espago::ApiConnection.new("http://some.api.example.com") }
26
+ subject { Espago::ApiConnection.new("http://some.api.example.com",{'Accept' => "application/vnd.espago.v2+json"}) }
26
27
 
27
28
  context "#create" do
28
29
  it "returns response" do
@@ -0,0 +1,33 @@
1
+ require "spec_helper"
2
+ require "espago/back_request"
3
+ require "json"
4
+
5
+
6
+ describe Espago::BackRequest do
7
+ subject { Espago::BackRequest.new(response)}
8
+ let(:response) {
9
+ {"id"=>"in_tUCMhwlg2nkvAaL",
10
+ "date"=>"1417030496",
11
+ "client"=>"cli_90Pi6Jf0ndl_PP",
12
+ "subscription"=>"sub_8yYuCBKdywr7e2",
13
+ "amount"=>"123.45",
14
+ "currency"=>"pln",
15
+ "paid"=>"true",
16
+ "issuer_response_code"=>"00",
17
+ "attempts"=>"1",
18
+ "next_payment_attempt"=>"",
19
+ "created_at"=>1417030497
20
+ }
21
+ }
22
+
23
+ its(:id) { should eq("in_tUCMhwlg2nkvAaL") }
24
+ its(:subscription) { should eq("sub_8yYuCBKdywr7e2") }
25
+ its(:amount) { should eq("123.45") }
26
+ its(:currency) { should eq("pln") }
27
+ its(:paid) { should eq("true") }
28
+ its(:client) { should eq("cli_90Pi6Jf0ndl_PP") }
29
+ its(:created_at) { should eq(Time.at(1417030497)) }
30
+ its(:card) { should eq({}) }
31
+ its(:imaginated_attribute) { should be_nil }
32
+
33
+ end
@@ -3,7 +3,7 @@ require 'espago/client'
3
3
  require "helpers/fake_response"
4
4
 
5
5
  class StubbedApiConnection
6
- def initialize(enviroment); end
6
+ def initialize(enviroment,headers); end
7
7
  def authenticate(app_id, app_password); end
8
8
  def create(path, method, params= {})
9
9
  'returned api data'
@@ -11,13 +11,14 @@ class StubbedApiConnection
11
11
  end
12
12
 
13
13
  describe Espago::Client do
14
- subject { Espago::Client.new( app_id: 'App12345', app_password: 'secret', connection: stubbed_api_connection) }
14
+ subject { Espago::Client.new( app_id: 'app_id_test', app_password: 'secret', connection: stubbed_api_connection, api_version: 2) }
15
15
  let(:stubbed_api_connection) { StubbedApiConnection }
16
16
  let(:response) { FakeResponse.new(200, {id: 1, status: "2012"}.to_json) }
17
17
 
18
18
  it { subject.should respond_to :app_id }
19
19
  it { subject.should respond_to :app_password }
20
20
  it { subject.should respond_to :public_key }
21
+ it { subject.should respond_to :api_version }
21
22
 
22
23
  context "#send_request" do
23
24
  let(:method) { :get }
@@ -1,7 +1,7 @@
1
1
  require "spec_helper"
2
2
  require "espago/router"
3
3
 
4
- class Espago::ApiConnection::GetStubbedRequest; end
4
+ class Espago::ApiConnection::StubbedRequestGet; end
5
5
 
6
6
  describe Espago::Router do
7
7
  subject { Espago::Router.new(:stubbed_request, :get) }
@@ -11,7 +11,7 @@ describe Espago::Router do
11
11
 
12
12
  context "#route" do
13
13
  it "should get a class name depending on path and method" do
14
- subject.route.should eq( Espago::ApiConnection::GetStubbedRequest )
14
+ subject.route.should eq( Espago::ApiConnection::StubbedRequestGet )
15
15
  end
16
16
 
17
17
  it "should raise error if class not found" do
@@ -0,0 +1,21 @@
1
+ require "spec_helper"
2
+
3
+ describe 'Two api headers test' do
4
+
5
+ it "API v.2" do
6
+ Espago.api_version = '2'
7
+ VCR.use_cassette('api 2') do
8
+ response = Espago.charges :get
9
+ response.count.should eq(596)
10
+ end
11
+ end
12
+
13
+ it "API v.3" do
14
+ Espago.api_version = '3'
15
+ VCR.use_cassette('api 3') do
16
+ response = Espago.charges :get
17
+ response.count.should eq(596)
18
+ end
19
+ end
20
+
21
+ end