provider_kit 0.2.0 → 0.2.1
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 +4 -4
- data/lib/provider_kit/attribute.rb +26 -0
- data/lib/provider_kit/capability.rb +15 -2
- data/lib/provider_kit/capable.rb +15 -0
- data/lib/provider_kit/null_provider.rb +10 -0
- data/lib/provider_kit/provideable.rb +1 -16
- data/lib/provider_kit/provider.rb +4 -0
- data/lib/provider_kit/provider_attribute.rb +19 -2
- data/lib/provider_kit/registerable.rb +6 -1
- data/lib/provider_kit/version.rb +1 -1
- data/lib/provider_kit.rb +5 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da3e02d32cafa95d8718676ae02a14be2e79d520b90bee3e10f3b3738b75c507
|
4
|
+
data.tar.gz: 2276650b63b069e3ba4890f171925d903cbe603776355bb6a285194da69a3a83
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1dde2f369723133094c1a28c6220713808a459f94d02f1d39ae681327e57e7cc7b86ad54234e0d09cbc24e9a262f0d729efa051f41b7a2550e489d6b35c6089e
|
7
|
+
data.tar.gz: '0204738efbe20bfa85e55f8ea9a4c48dd145836b822f2c53a047f053b969599486a49c8ce3c2b5f78ab7df905f8461d1e2728858d1da1b25c3326e1e6d025086'
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ProviderKit
|
4
|
+
# serialized attribute for provider
|
5
|
+
module Attribute
|
6
|
+
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
def provider
|
10
|
+
if provider_key.present?
|
11
|
+
@provider ||= ProviderKit::ProviderAttribute.new(provider_key, record: self)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def provider=(value)
|
16
|
+
@provider = nil
|
17
|
+
|
18
|
+
write_attribute(:provider, value.to_s.presence)
|
19
|
+
end
|
20
|
+
|
21
|
+
def provider_key
|
22
|
+
read_attribute(:provider).to_s.presence
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -26,6 +26,15 @@ module ProviderKit
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
+
def respond_to_missing?(method_name, include_private = false)
|
30
|
+
if method_name.to_s.match?(/(.+)\?$/)
|
31
|
+
attribute_name = method_name.to_s.chomp("?")
|
32
|
+
return callable?(attribute_name)
|
33
|
+
end
|
34
|
+
|
35
|
+
callable?(method_name) || super
|
36
|
+
end
|
37
|
+
|
29
38
|
def with_context(provider: @provider, **context)
|
30
39
|
Capability.new(
|
31
40
|
key,
|
@@ -42,8 +51,12 @@ module ProviderKit
|
|
42
51
|
|
43
52
|
def call(method_name, *args, **kwargs)
|
44
53
|
call_target = target
|
45
|
-
return
|
46
|
-
|
54
|
+
return unless call_target
|
55
|
+
|
56
|
+
unless callable?(method_name)
|
57
|
+
raise NoMethodError,
|
58
|
+
"undefined method `#{ method_name }' for instance of #{ @target_klass }"
|
59
|
+
end
|
47
60
|
|
48
61
|
raw_response = call_target.public_send(method_name, *args, **kwargs)
|
49
62
|
|
data/lib/provider_kit/capable.rb
CHANGED
@@ -41,6 +41,13 @@ module ProviderKit
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
+
# Null provider is a placeholder for integrations that do not need a custom provider
|
45
|
+
#
|
46
|
+
# returns true if this is the null provider
|
47
|
+
def null?
|
48
|
+
key == :null
|
49
|
+
end
|
50
|
+
|
44
51
|
def provider_key
|
45
52
|
key
|
46
53
|
end
|
@@ -66,6 +73,14 @@ module ProviderKit
|
|
66
73
|
capability.callable?(method_name)
|
67
74
|
end
|
68
75
|
|
76
|
+
def config
|
77
|
+
provider.config
|
78
|
+
end
|
79
|
+
|
80
|
+
def label
|
81
|
+
config[:name].presence || self.to_s.underscore.humanize
|
82
|
+
end
|
83
|
+
|
69
84
|
def method_missing(method_name, *args, **kwargs)
|
70
85
|
if capable_of?(method_name)
|
71
86
|
perform_capability(method_name, *args, **kwargs)
|
@@ -5,27 +5,12 @@ module ProviderKit
|
|
5
5
|
module Provideable
|
6
6
|
|
7
7
|
extend ActiveSupport::Concern
|
8
|
+
include Attribute
|
8
9
|
|
9
10
|
included do
|
10
11
|
validate :validate_provider_presence
|
11
12
|
end
|
12
13
|
|
13
|
-
def provider
|
14
|
-
if provider_key.present?
|
15
|
-
@provider ||= ProviderKit::ProviderAttribute.new(provider_key, record: self)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def provider=(value)
|
20
|
-
@provider = nil
|
21
|
-
|
22
|
-
write_attribute(:provider, value.to_s.presence)
|
23
|
-
end
|
24
|
-
|
25
|
-
def provider_key
|
26
|
-
read_attribute(:provider).to_s.presence
|
27
|
-
end
|
28
|
-
|
29
14
|
private
|
30
15
|
|
31
16
|
def validate_provider_presence
|
@@ -29,6 +29,10 @@ module ProviderKit
|
|
29
29
|
def provider_instance
|
30
30
|
return nil unless provider
|
31
31
|
|
32
|
+
if provider.class == Module
|
33
|
+
raise "Provider #{ provider } is a module, not a class"
|
34
|
+
end
|
35
|
+
|
32
36
|
instance = provider.new
|
33
37
|
|
34
38
|
if instance.respond_to?(:context=) && record != key
|
@@ -6,6 +6,8 @@ module ProviderKit
|
|
6
6
|
|
7
7
|
include Buildable
|
8
8
|
|
9
|
+
ATTRIBUTE_QUERY = /^(?<attribute>[a-z0-9_]+)\?$/.freeze
|
10
|
+
|
9
11
|
attr_reader :key
|
10
12
|
attr_reader :record
|
11
13
|
attr_reader :context
|
@@ -25,20 +27,35 @@ module ProviderKit
|
|
25
27
|
end
|
26
28
|
|
27
29
|
def method_missing(method_name, *args)
|
28
|
-
return
|
30
|
+
return super unless provider.present?
|
29
31
|
|
30
32
|
if provider.respond_to?(method_name)
|
31
33
|
return provider.public_send(method_name, *args)
|
32
34
|
end
|
33
35
|
|
34
36
|
# self.amazon_selling_partner? ==> self.key == :amazon_selling_partner
|
35
|
-
if match = method_name.to_s.match(
|
37
|
+
if match = method_name.to_s.match(ATTRIBUTE_QUERY)
|
36
38
|
return match[:attribute].to_clean_sym == key
|
37
39
|
end
|
38
40
|
|
39
41
|
provider.with_context(**context).public_send(method_name, *args)
|
40
42
|
end
|
41
43
|
|
44
|
+
def respond_to_missing?(method_name, include_private = false)
|
45
|
+
return super unless provider.present?
|
46
|
+
|
47
|
+
# Check if the provider responds to the method
|
48
|
+
return true if provider.respond_to?(method_name, include_private)
|
49
|
+
|
50
|
+
# Match dynamic `attribute?` methods
|
51
|
+
return true if method_name.to_s.match?(ATTRIBUTE_QUERY)
|
52
|
+
|
53
|
+
# Check if the provider with context responds to the method
|
54
|
+
return true if provider.with_context(**context).respond_to?(method_name, include_private)
|
55
|
+
|
56
|
+
super
|
57
|
+
end
|
58
|
+
|
42
59
|
def label
|
43
60
|
name
|
44
61
|
end
|
@@ -5,7 +5,7 @@ module ProviderKit
|
|
5
5
|
module Registerable
|
6
6
|
|
7
7
|
def deregister(key)
|
8
|
-
if
|
8
|
+
if registrations[key]
|
9
9
|
config.registered_providers.delete(key)
|
10
10
|
end
|
11
11
|
end
|
@@ -20,6 +20,11 @@ module ProviderKit
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
+
# special provider for placeholders
|
24
|
+
def null
|
25
|
+
ProviderKit.registrations[:null].klass
|
26
|
+
end
|
27
|
+
|
23
28
|
def providers(type: nil)
|
24
29
|
registrations(type:).values.map(&:klass)
|
25
30
|
end
|
data/lib/provider_kit/version.rb
CHANGED
data/lib/provider_kit.rb
CHANGED
@@ -35,6 +35,7 @@ module ProviderKit
|
|
35
35
|
end
|
36
36
|
|
37
37
|
## Core
|
38
|
+
autoload :Attribute
|
38
39
|
autoload :Callbacks
|
39
40
|
autoload :EncryptedSettings
|
40
41
|
autoload :Encryptor
|
@@ -42,6 +43,7 @@ module ProviderKit
|
|
42
43
|
autoload :JsonClient
|
43
44
|
autoload :JsonRequest
|
44
45
|
autoload :Logging
|
46
|
+
autoload :NullProvider
|
45
47
|
autoload :Provideable
|
46
48
|
autoload :Provider
|
47
49
|
autoload :ProviderAttribute
|
@@ -58,4 +60,7 @@ module ProviderKit
|
|
58
60
|
extend Registerable
|
59
61
|
extend Buildable
|
60
62
|
|
63
|
+
# this is just a placeholder for integrations that do not need a custom provider
|
64
|
+
register :null, class_name: "ProviderKit::NullProvider"
|
65
|
+
|
61
66
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: provider_kit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John D. Tornow
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-09-
|
11
|
+
date: 2025-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -155,6 +155,7 @@ files:
|
|
155
155
|
- lib/generators/provider/templates/provider.rb.tt
|
156
156
|
- lib/generators/provider/templates/spec.rb.tt
|
157
157
|
- lib/provider_kit.rb
|
158
|
+
- lib/provider_kit/attribute.rb
|
158
159
|
- lib/provider_kit/buildable.rb
|
159
160
|
- lib/provider_kit/callbacks.rb
|
160
161
|
- lib/provider_kit/capability.rb
|
@@ -169,6 +170,7 @@ files:
|
|
169
170
|
- lib/provider_kit/json_client.rb
|
170
171
|
- lib/provider_kit/json_request.rb
|
171
172
|
- lib/provider_kit/logging.rb
|
173
|
+
- lib/provider_kit/null_provider.rb
|
172
174
|
- lib/provider_kit/provideable.rb
|
173
175
|
- lib/provider_kit/provider.rb
|
174
176
|
- lib/provider_kit/provider_attribute.rb
|