payjp 0.0.6 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: ebc7ca3b834edcac9e21591f4276ab0565f2737b
4
- data.tar.gz: a33c549105cf8879e36f2138b2c25c354e470960
2
+ SHA256:
3
+ metadata.gz: e56a8b6072c8f7bf70ae67ddf6e4d2650bae25abf2d0f7ad73292a6d8849ba5e
4
+ data.tar.gz: 964b24363b6ea92c347e87579c14480952a6f4722bc01113facd4f31a2ee3cd2
5
5
  SHA512:
6
- metadata.gz: 3eee26dfe4f02da8e58681cfa911e0366684d2331ef277ce42ef9f1b639026799b1a155897c6612301e106d0ace91757350ff123060e57fb799fb6a4fbf46d43
7
- data.tar.gz: baa39ffbea0e3be47a2dfcc6b671461ecfef2f57f299fa09ac78f126cfd5ee98b4f963ae4562255616c810753a4ece35e7302aeaf33a440259d6b7a1ad31ef10
6
+ metadata.gz: b8e03295fe9396b884ae2998a5f05d99070812425fda873550920dcf8a3d7824077175820ee86f5a050171a6925b6f676d42d0310b46eace7eef921c3589f594
7
+ data.tar.gz: e457443ea5beca2294f37b524578fcd4ba2a79470c82fe822eb1195527db0dfd30851041f80ae5206880f3b39cfc9a3b1e4c33ecb5ab634f34afa5db26f58dc8
@@ -0,0 +1,20 @@
1
+ name: Ruby Build Test
2
+
3
+ on: push
4
+
5
+ jobs:
6
+ build-test:
7
+
8
+ runs-on: ubuntu-latest
9
+ strategy:
10
+ matrix:
11
+ ruby-version: [2.0.0, 2.1, 2.2, 2.3.0, 2.7.0, jruby-9.2.17.0]
12
+ steps:
13
+ - uses: actions/checkout@v2
14
+ - name: Set up Ruby ${{ matrix.ruby-version }}
15
+ uses: ruby/setup-ruby@v1
16
+ with:
17
+ ruby-version: ${{ matrix.ruby-version }}
18
+ bundler-cache: true
19
+ - name: Run tests
20
+ run: bundle exec rake
data/README.md ADDED
@@ -0,0 +1,87 @@
1
+ # PAY.JP for Ruby
2
+
3
+ ## How to Use
4
+
5
+ ```ruby
6
+ require 'payjp'
7
+ Payjp.api_key = 'sk_test_c62fade9d045b54cd76d7036'
8
+ Payjp.open_timeout = 30 # optionally
9
+ Payjp.read_timeout = 90 # optionally
10
+
11
+ # ex, create charge
12
+ charge = Payjp::Charge.create(
13
+ :amount => 3500,
14
+ :card => 'token_id',
15
+ :currency => 'jpy',
16
+ )
17
+ ```
18
+
19
+ | `Payjp` variables | type | required | description |
20
+ | ----------------- | ---- | -------- | ----------- |
21
+ | api_key | String | yes | your secret key |
22
+ | open_timeout | Integer | no | the second to wait for TCP connection opening (default 30) |
23
+ | read_timeout | Integer | no | the second to wait from request to reading response (default 90) |
24
+
25
+ For detail, See [PAY.JP API Docs](https://pay.jp/docs/api/)
26
+
27
+ ## Installation
28
+
29
+ ```sh
30
+ gem install payjp
31
+ ```
32
+
33
+ If you want to build the gem from source:
34
+
35
+ ```sh
36
+ gem build payjp.gemspec
37
+ ```
38
+
39
+ ### Requirements
40
+
41
+ * Ruby 2.0.0 or above.
42
+ * rest-client
43
+
44
+ ### Retry on HTTP Status Code 429
45
+ * See [Rate Limit Guideline](https://pay.jp/docs/guideline-rate-limit#2-%E3%83%AA%E3%83%88%E3%83%A9%E3%82%A4)
46
+ * When you exceeded rate-limit, you can retry request by setting `max_retry`
47
+ like `Payjp.max_retry = 3` .
48
+ * The retry interval base value is `retry_initial_delay`
49
+ Adjust the value like `Payjp.retry_initial_delay = 4`
50
+ The smaller is shorter.
51
+ * The Maximum retry time is `retry_max_delay`.
52
+ Adjust the value like 'Payjp.retry_max_delay = 32'
53
+ * The retry interval calcurating is based on "Exponential backoff with equal jitter" algorithm.
54
+ See https://aws.amazon.com/jp/blogs/architecture/exponential-backoff-and-jitter/
55
+
56
+ how to use
57
+
58
+ ```ruby
59
+ require 'payjp'
60
+ Payjp.api_key = 'sk_test_c62fade9d045b54cd76d7036'
61
+ Payjp.max_retry = 3
62
+ Payjp.retry_initial_delay = 2
63
+ Payjp.retry_max_delay = 32
64
+
65
+ charge = Payjp::Charge.create(
66
+ :amount => 3500,
67
+ :card => 'token_id',
68
+ :currency => 'jpy',
69
+ )
70
+ ```
71
+
72
+ ### Bundler
73
+
74
+ If you are installing via bundler, you should be sure to use the https
75
+ rubygems source in your Gemfile, as any gems fetched over http could potentially be
76
+ compromised in transit and alter the code of gems fetched securely over https:
77
+
78
+ ```
79
+ source 'https://rubygems.org'
80
+
81
+ gem 'rails'
82
+ gem 'payjp'
83
+ ```
84
+
85
+ ## Development
86
+
87
+ Test cases can be run with: `bundle exec rake test`
@@ -0,0 +1,19 @@
1
+ module Payjp
2
+ class Tenant < APIResource
3
+ include Payjp::APIOperations::Create
4
+ include Payjp::APIOperations::Delete
5
+ include Payjp::APIOperations::Update
6
+ include Payjp::APIOperations::List
7
+
8
+ def create_application_urls(params = {}, opts = {})
9
+ response, opts = request(:post, create_application_urls_url, params, opts)
10
+ response
11
+ end
12
+
13
+ private
14
+
15
+ def create_application_urls_url
16
+ url + '/application_urls'
17
+ end
18
+ end
19
+ end
data/lib/payjp/util.rb CHANGED
@@ -25,6 +25,7 @@ module Payjp
25
25
  'card' => Card,
26
26
  'charge' => Charge,
27
27
  'customer' => Customer,
28
+ 'tenant' => Tenant,
28
29
  'event' => Event,
29
30
  'plan' => Plan,
30
31
  'subscription' => Subscription,
data/lib/payjp/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Payjp
2
- VERSION = '0.0.6'
2
+ VERSION = '0.0.9'
3
3
  end
data/lib/payjp.rb CHANGED
@@ -34,6 +34,7 @@ require 'payjp/event'
34
34
  require 'payjp/transfer'
35
35
  require 'payjp/card'
36
36
  require 'payjp/subscription'
37
+ require 'payjp/tenant'
37
38
 
38
39
  # Errors
39
40
  require 'payjp/errors/payjp_error'
@@ -46,27 +47,43 @@ require 'payjp/errors/authentication_error'
46
47
  module Payjp
47
48
  @api_base = 'https://api.pay.jp'
48
49
  @open_timeout = 30
49
- @read_timeout = 80
50
+ @read_timeout = 90
50
51
  @ssl_ca_file = nil
51
52
  @ssl_ca_path = nil
52
53
  @ssl_cert_store = nil
54
+ @max_retry = 0
55
+ @retry_initial_delay = 2
56
+ @retry_max_delay = 32
53
57
 
54
58
  class << self
55
59
  attr_accessor :api_key, :api_base, :api_version, :connect_base, :uploads_base,
56
- :open_timeout, :read_timeout, :ssl_ca_file, :ssl_ca_path, :ssl_cert_store
60
+ :open_timeout, :read_timeout, :ssl_ca_file, :ssl_ca_path, :ssl_cert_store, :max_retry, :retry_initial_delay, :retry_max_delay
57
61
  end
58
62
 
59
63
  def self.api_url(url = '', api_base_url = nil)
60
64
  (api_base_url || @api_base) + url
61
65
  end
62
66
 
63
- def self.request(method, url, api_key, params = {}, headers = {}, api_base_url = nil, open_timeout = nil, read_timeout = nil, ssl_ca_file = nil, ssl_ca_path = nil, ssl_cert_store = nil)
67
+ def self.get_retry_delay(retry_count, retry_initial_delay, retry_max_delay)
68
+ # Get retry delay seconds.
69
+ # Based on "Exponential backoff with equal jitter" algorithm.
70
+ # https://aws.amazon.com/jp/blogs/architecture/exponential-backoff-and-jitter/
71
+
72
+ wait = [retry_max_delay, retry_initial_delay * 2 ** retry_count].min
73
+ random = Random.new()
74
+ (wait / 2) + (random.rand(wait / 2.0))
75
+ end
76
+
77
+ def self.request(method, url, api_key, params = {}, headers = {}, api_base_url = nil, open_timeout = nil, read_timeout = nil, ssl_ca_file = nil, ssl_ca_path = nil, ssl_cert_store = nil, max_retry = nil, retry_initial_delay= nil, retry_max_delay = nil)
64
78
  api_base_url ||= @api_base
65
79
  open_timeout ||= @open_timeout
66
80
  read_timeout ||= @read_timeout
67
81
  ssl_ca_file ||= @ssl_ca_file
68
82
  ssl_ca_path ||= @ssl_ca_path
69
83
  ssl_cert_store ||= @ssl_cert_store
84
+ max_retry ||= @max_retry
85
+ retry_initial_delay ||= @retry_initial_delay
86
+ retry_max_delay ||= @retry_max_delay
70
87
 
71
88
  unless api_key ||= @api_key
72
89
  raise AuthenticationError.new('No API key provided. ' \
@@ -107,6 +124,8 @@ module Payjp
107
124
  :ssl_ca_file => ssl_ca_file, :ssl_ca_path => ssl_ca_path,
108
125
  :ssl_cert_store => ssl_cert_store)
109
126
 
127
+ retry_count = 1
128
+
110
129
  begin
111
130
  # $stderr.puts request_opts
112
131
 
@@ -122,6 +141,12 @@ module Payjp
122
141
  raise
123
142
  end
124
143
  rescue RestClient::ExceptionWithResponse => e
144
+ if e.http_code == 429 and retry_count <= max_retry then
145
+ sleep get_retry_delay(retry_count, retry_initial_delay, retry_max_delay)
146
+ retry_count += 1
147
+ retry
148
+ end
149
+
125
150
  if rcode = e.http_code and rbody = e.http_body
126
151
  handle_api_error(rcode, rbody)
127
152
  else
@@ -239,6 +264,8 @@ module Payjp
239
264
  raise authentication_error error, rcode, rbody, error_obj
240
265
  when 402
241
266
  raise card_error error, rcode, rbody, error_obj
267
+ when 429
268
+ raise api_error error, rcode, rbody, error_obj
242
269
  else
243
270
  raise api_error error, rcode, rbody, error_obj
244
271
  end
@@ -266,11 +293,12 @@ module Payjp
266
293
  api_base_url = @api_base unless api_base_url
267
294
  connection_message = "Please check your internet connection and try again. " \
268
295
  "If this problem persists, you should check Payjp's service status at " \
269
- "https://twitter.com/payjpstatus, or let us know at support@pay.jp."
296
+ "https://status.pay.jp or let us know at support@pay.jp."
270
297
 
271
298
  case e
272
299
  when RestClient::RequestTimeout
273
- message = "Could not connect to Payjp (#{api_base_url}). #{connection_message}"
300
+ message = "Timed out over #{@read_timeout} sec. " \
301
+ "Check if your request successed or not."
274
302
 
275
303
  when RestClient::ServerBrokeConnection
276
304
  message = "The connection to the server (#{api_base_url}) broke before the " \
@@ -278,8 +306,7 @@ module Payjp
278
306
 
279
307
  when SocketError
280
308
  message = "Unexpected error communicating when trying to connect to Payjp. " \
281
- "You may be seeing this message because your DNS is not working. " \
282
- "To check, try running 'host pay.jp' from the command line."
309
+ "Your DNS may not work. Check 'host api.pay.jp' from the command line."
283
310
 
284
311
  else
285
312
  message = "Unexpected error communicating with Payjp. " \
data/payjp.gemspec CHANGED
@@ -23,5 +23,8 @@ Gem::Specification.new do |s|
23
23
  s.files = `git ls-files`.split("\n")
24
24
  s.test_files = `git ls-files -- test/*`.split("\n")
25
25
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
26
- s.require_paths = ['lib']
26
+ s.require_paths = ['lib']
27
+ s.metadata = {
28
+ "source_code_uri" => "https://github.com/payjp/payjp-ruby",
29
+ }
27
30
  end
@@ -411,6 +411,25 @@ module Payjp
411
411
 
412
412
  assert_equal true, rescued
413
413
  end
414
+
415
+ should "429s should raise a APIError of over capacity error code" do
416
+ response = test_response(test_over_capacity_error, 429)
417
+ @mock.expects(:get).once.raises(RestClient::ExceptionWithResponse.new(response, 429))
418
+
419
+ rescued = false
420
+ begin
421
+ Payjp::Customer.new("test_customer").refresh
422
+ assert false # shouldn't get here either
423
+ rescue Payjp::APIError => e # we don't use assert_raises because we want to examine e
424
+ rescued = true
425
+ assert e.is_a? Payjp::APIError
426
+ assert_equal(429, e.http_status)
427
+ assert_equal(true, !!e.http_body)
428
+ assert_equal("over_capacity", e.json_body[:error][:code])
429
+ end
430
+
431
+ assert_equal true, rescued
432
+ end
414
433
  end
415
434
 
416
435
  should 'save nothing if nothing changes' do
@@ -442,4 +461,120 @@ module Payjp
442
461
  end
443
462
  end
444
463
  end
464
+
465
+ class APIRequestorRetryTest < Test::Unit::TestCase
466
+
467
+ setup do
468
+ Payjp.max_retry = 0
469
+ Payjp.retry_initial_delay = 0.1
470
+ end
471
+
472
+ def mock_exceptions(error_codes, call_count)
473
+ exception_mock = nil
474
+ error_codes.with_index(1) { |code, id|
475
+ if id == 1
476
+ exception_mock = @mock.expects(:get).raises(RestClient::ExceptionWithResponse.new(test_response(test_api_error, code)))
477
+ else
478
+ exception_mock = exception_mock.then.raises(RestClient::ExceptionWithResponse.new(test_response(test_api_error, code)))
479
+ end
480
+ }
481
+ exception_mock.at_least(call_count)
482
+ end
483
+
484
+ context "checking retry" do
485
+ should "over capacity retry disabled" do
486
+ error_codes = [429, 599].to_enum
487
+ # returns 599 at 2nd try but max_retry 0 then retry disabled
488
+ mock_exceptions(error_codes, 1)
489
+ rescued = false
490
+
491
+ begin
492
+ Payjp::Charge.retrieve("test_charge")
493
+ rescue Payjp::APIError => e # we don't use assert_raises because we want to examine e
494
+ assert e.is_a? Payjp::APIError
495
+ assert_equal(429, e.http_status)
496
+ rescued = true
497
+ end
498
+ assert_equal true, rescued
499
+ end
500
+
501
+ should "no retry" do
502
+ Payjp.max_retry = 2
503
+ Payjp.retry_initial_delay = 0.1
504
+ error_codes = [599, 429, 429, 429].to_enum
505
+ # returns 599 at first try
506
+ mock_exceptions(error_codes, 1)
507
+ rescued = false
508
+
509
+ begin
510
+ Payjp::Charge.retrieve("test_charge")
511
+ rescue Payjp::APIError => e # we don't use assert_raises because we want to examine e
512
+ assert e.is_a? Payjp::APIError
513
+ assert_equal(599, e.http_status)
514
+ assert_equal(true, !!e.http_body)
515
+ rescued = true
516
+ end
517
+ assert_equal true, rescued
518
+ end
519
+
520
+ should "over capacity full retry" do
521
+ Payjp.max_retry = 2
522
+ Payjp.retry_initial_delay = 0.1
523
+ error_codes = [429, 429, 429, 429, 599].to_enum
524
+
525
+ # first try + 2 retries + unexpected 599
526
+ mock_exceptions(error_codes, 3)
527
+ rescued = false
528
+
529
+ begin
530
+ Payjp::Charge.retrieve("test_charge")
531
+ rescue Payjp::APIError => e # we don't use assert_raises because we want to examine e
532
+ assert e.is_a? Payjp::APIError
533
+ assert_equal(429, e.http_status)
534
+ rescued = true
535
+ end
536
+
537
+ assert_equal true, rescued
538
+ end
539
+
540
+ should "over capacity halfway of retries" do
541
+ Payjp.max_retry = 5
542
+ Payjp.retry_initial_delay = 0.1
543
+
544
+ error_codes = [429, 599, 429, 429, 429].to_enum
545
+ rescued = false
546
+
547
+ # returns not 429 status at 2nd try
548
+ mock_exceptions(error_codes, 2)
549
+ begin
550
+ Payjp::Charge.retrieve("test_charge")
551
+ rescue Payjp::APIError => e # we don't use assert_raises because we want to examine e
552
+ assert e.is_a? Payjp::APIError
553
+ assert_equal(599, e.http_status)
554
+ rescued = true
555
+ end
556
+
557
+ assert_equal true, rescued
558
+ end
559
+ end
560
+
561
+ context "retry interval" do
562
+ should "retry initial delay" do
563
+ retry_initial_delay = 2
564
+ retry_max_delay = 32
565
+
566
+ assert_equal(true, Payjp.get_retry_delay(0, retry_initial_delay, retry_max_delay).between?(1, 2))
567
+ assert_equal(true, Payjp.get_retry_delay(1, retry_initial_delay, retry_max_delay).between?(2, 4))
568
+ assert_equal(true, Payjp.get_retry_delay(2, retry_initial_delay, retry_max_delay).between?(4, 8))
569
+ # cap
570
+ assert_equal(true, Payjp.get_retry_delay(4, retry_initial_delay, retry_max_delay).between?(16, 32))
571
+ assert_equal(true, Payjp.get_retry_delay(10, retry_initial_delay, retry_max_delay).between?(16, 32))
572
+ end
573
+ end
574
+
575
+ teardown do
576
+ Payjp.max_retry = 0
577
+ Payjp.retry_initial_delay = 0.1
578
+ end
579
+ end
445
580
  end
@@ -0,0 +1,42 @@
1
+ require File.expand_path('../../test_helper', __FILE__)
2
+
3
+ module Payjp
4
+ class TenantTest < Test::Unit::TestCase
5
+ should "tenants should be listable" do
6
+ @mock.expects(:get).once.returns(test_response(test_tenant_array))
7
+ c = Payjp::Tenant.all.data
8
+ assert c.is_a? Array
9
+ assert c[0].is_a? Payjp::Tenant
10
+ end
11
+
12
+ should "tenants should be deletable" do
13
+ @mock.expects(:delete).once.returns(test_response(test_tenant))
14
+ c = Payjp::Tenant.new("test_tenant")
15
+ c.delete
16
+ end
17
+
18
+ should "tenants should be updateable" do
19
+ @mock.expects(:get).once.returns(test_response(test_tenant({ :name => "foo" })))
20
+ @mock.expects(:post).once.returns(test_response(test_tenant({ :name => "bar" })))
21
+ c = Payjp::Tenant.new("test_tenant").refresh
22
+ assert_equal "foo", c.name
23
+ c.name = "bar"
24
+ c.save
25
+ assert_equal "bar", c.name
26
+ end
27
+
28
+ should "create should return a new tenant" do
29
+ @mock.expects(:post).once.returns(test_response(test_tenant(:id => 'test_tenant1')))
30
+ c = Payjp::Tenant.create(:id => 'test_tenant1')
31
+ assert_equal "test_tenant1", c.id
32
+ end
33
+
34
+ should "create_application_urls should be callable" do
35
+ @mock.expects(:get).never
36
+ @mock.expects(:post).once.returns(test_response({ :object => "application_url", :url => 'https://pay.jp/_/applications/start/c24368137e384aa9xxxxxxxxxxxxxxxx', :expires => 1476676539 }))
37
+ c = Payjp::Tenant.new('test_tenant')
38
+ response = c.create_application_urls()
39
+ assert_equal response[:url], 'https://pay.jp/_/applications/start/c24368137e384aa9xxxxxxxxxxxxxxxx'
40
+ end
41
+ end
42
+ end
data/test/test_data.rb CHANGED
@@ -250,6 +250,35 @@ module Payjp
250
250
  }
251
251
  end
252
252
 
253
+ def test_tenant(params = {})
254
+ {
255
+ :created => 1433127983,
256
+ :name => "test",
257
+ :id => "test",
258
+ :livemode => false,
259
+ :metadata => nil,
260
+ :object => "tenant",
261
+ :platform_fee_rate => "10.15",
262
+ :payjp_fee_included => false,
263
+ :minimum_transfer_amount => 1000,
264
+ :bank_account_number => "0001000",
265
+ :bank_branch_code => "000",
266
+ :bank_code => "0000",
267
+ :bank_account_holder_name => "ヤマダ タロウ",
268
+ :bank_account_type => "普通",
269
+ :bank_account_status => "pending"
270
+ }.merge(params)
271
+ end
272
+
273
+ def test_tenant_array
274
+ {
275
+ :count => 3,
276
+ :data => [test_tenant, test_tenant, test_tenant],
277
+ :object => 'list',
278
+ :url => '/v1/tenants'
279
+ }
280
+ end
281
+
253
282
  def test_invalid_api_key_error
254
283
  {
255
284
  :error => {
@@ -287,5 +316,14 @@ module Payjp
287
316
  }
288
317
  }
289
318
  end
319
+
320
+ def test_over_capacity_error
321
+ {
322
+ :error => {
323
+ :code => "over_capacity",
324
+ :type => "api_error"
325
+ }
326
+ }
327
+ end
290
328
  end
291
329
  end
metadata CHANGED
@@ -1,103 +1,103 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: payjp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - PAY.JP
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-25 00:00:00.000000000 Z
11
+ date: 2022-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '2.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: mocha
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.2.1
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.2.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: activesupport
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - <
45
+ - - "<"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '5.0'
48
- - - ~>
48
+ - - "~>"
49
49
  - !ruby/object:Gem::Version
50
50
  version: 4.2.7
51
51
  type: :development
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
- - - <
55
+ - - "<"
56
56
  - !ruby/object:Gem::Version
57
57
  version: '5.0'
58
- - - ~>
58
+ - - "~>"
59
59
  - !ruby/object:Gem::Version
60
60
  version: 4.2.7
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: test-unit
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - ~>
65
+ - - "~>"
66
66
  - !ruby/object:Gem::Version
67
67
  version: 3.2.2
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - ~>
72
+ - - "~>"
73
73
  - !ruby/object:Gem::Version
74
74
  version: 3.2.2
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: rake
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - ~>
79
+ - - "~>"
80
80
  - !ruby/object:Gem::Version
81
81
  version: 11.3.0
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - ~>
86
+ - - "~>"
87
87
  - !ruby/object:Gem::Version
88
88
  version: 11.3.0
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: bundler
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
- - - '>='
93
+ - - ">="
94
94
  - !ruby/object:Gem::Version
95
95
  version: 1.7.6
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
- - - '>='
100
+ - - ">="
101
101
  - !ruby/object:Gem::Version
102
102
  version: 1.7.6
103
103
  description: PAY.JP makes it way easier and less expensive to accept payments.
@@ -107,15 +107,15 @@ executables: []
107
107
  extensions: []
108
108
  extra_rdoc_files: []
109
109
  files:
110
- - .gitignore
111
- - .rubocop.yml
112
- - .rubocop_todo.yml
113
- - .travis.yml
110
+ - ".github/workflows/test.yml"
111
+ - ".gitignore"
112
+ - ".rubocop.yml"
113
+ - ".rubocop_todo.yml"
114
114
  - CONTRIBUTORS
115
115
  - Gemfile
116
116
  - History.txt
117
117
  - LICENSE
118
- - README.rdoc
118
+ - README.md
119
119
  - Rakefile
120
120
  - lib/payjp.rb
121
121
  - lib/payjp/account.rb
@@ -139,6 +139,7 @@ files:
139
139
  - lib/payjp/payjp_object.rb
140
140
  - lib/payjp/plan.rb
141
141
  - lib/payjp/subscription.rb
142
+ - lib/payjp/tenant.rb
142
143
  - lib/payjp/token.rb
143
144
  - lib/payjp/transfer.rb
144
145
  - lib/payjp/util.rb
@@ -155,6 +156,7 @@ files:
155
156
  - test/payjp/payjp_object_test.rb
156
157
  - test/payjp/plan_test.rb
157
158
  - test/payjp/subscription_test.rb
159
+ - test/payjp/tenant_test.rb
158
160
  - test/payjp/token_test.rb
159
161
  - test/payjp/transfer_test.rb
160
162
  - test/payjp/util_test.rb
@@ -163,24 +165,24 @@ files:
163
165
  homepage: https://pay.jp
164
166
  licenses:
165
167
  - MIT
166
- metadata: {}
168
+ metadata:
169
+ source_code_uri: https://github.com/payjp/payjp-ruby
167
170
  post_install_message:
168
171
  rdoc_options: []
169
172
  require_paths:
170
173
  - lib
171
174
  required_ruby_version: !ruby/object:Gem::Requirement
172
175
  requirements:
173
- - - '>='
176
+ - - ">="
174
177
  - !ruby/object:Gem::Version
175
178
  version: '0'
176
179
  required_rubygems_version: !ruby/object:Gem::Requirement
177
180
  requirements:
178
- - - '>='
181
+ - - ">="
179
182
  - !ruby/object:Gem::Version
180
183
  version: '0'
181
184
  requirements: []
182
- rubyforge_project:
183
- rubygems_version: 2.0.14.1
185
+ rubygems_version: 3.1.6
184
186
  signing_key:
185
187
  specification_version: 4
186
188
  summary: Ruby bindings for the Payjp API
@@ -196,6 +198,7 @@ test_files:
196
198
  - test/payjp/payjp_object_test.rb
197
199
  - test/payjp/plan_test.rb
198
200
  - test/payjp/subscription_test.rb
201
+ - test/payjp/tenant_test.rb
199
202
  - test/payjp/token_test.rb
200
203
  - test/payjp/transfer_test.rb
201
204
  - test/payjp/util_test.rb
data/.travis.yml DELETED
@@ -1,10 +0,0 @@
1
- language: ruby
2
-
3
- rvm:
4
- - 2.0.0
5
- - 2.1
6
- - 2.2
7
- - 2.3.0
8
- - jruby-9.0.5.0
9
-
10
- sudo: false
data/README.rdoc DELETED
@@ -1,37 +0,0 @@
1
- = PAY.JP for Ruby
2
-
3
- == Documentation
4
-
5
- {PAY.JP API Docs}[https://pay.jp/docs/api/]
6
-
7
- == Installation
8
-
9
- You don't need this source code unless you want to modify the gem. If
10
- you just want to use the Payjp Ruby bindings, you should run:
11
-
12
- gem install payjp
13
-
14
- If you want to build the gem from source:
15
-
16
- gem build payjp.gemspec
17
-
18
- == Requirements
19
-
20
- * Ruby 2.0.0 or above.
21
-
22
- * rest-client
23
-
24
- == Bundler
25
-
26
- If you are installing via bundler, you should be sure to use the https
27
- rubygems source in your Gemfile, as any gems fetched over http could potentially be
28
- compromised in transit and alter the code of gems fetched securely over https:
29
-
30
- source 'https://rubygems.org'
31
-
32
- gem 'rails'
33
- gem 'payjp'
34
-
35
- == Development
36
-
37
- Test cases can be run with: `bundle exec rake test`