tarpon 0.3.1 → 0.5.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.
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: []