webfunction 1.0.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 +7 -0
- data/.rubocop.yml +42 -0
- data/CHANGELOG.md +5 -0
- data/LICENSE.txt +21 -0
- data/README.md +598 -0
- data/Rakefile +12 -0
- data/lib/web_function.rb +1 -0
- data/lib/webfunction/argument.rb +123 -0
- data/lib/webfunction/attribute.rb +113 -0
- data/lib/webfunction/client.rb +155 -0
- data/lib/webfunction/documented_error.rb +67 -0
- data/lib/webfunction/endpoint.rb +243 -0
- data/lib/webfunction/flaggable.rb +40 -0
- data/lib/webfunction/object_schema.rb +135 -0
- data/lib/webfunction/package.rb +196 -0
- data/lib/webfunction/page.rb +134 -0
- data/lib/webfunction/pipeline.rb +91 -0
- data/lib/webfunction/promise.rb +150 -0
- data/lib/webfunction/request.rb +177 -0
- data/lib/webfunction/type/any.rb +48 -0
- data/lib/webfunction/type/array_of.rb +58 -0
- data/lib/webfunction/type/base.rb +89 -0
- data/lib/webfunction/type/union.rb +54 -0
- data/lib/webfunction/type.rb +140 -0
- data/lib/webfunction/utils.rb +67 -0
- data/lib/webfunction/version.rb +5 -0
- data/lib/webfunction.rb +52 -0
- data/sig/webfunction.rbs +4 -0
- metadata +131 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module WebFunction
|
|
4
|
+
# Internal utility methods.
|
|
5
|
+
#
|
|
6
|
+
# @api private
|
|
7
|
+
#
|
|
8
|
+
module Utils
|
|
9
|
+
module_function
|
|
10
|
+
|
|
11
|
+
# Normalizes a collection. Yields each item to the block if a block is given, otherwise returns the item.
|
|
12
|
+
# Any `nil` items are removed.
|
|
13
|
+
#
|
|
14
|
+
# @param collection [Array] The collection to normalize
|
|
15
|
+
#
|
|
16
|
+
# @return [Array] The normalized array
|
|
17
|
+
#
|
|
18
|
+
def normalize_array(collection)
|
|
19
|
+
unless collection.is_a?(Array)
|
|
20
|
+
return []
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
items = collection.map do |item|
|
|
24
|
+
if block_given?
|
|
25
|
+
yield item
|
|
26
|
+
else
|
|
27
|
+
item
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
items.compact
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Normalizes an array of strings. Uses #normalize_array under the hood.
|
|
35
|
+
#
|
|
36
|
+
# @param collection [Array] The collection to normalize
|
|
37
|
+
#
|
|
38
|
+
# @return [Array] The normalized array
|
|
39
|
+
#
|
|
40
|
+
def normalize_array_of_strings(collection)
|
|
41
|
+
normalize_array(collection) { |item| item.to_s }
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def get_body_from_url(url, extra_query_params: {})
|
|
45
|
+
url = add_query_params(url, extra_query_params)
|
|
46
|
+
response = ::Excon.get(url, headers: {
|
|
47
|
+
"User-Agent": "webfunction/#{::WebFunction::VERSION}",
|
|
48
|
+
"Accept-Encoding": "gzip",
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
response.body
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def add_query_params(url, params = {})
|
|
55
|
+
uri = ::URI.parse(url)
|
|
56
|
+
existing_params = ::URI.decode_www_form(uri.query || "").to_h
|
|
57
|
+
new_params = params.reject { |_, value| value.nil? }.transform_keys(&:to_s)
|
|
58
|
+
merged_params = existing_params.merge(new_params)
|
|
59
|
+
|
|
60
|
+
unless merged_params.empty?
|
|
61
|
+
uri.query = ::URI.encode_www_form(merged_params)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
uri.to_s
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
data/lib/webfunction.rb
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "excon"
|
|
4
|
+
require "json"
|
|
5
|
+
require "uri"
|
|
6
|
+
|
|
7
|
+
require_relative "webfunction/version"
|
|
8
|
+
require_relative "webfunction/request"
|
|
9
|
+
require_relative "webfunction/page"
|
|
10
|
+
require_relative "webfunction/client"
|
|
11
|
+
require_relative "webfunction/flaggable"
|
|
12
|
+
require_relative "webfunction/package"
|
|
13
|
+
require_relative "webfunction/endpoint"
|
|
14
|
+
require_relative "webfunction/argument"
|
|
15
|
+
require_relative "webfunction/attribute"
|
|
16
|
+
require_relative "webfunction/object_schema"
|
|
17
|
+
require_relative "webfunction/documented_error"
|
|
18
|
+
require_relative "webfunction/pipeline"
|
|
19
|
+
require_relative "webfunction/promise"
|
|
20
|
+
require_relative "webfunction/type"
|
|
21
|
+
require_relative "webfunction/utils"
|
|
22
|
+
|
|
23
|
+
module WebFunction
|
|
24
|
+
# A base error class for WebFunction. All errors inherit from this class.
|
|
25
|
+
#
|
|
26
|
+
# @api private
|
|
27
|
+
#
|
|
28
|
+
class Error < StandardError
|
|
29
|
+
attr_reader :code, :details
|
|
30
|
+
|
|
31
|
+
def initialize(message = nil, code: self.class.error_code, details: nil)
|
|
32
|
+
super(message)
|
|
33
|
+
@code = code
|
|
34
|
+
@details = details
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Returns the error code for the error. Used as default error code if no code is provided.
|
|
38
|
+
#
|
|
39
|
+
# @return [String] The error code
|
|
40
|
+
#
|
|
41
|
+
def self.error_code
|
|
42
|
+
name.sub(/^WebFunction::/, "WFN_")
|
|
43
|
+
.gsub(/([a-z\d])([A-Z])/, '\1_\2')
|
|
44
|
+
.upcase
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
UnresolvedPromiseError = Class.new(Error)
|
|
49
|
+
UnexpectedStatusCodeError = Class.new(Error)
|
|
50
|
+
JsonParseError = Class.new(Error)
|
|
51
|
+
BadRequestError = Class.new(Error)
|
|
52
|
+
end
|
data/sig/webfunction.rbs
ADDED
metadata
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: webfunction
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Robin Clart
|
|
8
|
+
bindir: exe
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: irb
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '0'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: logger
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: excon
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '1.2'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '1.2'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: json
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '2.10'
|
|
61
|
+
type: :runtime
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '2.10'
|
|
68
|
+
description: 'A lightweight Web Function client for Ruby. Web Function is a radical
|
|
69
|
+
rethinking of API design: no verbs, no nested URLs, no bloat. Just function calls
|
|
70
|
+
over HTTP. This gem lets you invoke endpoints defined in a package, with full support
|
|
71
|
+
for argument validations, error triples, and bearer auth.'
|
|
72
|
+
email:
|
|
73
|
+
- robin@clart.be
|
|
74
|
+
executables: []
|
|
75
|
+
extensions: []
|
|
76
|
+
extra_rdoc_files: []
|
|
77
|
+
files:
|
|
78
|
+
- ".rubocop.yml"
|
|
79
|
+
- CHANGELOG.md
|
|
80
|
+
- LICENSE.txt
|
|
81
|
+
- README.md
|
|
82
|
+
- Rakefile
|
|
83
|
+
- lib/web_function.rb
|
|
84
|
+
- lib/webfunction.rb
|
|
85
|
+
- lib/webfunction/argument.rb
|
|
86
|
+
- lib/webfunction/attribute.rb
|
|
87
|
+
- lib/webfunction/client.rb
|
|
88
|
+
- lib/webfunction/documented_error.rb
|
|
89
|
+
- lib/webfunction/endpoint.rb
|
|
90
|
+
- lib/webfunction/flaggable.rb
|
|
91
|
+
- lib/webfunction/object_schema.rb
|
|
92
|
+
- lib/webfunction/package.rb
|
|
93
|
+
- lib/webfunction/page.rb
|
|
94
|
+
- lib/webfunction/pipeline.rb
|
|
95
|
+
- lib/webfunction/promise.rb
|
|
96
|
+
- lib/webfunction/request.rb
|
|
97
|
+
- lib/webfunction/type.rb
|
|
98
|
+
- lib/webfunction/type/any.rb
|
|
99
|
+
- lib/webfunction/type/array_of.rb
|
|
100
|
+
- lib/webfunction/type/base.rb
|
|
101
|
+
- lib/webfunction/type/union.rb
|
|
102
|
+
- lib/webfunction/utils.rb
|
|
103
|
+
- lib/webfunction/version.rb
|
|
104
|
+
- sig/webfunction.rbs
|
|
105
|
+
homepage: https://github.com/webfunction-protocol/webfunction-ruby
|
|
106
|
+
licenses:
|
|
107
|
+
- MIT
|
|
108
|
+
metadata:
|
|
109
|
+
allowed_push_host: https://rubygems.org
|
|
110
|
+
homepage_uri: https://github.com/webfunction-protocol/webfunction-ruby
|
|
111
|
+
source_code_uri: https://github.com/webfunction-protocol/webfunction-ruby
|
|
112
|
+
changelog_uri: https://github.com/webfunction-protocol/webfunction-ruby/blob/main/CHANGELOG.md
|
|
113
|
+
rubygems_mfa_required: 'true'
|
|
114
|
+
rdoc_options: []
|
|
115
|
+
require_paths:
|
|
116
|
+
- lib
|
|
117
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
118
|
+
requirements:
|
|
119
|
+
- - ">="
|
|
120
|
+
- !ruby/object:Gem::Version
|
|
121
|
+
version: 3.1.0
|
|
122
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
|
+
requirements:
|
|
124
|
+
- - ">="
|
|
125
|
+
- !ruby/object:Gem::Version
|
|
126
|
+
version: '0'
|
|
127
|
+
requirements: []
|
|
128
|
+
rubygems_version: 3.6.9
|
|
129
|
+
specification_version: 4
|
|
130
|
+
summary: A Web Function Client for Ruby
|
|
131
|
+
test_files: []
|