tarpon 0.3.1 → 0.5.0

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
2
  SHA256:
3
- metadata.gz: 26bbc91ee368037baee3d85fa6271832140444241e8569fb43b053aa9051a56a
4
- data.tar.gz: b8d8565264058d8c01df8409264560d44f739f2560a0ecdc39539cea99dfd363
3
+ metadata.gz: 8d6acb3ebc1ea690eba860bd056c0de1e1bd225d82d27996c281415e82e8deca
4
+ data.tar.gz: e350303887989f6dd361e6d8a4517dc421be6ca29589120f677980b4ba046b20
5
5
  SHA512:
6
- metadata.gz: 06d81dc83b4a9e21b88a8cd6ccb5740229724d0598cc00a0dd167058a2f14ceb9362ca730c6e0d178d79ac7c19b197da18e6c2406895b9b408c2f0a3368bfbee
7
- data.tar.gz: 210bbeb7e75b62847d3444862a7a64b8cf81d9f3c47145a93fe71f609ebc3581bf37d160a233f64d054f1cbd15a814026492f74bdae787b99ea4a4a90c877fd1
6
+ metadata.gz: 542d5d0781ff979ce7c51c5df96e54afe89830aa8f1570dc76b6326c7cd07519764d4d95b197cc66a6c9de1504093dcfe6819a89c3c97a3c011f3341da42d6e1
7
+ data.tar.gz: 79d50fa993c8d48c648bc81a7d9ef793278459445095b6703019d97dc8269d956afd073e15e7b8553303fe297672ec8b0e4cd3053fd5ec1993fce29e6bc3c754
data/lib/tarpon/client.rb CHANGED
@@ -1,19 +1,33 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'forwardable'
3
4
  require 'tarpon/configuration'
4
5
 
5
6
  module Tarpon
6
7
  class Client
7
- extend Configuration
8
+ include Configuration
9
+
10
+ def self.default
11
+ @default ||= new
12
+ end
13
+
14
+ def initialize(**config, &block)
15
+ config.each { |key, val| public_send("#{key}=", val) }
16
+ yield self if block
17
+ end
8
18
 
9
19
  class << self
10
- def subscriber(app_user_id)
11
- Request::Subscriber.new(app_user_id: app_user_id)
12
- end
20
+ extend Forwardable
21
+ def_delegators :default, *Configuration.public_instance_methods(true)
22
+ def_delegators :default, :subscriber, :receipt
23
+ end
24
+
25
+ def subscriber(app_user_id)
26
+ Request::Subscriber.new(app_user_id: app_user_id, client: self)
27
+ end
13
28
 
14
- def receipt
15
- Request::Receipt.new
16
- end
29
+ def receipt
30
+ Request::Receipt.new(client: self)
17
31
  end
18
32
  end
19
33
  end
@@ -3,7 +3,7 @@
3
3
  module Tarpon
4
4
  module Configuration
5
5
  attr_accessor :public_api_key, :secret_api_key
6
- attr_writer :base_uri, :timeout
6
+ attr_writer :base_uri, :timeout, :http_middleware
7
7
 
8
8
  def configure
9
9
  yield self
@@ -16,5 +16,9 @@ module Tarpon
16
16
  def timeout
17
17
  @timeout || 5
18
18
  end
19
+
20
+ def http_middleware
21
+ @http_middleware ||= ->(http_client) { http_client }
22
+ end
19
23
  end
20
24
  end
@@ -17,8 +17,8 @@ module Tarpon
17
17
  @entitlements.select(&:active?)
18
18
  end
19
19
 
20
- def each
21
- @entitlements.each { |e| yield e }
20
+ def each(&block)
21
+ @entitlements.each(&block)
22
22
  end
23
23
  end
24
24
  end
@@ -12,12 +12,12 @@ module Tarpon
12
12
  def initialize(current_offering_id:, offerings:, **)
13
13
  @current_offering_id = current_offering_id
14
14
  @offerings = offerings.each_with_object({}) do |offering, map|
15
- map[offering[:identifier].to_sym] = Tarpon::Entity::Offering.new(offering)
15
+ map[offering[:identifier].to_sym] = Tarpon::Entity::Offering.new(**offering)
16
16
  end
17
17
  end
18
18
 
19
- def each
20
- @offerings.each { |o| yield o }
19
+ def each(&block)
20
+ @offerings.each(&block)
21
21
  end
22
22
 
23
23
  def [](identifier)
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'http'
4
+ require 'tarpon/client'
4
5
 
5
6
  module Tarpon
6
7
  module Request
@@ -10,15 +11,20 @@ module Tarpon
10
11
  content_type: 'application/json'
11
12
  }.freeze
12
13
 
14
+ def initialize(client: Client.default)
15
+ @client = client
16
+ end
17
+
13
18
  protected
14
19
 
15
20
  def perform(method:, path:, key:, headers: {}, body: nil)
16
21
  HTTP
17
- .timeout(Client.timeout)
22
+ .timeout(@client.timeout)
23
+ .then { |http_client| @client.http_middleware.call(http_client) }
18
24
  .auth("Bearer #{api_key(key)}")
19
25
  .headers(headers.merge(DEFAULT_HEADERS))
20
- .send(method, "#{Client.base_uri}#{path}", json: body&.compact)
21
- .yield_self { |http_response| handle_response(http_response) }
26
+ .send(method, "#{@client.base_uri}#{path}", json: body&.compact)
27
+ .then { |http_response| handle_response(http_response) }
22
28
  rescue HTTP::TimeoutError => e
23
29
  raise Tarpon::TimeoutError, e
24
30
  end
@@ -26,7 +32,7 @@ module Tarpon
26
32
  private
27
33
 
28
34
  def api_key(type)
29
- Client.send("#{type}_api_key")
35
+ @client.send("#{type}_api_key")
30
36
  end
31
37
 
32
38
  def parse_body(http_response)
@@ -4,7 +4,8 @@ module Tarpon
4
4
  module Request
5
5
  class Subscriber
6
6
  class Entitlement < Base
7
- def initialize(subscriber_path:, entitlement_identifier:)
7
+ def initialize(subscriber_path:, entitlement_identifier:, **opts)
8
+ super(**opts)
8
9
  @subscriber_path = subscriber_path
9
10
  @entitlement_identifier = entitlement_identifier
10
11
  end
@@ -6,7 +6,8 @@ module Tarpon
6
6
  module Request
7
7
  class Subscriber
8
8
  class Offering < Base
9
- def initialize(subscriber_path:)
9
+ def initialize(subscriber_path:, **opts)
10
+ super(**opts)
10
11
  @subscriber_path = subscriber_path
11
12
  end
12
13
 
@@ -14,7 +15,7 @@ module Tarpon
14
15
  response = perform(method: :get, path: path.to_s, headers: { 'x-platform': platform.to_s }, key: :public)
15
16
  return response unless response.success?
16
17
 
17
- Tarpon::Entity::Offerings.new(response.raw)
18
+ Tarpon::Entity::Offerings.new(**response.raw)
18
19
  end
19
20
 
20
21
  private
@@ -4,7 +4,8 @@ module Tarpon
4
4
  module Request
5
5
  class Subscriber
6
6
  class Subscription < Base
7
- def initialize(subscriber_path:, product_id:)
7
+ def initialize(subscriber_path:, product_id:, **opts)
8
+ super(**opts)
8
9
  @subscriber_path = subscriber_path
9
10
  @product_id = product_id
10
11
  end
@@ -3,30 +3,33 @@
3
3
  module Tarpon
4
4
  module Request
5
5
  class Subscriber < Base
6
- def initialize(app_user_id:)
6
+ def initialize(app_user_id:, **opts)
7
+ super(**opts)
7
8
  @app_user_id = app_user_id
8
9
  end
9
10
 
10
- # rubocop:disable Naming/AccessorMethodName
11
- def get_or_create
11
+ def get_or_create # rubocop:disable Naming/AccessorMethodName
12
12
  perform(method: :get, path: path, key: :public)
13
13
  end
14
- # rubocop:enable Naming/AccessorMethodName
15
14
 
16
15
  def delete
17
16
  perform(method: :delete, path: path, key: :secret)
18
17
  end
19
18
 
20
19
  def entitlements(entitlement_identifier)
21
- self.class::Entitlement.new(subscriber_path: path, entitlement_identifier: entitlement_identifier)
20
+ self.class::Entitlement.new(
21
+ subscriber_path: path,
22
+ entitlement_identifier: entitlement_identifier,
23
+ client: @client
24
+ )
22
25
  end
23
26
 
24
27
  def offerings
25
- self.class::Offering.new(subscriber_path: path)
28
+ self.class::Offering.new(subscriber_path: path, client: @client)
26
29
  end
27
30
 
28
31
  def subscriptions(product_id)
29
- self.class::Subscription.new(subscriber_path: path, product_id: product_id)
32
+ self.class::Subscription.new(subscriber_path: path, product_id: product_id, client: @client)
30
33
  end
31
34
 
32
35
  private
@@ -7,7 +7,7 @@ module Tarpon
7
7
  def initialize(status, attributes)
8
8
  @status = status
9
9
  @raw = attributes
10
- @subscriber = @raw[:subscriber].nil? ? nil : Entity::Subscriber.new(@raw[:subscriber])
10
+ @subscriber = @raw[:subscriber] && Entity::Subscriber.new(@raw[:subscriber])
11
11
  end
12
12
 
13
13
  def message
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Tarpon
4
- VERSION = '0.3.1'
4
+ VERSION = '0.5.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tarpon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Belo
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-08 00:00:00.000000000 Z
11
+ date: 2022-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -16,98 +16,84 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '4.3'
19
+ version: '4.4'
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
- version: '4.3'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '2.0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '2.0'
26
+ version: '4.4'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: factory_bot
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: '5.1'
33
+ version: '6.2'
48
34
  type: :development
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
38
  - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: '5.1'
40
+ version: '6.2'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rake
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - "~>"
60
46
  - !ruby/object:Gem::Version
61
- version: '12.3'
47
+ version: '13.0'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
52
  - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: '12.3'
54
+ version: '13.0'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: rspec
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - "~>"
74
60
  - !ruby/object:Gem::Version
75
- version: '3.0'
61
+ version: '3.11'
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
- version: '3.0'
68
+ version: '3.11'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: rubocop
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: '0.80'
75
+ version: '1.29'
90
76
  type: :development
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
- version: '0.80'
82
+ version: '1.29'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: webmock
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: '3.8'
89
+ version: '3.14'
104
90
  type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
94
  - - "~>"
109
95
  - !ruby/object:Gem::Version
110
- version: '3.8'
96
+ version: '3.14'
111
97
  description: A Ruby interface to RevenueCat REST API
112
98
  email:
113
99
  - igor.belo@fishbrain.com
@@ -139,7 +125,8 @@ metadata:
139
125
  homepage_uri: https://github.com/fishbrain/tarpon
140
126
  source_code_uri: https://github.com/fishbrain/tarpon.git
141
127
  changelog_uri: https://github.com/fishbrain/tarpon/blob/master/CHANGELOG.md
142
- post_install_message:
128
+ rubygems_mfa_required: 'true'
129
+ post_install_message:
143
130
  rdoc_options: []
144
131
  require_paths:
145
132
  - lib
@@ -147,15 +134,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
147
134
  requirements:
148
135
  - - ">="
149
136
  - !ruby/object:Gem::Version
150
- version: '0'
137
+ version: '2.7'
151
138
  required_rubygems_version: !ruby/object:Gem::Requirement
152
139
  requirements:
153
140
  - - ">="
154
141
  - !ruby/object:Gem::Version
155
142
  version: '0'
156
143
  requirements: []
157
- rubygems_version: 3.1.6
158
- signing_key:
144
+ rubygems_version: 3.3.7
145
+ signing_key:
159
146
  specification_version: 4
160
147
  summary: A Ruby interface to RevenueCat REST API
161
148
  test_files: []