resteze 0.3.0 → 0.4.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 +4 -4
- data/CHANGELOG.md +31 -0
- data/CLAUDE.md +74 -0
- data/README.md +33 -0
- data/docs/ADVANCED_USAGE.md +760 -0
- data/docs/API.md +410 -0
- data/docs/CONFIGURATION.md +681 -0
- data/docs/ERROR_HANDLING.md +609 -0
- data/docs/TESTING.md +768 -0
- data/lib/resteze/client.rb +1 -0
- data/lib/resteze/instrumentation.rb +14 -0
- data/lib/resteze/testing/minitest/configuration.rb +18 -0
- data/lib/resteze/testing/minitest/object.rb +58 -0
- data/lib/resteze/testing/minitest.rb +10 -0
- data/lib/resteze/testing/rspec/configure.rb +16 -0
- data/lib/resteze/testing/rspec/object.rb +49 -0
- data/lib/resteze/testing/rspec.rb +10 -0
- data/lib/resteze/version.rb +1 -1
- data/lib/resteze.rb +2 -0
- metadata +16 -2
data/lib/resteze/client.rb
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module Resteze
|
|
2
|
+
module Instrumentation
|
|
3
|
+
def execute_request(method, path, ...)
|
|
4
|
+
payload = { method: method, path: path, api_module: api_module.name }
|
|
5
|
+
|
|
6
|
+
ActiveSupport::Notifications.instrument("request.#{api_module::INSTRUMENTATION_KEY}", payload) do
|
|
7
|
+
super.tap do |response|
|
|
8
|
+
payload[:status] = response.http_status
|
|
9
|
+
payload[:request_id] = response.request_id
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Resteze
|
|
2
|
+
module Testing
|
|
3
|
+
module Configuration
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
|
|
6
|
+
# Assert that a config property is supported and can be assigned
|
|
7
|
+
def assert_config_property(property, value = nil, subject: nil)
|
|
8
|
+
subject ||= (defined?(@subject) && @subject) || subject()
|
|
9
|
+
original_value = subject.send(property)
|
|
10
|
+
|
|
11
|
+
assert_equal value, subject.send(property), "config property #{property} value did not match expectation"
|
|
12
|
+
ensure
|
|
13
|
+
# Make sure to set the original value at the end
|
|
14
|
+
subject.send("#{property}=", original_value)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
module Resteze
|
|
2
|
+
module Testing
|
|
3
|
+
module Minitest
|
|
4
|
+
module Object
|
|
5
|
+
include ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
# rubocop:disable Metrics/AbcSize
|
|
10
|
+
# rubocop:disable Naming/PredicatePrefix
|
|
11
|
+
def has_property(name, **options)
|
|
12
|
+
assert subject.property?(name.to_sym), "Expected #{subject} to have property: #{name}"
|
|
13
|
+
assert_property_default(name, options[:default]) if options.key?(:default)
|
|
14
|
+
assert_property_translation(name, options[:from]) if options.key?(:from)
|
|
15
|
+
assert_property_transformed(name, transformed: options[:transformed]) if options.key?(:transformed)
|
|
16
|
+
assert_property_required(name, required: options[:required]) if options.key?(:required)
|
|
17
|
+
end
|
|
18
|
+
# rubocop:enable Metrics/AbcSize
|
|
19
|
+
# rubocop:enable Naming/PredicatePrefix
|
|
20
|
+
|
|
21
|
+
def assert_property_transformed(name, transformed: true)
|
|
22
|
+
translation = subject.translations_hash.dig(subject.translations.key(name.to_sym), name.to_sym)
|
|
23
|
+
transformation_defined = translation.is_a?(Proc) || subject.transformation_exists?(name.to_sym)
|
|
24
|
+
|
|
25
|
+
if transformed
|
|
26
|
+
assert transformation_defined, "Expected #{subject} to transform property: #{name}"
|
|
27
|
+
else
|
|
28
|
+
refute transformation_defined, "Expected #{subject} not to transform property: #{name}"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def assert_property_required(name, required: true)
|
|
33
|
+
if required
|
|
34
|
+
assert subject.required?(name.to_sym), "Expected #{subject} to require property: #{name}"
|
|
35
|
+
else
|
|
36
|
+
refute subject.required?(name.to_sym), "Expected #{subject} not to require property: #{name}"
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def assert_property_translation(name, from)
|
|
41
|
+
assert_equal(
|
|
42
|
+
from.to_sym,
|
|
43
|
+
subject.translations.key(name.to_sym),
|
|
44
|
+
"Expected #{subject} to map property #{name} from #{from}"
|
|
45
|
+
)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def assert_property_default(name, default)
|
|
49
|
+
assert_equal(
|
|
50
|
+
default,
|
|
51
|
+
subject.defaults[name.to_sym],
|
|
52
|
+
"Expected #{subject} to have default for property #{name}"
|
|
53
|
+
)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Resteze
|
|
2
|
+
module Testing
|
|
3
|
+
module Configuration
|
|
4
|
+
# Assert that a config property is supported and can be assigned
|
|
5
|
+
def assert_config_property(property, value = nil, subject: nil)
|
|
6
|
+
subject ||= (defined?(@subject) && @subject) || self.subject
|
|
7
|
+
original_value = subject.send(property)
|
|
8
|
+
|
|
9
|
+
expect(subject.send(property)).to eq(value), "config property #{property} value did not match expectation"
|
|
10
|
+
ensure
|
|
11
|
+
# Make sure to set the original value at the end
|
|
12
|
+
subject.send("#{property}=", original_value)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
module Resteze
|
|
2
|
+
module Testing
|
|
3
|
+
module RSpec
|
|
4
|
+
module Object
|
|
5
|
+
extend RSpec::Matchers
|
|
6
|
+
|
|
7
|
+
# rubocop:disable Metrics/AbcSize
|
|
8
|
+
# rubocop:disable Naming/PredicatePrefix
|
|
9
|
+
def has_property(name, **options)
|
|
10
|
+
expect(subject.property?(name.to_sym)).to be(true), "Expected #{subject} to have property: #{name}"
|
|
11
|
+
assert_property_default(name, options[:default]) if options.key?(:default)
|
|
12
|
+
assert_property_translation(name, options[:from]) if options.key?(:from)
|
|
13
|
+
assert_property_transformed(name, transformed: options[:transformed]) if options.key?(:transformed)
|
|
14
|
+
assert_property_required(name, required: options[:required]) if options.key?(:required)
|
|
15
|
+
end
|
|
16
|
+
# rubocop:enable Naming/PredicatePrefix
|
|
17
|
+
|
|
18
|
+
def assert_property_transformed(name, transformed: true)
|
|
19
|
+
translation = subject.translations_hash.dig(subject.translations.key(name.to_sym), name.to_sym)
|
|
20
|
+
transformation_defined = translation.is_a?(Proc) || subject.transformation_exists?(name.to_sym)
|
|
21
|
+
|
|
22
|
+
if transformed
|
|
23
|
+
expect(transformation_defined).to be(true), "Expected #{subject} to transform property: #{name}"
|
|
24
|
+
else
|
|
25
|
+
expect(transformation_defined).to be(false), "Expected #{subject} not to transform property: #{name}"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
# rubocop:enable Metrics/AbcSize
|
|
29
|
+
|
|
30
|
+
def assert_property_required(name, required: true)
|
|
31
|
+
if required
|
|
32
|
+
expect(subject.required?(name.to_sym)).to be(true), "Expected #{subject} to require property: #{name}"
|
|
33
|
+
else
|
|
34
|
+
expect(subject.required?(name.to_sym)).to be(false), "Expected #{subject} not to require property: #{name}"
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def assert_property_translation(name, from)
|
|
39
|
+
expect(subject.translations.key(name.to_sym)).to eq(from.to_sym),
|
|
40
|
+
"Expected #{subject} to map property #{name} from #{from}"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def assert_property_default(name, default)
|
|
44
|
+
expect(subject.defaults[name.to_sym]).to eq(default), "Expected #{subject} to have default for property #{name}"
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
data/lib/resteze/version.rb
CHANGED
data/lib/resteze.rb
CHANGED
|
@@ -18,6 +18,7 @@ require "resteze/save"
|
|
|
18
18
|
require "resteze/object"
|
|
19
19
|
|
|
20
20
|
# API Classes
|
|
21
|
+
require "resteze/instrumentation"
|
|
21
22
|
require "resteze/client"
|
|
22
23
|
require "resteze/errors"
|
|
23
24
|
require "resteze/list_object"
|
|
@@ -79,6 +80,7 @@ module Resteze
|
|
|
79
80
|
end
|
|
80
81
|
|
|
81
82
|
# Setup magic constants
|
|
83
|
+
const_set :INSTRUMENTATION_KEY, name.underscore.tr("/", "_") unless const_defined?("#{self}::INSTRUMENTATION_KEY")
|
|
82
84
|
const_set :Object, Class.new(Resteze::Object)
|
|
83
85
|
const_set :Client, Class.new(Resteze::Client)
|
|
84
86
|
const_set :Response, Class.new(Resteze::Response)
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: resteze
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- JD Hendrickson
|
|
8
8
|
bindir: bin
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date:
|
|
10
|
+
date: 2026-06-30 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: actionpack
|
|
@@ -75,17 +75,25 @@ files:
|
|
|
75
75
|
- ".rubocop"
|
|
76
76
|
- ".rubocop.yml"
|
|
77
77
|
- ".ruby-version"
|
|
78
|
+
- CHANGELOG.md
|
|
79
|
+
- CLAUDE.md
|
|
78
80
|
- Guardfile
|
|
79
81
|
- LICENSE.txt
|
|
80
82
|
- README.md
|
|
81
83
|
- Rakefile
|
|
82
84
|
- assets/resteze.png
|
|
83
85
|
- assets/resteze.svg
|
|
86
|
+
- docs/ADVANCED_USAGE.md
|
|
87
|
+
- docs/API.md
|
|
88
|
+
- docs/CONFIGURATION.md
|
|
89
|
+
- docs/ERROR_HANDLING.md
|
|
90
|
+
- docs/TESTING.md
|
|
84
91
|
- lib/resteze.rb
|
|
85
92
|
- lib/resteze/api_module.rb
|
|
86
93
|
- lib/resteze/api_resource.rb
|
|
87
94
|
- lib/resteze/client.rb
|
|
88
95
|
- lib/resteze/errors.rb
|
|
96
|
+
- lib/resteze/instrumentation.rb
|
|
89
97
|
- lib/resteze/list.rb
|
|
90
98
|
- lib/resteze/list_object.rb
|
|
91
99
|
- lib/resteze/middleware/raise_error.rb
|
|
@@ -93,6 +101,12 @@ files:
|
|
|
93
101
|
- lib/resteze/request.rb
|
|
94
102
|
- lib/resteze/response.rb
|
|
95
103
|
- lib/resteze/save.rb
|
|
104
|
+
- lib/resteze/testing/minitest.rb
|
|
105
|
+
- lib/resteze/testing/minitest/configuration.rb
|
|
106
|
+
- lib/resteze/testing/minitest/object.rb
|
|
107
|
+
- lib/resteze/testing/rspec.rb
|
|
108
|
+
- lib/resteze/testing/rspec/configure.rb
|
|
109
|
+
- lib/resteze/testing/rspec/object.rb
|
|
96
110
|
- lib/resteze/util.rb
|
|
97
111
|
- lib/resteze/version.rb
|
|
98
112
|
- sig/resteze.rbs
|