spike-ruby 0.0.2 → 0.0.3

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: c606861bc1d70e2f5c0e42de11de7e7daa2a4f36
4
- data.tar.gz: 6d3c03e93876c9d4d06fb13a73cc52409421ff17
3
+ metadata.gz: b3a4e9fb8aad6e8d754bcaf6a888af457423d80d
4
+ data.tar.gz: a87e25103fba6aad2a56ff8dd4e811b552bbaee0
5
5
  SHA512:
6
- metadata.gz: 30104eaebaebc38cca9fa858d600032c3ed364df1a165eb8a81861d949ee1de26372ed7f1512fcd9e6ee6ac9bcf0728bbd5003a07222388a5e0c633e123a9728
7
- data.tar.gz: 549e5500a0ebe44eaf8a0cff66f8357045e6b0eec246994432ea82e0da03fcb13409bdedb6c6084ae609fa914f424d04cc01a3c51af389d201fa0364c04dbe93
6
+ metadata.gz: b33514b2895e64754e1be43906074e006a9073bebc56b19e4b87838563ae9ab0a503abc07c29017d0f37ac3862458ccb45c1d22030d7cd31492529688b0d2b5a
7
+ data.tar.gz: 8192285c61da000a7635eb6e525a9651d81163d292ccbf41e73b596dadcbc0ece4ded294f6d117253dbad7515bf4d6dbc1bfbce90c9efe3e932900d377d47f95
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # spike-ruby
1
+ # spike-ruby ![build status](https://circleci.com/gh/spice-life/spike-ruby.png?style=shield&circle-token=793417d2dc17daaef4dfba6afb6552e4ca4c1023)
2
2
 
3
3
  [SPIKE](https://spike.cc/) API Client for Ruby.
4
4
 
@@ -46,6 +46,15 @@ Or install it yourself as:
46
46
  spike.charge.create(request_parmas, products)
47
47
  ```
48
48
 
49
+ ## Get credit card token
50
+
51
+ ```shell
52
+ $ gem install sinatra
53
+ $ SPIKE_PUBLIC_KEY=pk_xxxxxxx ruby checkoutapp.rb
54
+ ```
55
+
56
+ Access to http://localhost:4567
57
+
49
58
  ## Contributing
50
59
 
51
60
  1. Fork it ( https://github.com/spice-life/spike-ruby/fork )
data/Rakefile CHANGED
@@ -1,2 +1,10 @@
1
1
  require "bundler/gem_tasks"
2
2
 
3
+ require 'rspec/core'
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new(:spec) do |spec|
7
+ spec.pattern = FileList['spec/**/*_spec.rb']
8
+ end
9
+
10
+ task default: "spec"
data/checkoutapp.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'sinatra'
2
+ require 'haml'
3
+
4
+ set :views, settings.root + '/checkoutapp'
5
+
6
+ get '/' do
7
+ fail('missing SPIKE_PUBLIC_KEY env') if ENV['SPIKE_PUBLIC_KEY'].nil? || ENV['SPIKE_PUBLIC_KEY'].empty?
8
+ @public_key = ENV['SPIKE_PUBLIC_KEY']
9
+ haml :index
10
+ end
@@ -0,0 +1,27 @@
1
+ !!!
2
+
3
+ %html
4
+ %body
5
+ %button#customButton submit
6
+
7
+ %script{type: 'text/javascript', src: 'https://checkout.spike.cc/v1/checkout.js'}
8
+
9
+ :javascript
10
+ var handler = SpikeCheckout.configure({
11
+ key: "#{@public_key}",
12
+ token: function(token, args) {
13
+ console.log(token.id);
14
+ }
15
+ });
16
+
17
+
18
+ document.getElementById("customButton").addEventListener("click", function(e) {
19
+ handler.open({
20
+ name: "Sample app for get token",
21
+ amount: 900,
22
+ currency: "JPY",
23
+ guest: true,
24
+ email: "foo@example.com"
25
+ });
26
+ e.preventDefault();
27
+ });
data/circle.yml ADDED
@@ -0,0 +1,3 @@
1
+ machine:
2
+ ruby:
3
+ version: 2.1.0
data/lib/spike.rb CHANGED
@@ -15,13 +15,19 @@ class Spike
15
15
  Spike::Charge.new(self)
16
16
  end
17
17
 
18
+ def get(request_path:)
19
+ c = build_curl(request_path)
20
+ basic_auth(c)
21
+
22
+ c.http_get
23
+
24
+ handle_response(c)
25
+ JSON.parse(c.body_str)
26
+ end
27
+
18
28
  def post(request_path:, request_params:)
19
- c = Curl::Easy.new
20
- c.url = API_URL + request_path
21
- c.http_auth_types = :basic
22
- c.username = @secret_token
23
- c.password = ''
24
- c.verbose = true
29
+ c = build_curl(request_path)
30
+ basic_auth(c)
25
31
 
26
32
  curb_post_fields = request_params.map {|k,v| Curl::PostField.content(k,v)}
27
33
  c.http_post(c.url, *curb_post_fields)
@@ -31,11 +37,23 @@ class Spike
31
37
  end
32
38
 
33
39
  private
40
+ def build_curl(request_path)
41
+ c = Curl::Easy.new
42
+ c.url = API_URL + request_path
43
+ c.verbose = true
44
+ c
45
+ end
46
+
47
+ def basic_auth(curl)
48
+ curl.http_auth_types = :basic
49
+ curl.username = @secret_token
50
+ curl.password = ''
51
+ end
34
52
 
35
53
  def handle_response(curl)
36
54
  case curl.status.to_i
37
55
  when 400
38
- raise Spike::BadRequestError
56
+ raise Spike::BadRequestError, JSON.parse(curl.body_str)['error']['message']
39
57
  when 401
40
58
  raise Spike::UnauthorizedError
41
59
  when 402
data/lib/spike/charge.rb CHANGED
@@ -11,6 +11,11 @@ class Spike
11
11
  Spike::Charge::Response.new(res)
12
12
  end
13
13
 
14
+ def retrieve(charge_id)
15
+ res = @client.get(request_path: "/charges/#{charge_id}")
16
+ Spike::Charge::Response.new(res)
17
+ end
18
+
14
19
  class Spike::Charge::Response
15
20
  def initialize(hash)
16
21
  @attributes = Hash[hash.map{|k,v| [k.to_s, v] }]
data/lib/spike/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Spike
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,14 @@
1
+ require 'bundler'
2
+ Bundler.require(:default, :development)
3
+
1
4
  require 'spike'
2
5
 
6
+ VCR.configure do |c|
7
+ c.cassette_library_dir = 'spec/vcr'
8
+ c.hook_into :webmock
9
+ c.allow_http_connections_when_no_cassette = true
10
+ end
11
+
3
12
  RSpec.configure do |config|
4
13
  config.order = "random"
5
14
  end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spike::Charge do
4
+ let(:secret_api_key) { 'sk_test_Lkg0iMrN5x02S7e4WVE5FgTj' }
5
+
6
+ describe 'create new charge' do
7
+ let(:token) { 'tok_rNUiMLP32pYQkpe2PqYAUuHK' }
8
+ let(:products) { [{title: '商品', description: '商品説明', language: 'JA', price: 900, currency: 'JPY', count: 1, id: '00001', stock: 10}]}
9
+ let(:request_params) { { amount: 900, currency: 'JPY', card: token } }
10
+
11
+ subject do
12
+ res = nil
13
+ VCR.use_cassette 'lib/spike_create_charge' do
14
+ res = Spike.new(secret_api_key).charge.create(request_params, products)
15
+ end
16
+ res
17
+ end
18
+
19
+ it { expect(subject.object).to eq 'charge' }
20
+ it { expect(subject).to_not be_live_mode }
21
+ it { expect(subject).to be_paid }
22
+ it { expect(subject).to be_captured }
23
+ it { expect(subject.amount).to eq 900.0 }
24
+ it { expect(subject.currency).to eq 'JPY' }
25
+ it { expect(subject).to_not be_refunded }
26
+ it { expect(subject.amount_refunded).to be_nil }
27
+ it { expect(subject.refunds).to be_empty }
28
+ end
29
+
30
+ describe 'get charge' do
31
+ subject do
32
+ res = nil
33
+ VCR.use_cassette 'lib/spike_get_charge' do
34
+ res = Spike.new(secret_api_key).charge.retrieve("20141007-113905-mj7atv4rkg")
35
+ end
36
+ end
37
+
38
+ it { expect(subject.object).to eq 'charge' }
39
+ it { expect(subject).to_not be_live_mode }
40
+ it { expect(subject).to be_paid }
41
+ it { expect(subject).to be_captured }
42
+ it { expect(subject.amount).to eq 900.0 }
43
+ it { expect(subject.currency).to eq 'JPY' }
44
+ it { expect(subject).to_not be_refunded }
45
+ it { expect(subject.amount_refunded).to be_nil }
46
+ it { expect(subject.refunds).to be_empty }
47
+ end
48
+ end
@@ -0,0 +1,40 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://sk_test_Lkg0iMrN5x02S7e4WVE5FgTj:@api.spike.cc/v1/charges
6
+ body:
7
+ encoding: UTF-8
8
+ string: https://api.spike.cc/v1/charges&amount=900&currency=JPY&card=tok_rNUiMLP32pYQkpe2PqYAUuHK&products=%5B%7B%22title%22%3A%22%E5%95%86%E5%93%81%22%2C%22description%22%3A%22%E5%95%86%E5%93%81%E8%AA%AC%E6%98%8E%22%2C%22language%22%3A%22JA%22%2C%22price%22%3A900%2C%22currency%22%3A%22JPY%22%2C%22count%22%3A1%2C%22id%22%3A%2200001%22%2C%22stock%22%3A10%7D%5D
9
+ headers: {}
10
+ response:
11
+ status:
12
+ code: 201
13
+ message: Created
14
+ headers:
15
+ Cache-Control:
16
+ - max-age=0, private, must-revalidate
17
+ Content-Type:
18
+ - application/json
19
+ Date:
20
+ - Tue, 07 Oct 2014 11:39:05 GMT
21
+ Etag:
22
+ - '"20f59ea808e5712eb3dcf1378658c6c6"'
23
+ Server:
24
+ - nginx
25
+ Status:
26
+ - 201 Created
27
+ X-Request-Id:
28
+ - ebc65445-26b6-439d-a0db-f84b2013dec0
29
+ X-Runtime:
30
+ - '0.249048'
31
+ Content-Length:
32
+ - '392'
33
+ Connection:
34
+ - keep-alive
35
+ body:
36
+ encoding: ASCII-8BIT
37
+ string: '{"id":"20141007-113905-mj7atv4rkg","object":"charge","created":1412681945,"livemode":false,"paid":true,"amount":"900.0","currency":"JPY","refunded":false,"card":{},"captured":true,"refunds":[],"balance_transaction":"","failure_message":null,"failure_code":null,"amount_refunded":null,"customer":null,"invoice":null,"description":null,"dispute":null,"metadata":{},"statement_description":null}'
38
+ http_version:
39
+ recorded_at: Tue, 07 Oct 2014 11:39:05 GMT
40
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,40 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://sk_test_Lkg0iMrN5x02S7e4WVE5FgTj:@api.spike.cc/v1/charges/20141007-113905-mj7atv4rkg
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers: {}
10
+ response:
11
+ status:
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ Cache-Control:
16
+ - max-age=0, private, must-revalidate
17
+ Content-Type:
18
+ - application/json
19
+ Date:
20
+ - Tue, 07 Oct 2014 12:10:04 GMT
21
+ Etag:
22
+ - '"20f59ea808e5712eb3dcf1378658c6c6"'
23
+ Server:
24
+ - nginx
25
+ Status:
26
+ - 200 OK
27
+ X-Request-Id:
28
+ - b1783930-6a6a-4b04-8f1a-6132e74bb014
29
+ X-Runtime:
30
+ - '0.024541'
31
+ Content-Length:
32
+ - '392'
33
+ Connection:
34
+ - keep-alive
35
+ body:
36
+ encoding: ASCII-8BIT
37
+ string: '{"id":"20141007-113905-mj7atv4rkg","object":"charge","created":1412681945,"livemode":false,"paid":true,"amount":"900.0","currency":"JPY","refunded":false,"card":{},"captured":true,"refunds":[],"balance_transaction":"","failure_message":null,"failure_code":null,"amount_refunded":null,"customer":null,"invoice":null,"description":null,"dispute":null,"metadata":{},"statement_description":null}'
38
+ http_version:
39
+ recorded_at: Tue, 07 Oct 2014 12:10:04 GMT
40
+ recorded_with: VCR 2.9.3
data/spike-ruby.gemspec CHANGED
@@ -20,9 +20,11 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.required_ruby_version = ">=2.0.0"
22
22
 
23
- spec.add_development_dependency "bundler", "~> 1.7"
23
+ spec.add_development_dependency "bundler", ">= 1.0.0"
24
24
  spec.add_development_dependency "rake", "~> 10.0"
25
- spec.add_development_dependency "rspec"
25
+ spec.add_development_dependency "rspec", ">= 3.0.0"
26
+ spec.add_development_dependency "webmock"
27
+ spec.add_development_dependency "vcr"
26
28
 
27
- spec.add_dependency "curb"
29
+ spec.add_dependency "curb", "~> 0.8.6"
28
30
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spike-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - AKAMATSU Yuki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-22 00:00:00.000000000 Z
11
+ date: 2014-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
19
+ version: 1.0.0
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.7'
26
+ version: 1.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -40,6 +40,20 @@ dependencies:
40
40
  version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 3.0.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 3.0.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: webmock
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - ">="
@@ -53,19 +67,33 @@ dependencies:
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
- name: curb
70
+ name: vcr
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - ">="
60
74
  - !ruby/object:Gem::Version
61
75
  version: '0'
62
- type: :runtime
76
+ type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - ">="
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: curb
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.8.6
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.8.6
69
97
  description: Ruby library for SPIKE API
70
98
  email:
71
99
  - y.akamatsu@ukstudio.jp
@@ -79,11 +107,17 @@ files:
79
107
  - LICENSE.txt
80
108
  - README.md
81
109
  - Rakefile
110
+ - checkoutapp.rb
111
+ - checkoutapp/index.haml
112
+ - circle.yml
82
113
  - lib/spike.rb
83
114
  - lib/spike/charge.rb
84
115
  - lib/spike/error.rb
85
116
  - lib/spike/version.rb
86
117
  - spec/spec_helper.rb
118
+ - spec/spike_spec.rb
119
+ - spec/vcr/lib/spike_create_charge.yml
120
+ - spec/vcr/lib/spike_get_charge.yml
87
121
  - spike-ruby.gemspec
88
122
  homepage: http://github.com/spice-life/spike-ruby
89
123
  licenses:
@@ -111,3 +145,6 @@ specification_version: 4
111
145
  summary: Ruby library for SPIKE API
112
146
  test_files:
113
147
  - spec/spec_helper.rb
148
+ - spec/spike_spec.rb
149
+ - spec/vcr/lib/spike_create_charge.yml
150
+ - spec/vcr/lib/spike_get_charge.yml