blockfrost-ruby 0.1.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/.gitignore +14 -0
- data/.rspec +3 -0
- data/.rubocop.yml +39 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +10 -0
- data/LICENSE +201 -0
- data/README.md +134 -0
- data/Rakefile +8 -0
- data/blockfrost-ruby.gemspec +40 -0
- data/lib/blockfrost-ruby.rb +98 -0
- data/lib/blockfrostruby/config.yml +4 -0
- data/lib/blockfrostruby/configuration.rb +30 -0
- data/lib/blockfrostruby/constants.rb +9 -0
- data/lib/blockfrostruby/endpoints/cardano/accounts_endpoints.rb +99 -0
- data/lib/blockfrostruby/endpoints/cardano/addresses_endpoints.rb +47 -0
- data/lib/blockfrostruby/endpoints/cardano/assets_endpoints.rb +70 -0
- data/lib/blockfrostruby/endpoints/cardano/blocks_endpoints.rb +84 -0
- data/lib/blockfrostruby/endpoints/cardano/epochs_endpoints.rb +105 -0
- data/lib/blockfrostruby/endpoints/cardano/health_endpoints.rb +28 -0
- data/lib/blockfrostruby/endpoints/cardano/ledger_endpoints.rb +14 -0
- data/lib/blockfrostruby/endpoints/cardano/metadata_endpoints.rb +40 -0
- data/lib/blockfrostruby/endpoints/cardano/metrics_endpoints.rb +21 -0
- data/lib/blockfrostruby/endpoints/cardano/network_endpoints.rb +14 -0
- data/lib/blockfrostruby/endpoints/cardano/nutlink_endpoints.rb +50 -0
- data/lib/blockfrostruby/endpoints/cardano/pools_endpoints.rb +102 -0
- data/lib/blockfrostruby/endpoints/cardano/transactions_endpoints.rb +99 -0
- data/lib/blockfrostruby/endpoints/custom_endpoints.rb +26 -0
- data/lib/blockfrostruby/endpoints/ipfs/ipfs_endpoints.rb +58 -0
- data/lib/blockfrostruby/params.rb +66 -0
- data/lib/blockfrostruby/request.rb +216 -0
- data/lib/blockfrostruby/validator.rb +219 -0
- data/lib/blockfrostruby/version.rb +5 -0
- metadata +82 -0
@@ -0,0 +1,219 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'constants'
|
4
|
+
|
5
|
+
# rubocop:disable Style/GuardClause
|
6
|
+
module Validator
|
7
|
+
class << self
|
8
|
+
# rubocop:disable Metrics/AbcSize
|
9
|
+
|
10
|
+
# Validates params, which is passed to instanse of Net subclass object.
|
11
|
+
# Callings from Params module.
|
12
|
+
# If params don't meet specific conditions, it raise an ArgumentError.
|
13
|
+
#
|
14
|
+
# @param params [Hash] includes passed params.
|
15
|
+
# @return [ArgumentError | nil] if there is no valid params
|
16
|
+
def validate_params(params)
|
17
|
+
validate_count(params[:count])
|
18
|
+
validate_page(params[:page])
|
19
|
+
validate_order(params[:order])
|
20
|
+
validate_both_from_and_to(params[:from], params[:to])
|
21
|
+
validate_both_from_page_and_to_page(params[:from_page], params[:to_page])
|
22
|
+
validate_parallel_requests(params[:parallel_requests])
|
23
|
+
validate_sleep_between_retries(params[:sleep_between_retries_ms])
|
24
|
+
|
25
|
+
if (params[:from_page] || params[:to_page]) && params[:page]
|
26
|
+
raise ArgumentError,
|
27
|
+
'Do not specify "page" with "to_page" or "from_page"'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
# rubocop:enable Metrics/AbcSize
|
31
|
+
|
32
|
+
# Validates config, which is passed to constructor of instanse of Net subclass object.
|
33
|
+
# If params don't meet specific conditions, it raise an ArgumentError.
|
34
|
+
#
|
35
|
+
# @param config [Hash] includes passed params.
|
36
|
+
# @return [ArgumentError | nil] if there is no valid params
|
37
|
+
def validate_init_params(config)
|
38
|
+
validate_count(config[:default_count_per_page])
|
39
|
+
validate_use_order(config[:use_asc_order_as_default])
|
40
|
+
validate_parallel_requests(config[:parallel_requests])
|
41
|
+
validate_sleep_between_retries(config[:sleep_between_retries_ms])
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def validate_use_order(param)
|
47
|
+
param_name = 'use_asc_order_as_default'
|
48
|
+
validate_is_boolean(param, param_name) if param
|
49
|
+
end
|
50
|
+
|
51
|
+
def validate_parallel_requests(param)
|
52
|
+
param_name = 'parallel_requests'
|
53
|
+
if param
|
54
|
+
validate_is_numeric(param, param_name)
|
55
|
+
validate_is_integer(param, param_name)
|
56
|
+
validate_is_positive(param, param_name)
|
57
|
+
validate_lower_or_equal_than(param, param_name, MAX_NUMBER_OF_PARALLEL_REQUESTS)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def validate_sleep_between_retries(param)
|
62
|
+
param_name = 'sleep_between_retries_ms'
|
63
|
+
if param
|
64
|
+
validate_is_numeric(param, param_name)
|
65
|
+
validate_is_integer(param, param_name)
|
66
|
+
validate_is_positive(param, param_name)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def validate_count(param)
|
71
|
+
param_name = 'count'
|
72
|
+
if param
|
73
|
+
validate_is_numeric(param, param_name)
|
74
|
+
validate_is_integer(param, param_name)
|
75
|
+
validate_is_positive(param, param_name)
|
76
|
+
validate_lower_or_equal_than(param, param_name, MAX_COUNT_PER_PAGE)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def validate_page(param)
|
81
|
+
param_name = 'page'
|
82
|
+
if param
|
83
|
+
validate_is_numeric(param, param_name)
|
84
|
+
validate_is_integer(param, param_name)
|
85
|
+
validate_is_positive(param, param_name)
|
86
|
+
validate_lower_or_equal_than(param, param_name, MAX_COUNT_PER_PAGE)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def validate_order(param)
|
91
|
+
param_name = 'order'
|
92
|
+
valid_values = %w[asc desc]
|
93
|
+
if param
|
94
|
+
validate_is_string(param, param_name)
|
95
|
+
validate_string_is_in_array(param, param_name, valid_values)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def validate_from(param)
|
100
|
+
param_name = 'from'
|
101
|
+
if param
|
102
|
+
validate_is_numeric(param, param_name)
|
103
|
+
validate_is_integer(param, param_name)
|
104
|
+
validate_is_positive(param, param_name)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def validate_to(param)
|
109
|
+
param_name = 'to'
|
110
|
+
if param
|
111
|
+
validate_is_numeric(param, param_name)
|
112
|
+
validate_is_integer(param, param_name)
|
113
|
+
validate_is_positive(param, param_name)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def validate_from_page(param)
|
118
|
+
param_name = 'from_page'
|
119
|
+
if param
|
120
|
+
validate_is_numeric(param, param_name)
|
121
|
+
validate_is_integer(param, param_name)
|
122
|
+
validate_is_positive(param, param_name)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def validate_to_page(param)
|
127
|
+
param_name = 'to_page'
|
128
|
+
if param
|
129
|
+
validate_is_numeric(param, param_name)
|
130
|
+
validate_is_integer(param, param_name)
|
131
|
+
validate_is_positive(param, param_name)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def validate_both_from_page_and_to_page(from_page, to_page)
|
136
|
+
if to_page && from_page.nil?
|
137
|
+
raise ArgumentError,
|
138
|
+
'"to_page" argument should be specified with "from_page"'
|
139
|
+
end
|
140
|
+
|
141
|
+
validate_from_page(from_page) if from_page
|
142
|
+
|
143
|
+
if from_page && to_page
|
144
|
+
validate_to_page(to_page)
|
145
|
+
|
146
|
+
unless from_page <= to_page
|
147
|
+
raise ArgumentError,
|
148
|
+
'"to_page" argument should be greater or equal than "from_page"'
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def validate_both_from_and_to(from, to)
|
154
|
+
validate_from(from)
|
155
|
+
validate_to(to)
|
156
|
+
if from && to && from > to
|
157
|
+
raise ArgumentError,
|
158
|
+
'"to" argument must be greater or equal than "from"'
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
def validate_is_numeric(param, param_name)
|
163
|
+
unless param.is_a?(Numeric)
|
164
|
+
raise ArgumentError,
|
165
|
+
"\"#{param_name}\" is not a numeric"
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
def validate_is_integer(param, param_name)
|
170
|
+
unless param.is_a?(Integer)
|
171
|
+
raise ArgumentError,
|
172
|
+
"\"#{param_name}\" is not an integer"
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
def validate_is_boolean(param, param_name)
|
177
|
+
unless param.is_a?(TrueClass) || param.is_a?(FalseClass)
|
178
|
+
raise ArgumentError,
|
179
|
+
"\"#{param_name}\" is not a true or a false"
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
def validate_is_string(param, param_name)
|
184
|
+
unless param.is_a?(String)
|
185
|
+
raise ArgumentError,
|
186
|
+
"\"#{param_name}\" is not a string"
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
def validate_is_positive(param, param_name)
|
191
|
+
unless param.positive?
|
192
|
+
raise ArgumentError,
|
193
|
+
"\"#{param_name}\" should be greater than zero"
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
def validate_greater_or_equal_than(param, param_name, value)
|
198
|
+
unless param >= value
|
199
|
+
raise ArgumentError,
|
200
|
+
"\"#{param_name}\" should be greater or equal than #{value}"
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
def validate_lower_or_equal_than(param, param_name, value)
|
205
|
+
unless param <= value
|
206
|
+
raise ArgumentError,
|
207
|
+
"\"#{param_name}\" should be lower or equal than #{value}"
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
def validate_string_is_in_array(param, param_name, array)
|
212
|
+
unless array.include?(param.downcase.strip)
|
213
|
+
raise ArgumentError,
|
214
|
+
"\"#{param_name}\" should be one of: #{array}"
|
215
|
+
end
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
219
|
+
# rubocop:enable Style/GuardClause
|
metadata
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: blockfrost-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ivan (https://github.com/18bitmood)
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 1980-01-01 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Blockfrost is a hosted API as a service serving the data from the Cardano
|
14
|
+
blockchain. This gem is Ruby SDK for Blockfrost.io to enable
|
15
|
+
developers to use full power of this API without having to
|
16
|
+
create basic functions for it. The OpenAPI documentation
|
17
|
+
is hosted at https://github.com/blockfrost/openapi. This
|
18
|
+
gem is licensed under ASL 2.0.
|
19
|
+
email:
|
20
|
+
- ivan.papushoi@mail.ru
|
21
|
+
executables: []
|
22
|
+
extensions: []
|
23
|
+
extra_rdoc_files: []
|
24
|
+
files:
|
25
|
+
- ".gitignore"
|
26
|
+
- ".rspec"
|
27
|
+
- ".rubocop.yml"
|
28
|
+
- CHANGELOG.md
|
29
|
+
- Gemfile
|
30
|
+
- LICENSE
|
31
|
+
- README.md
|
32
|
+
- Rakefile
|
33
|
+
- blockfrost-ruby.gemspec
|
34
|
+
- lib/blockfrost-ruby.rb
|
35
|
+
- lib/blockfrostruby/config.yml
|
36
|
+
- lib/blockfrostruby/configuration.rb
|
37
|
+
- lib/blockfrostruby/constants.rb
|
38
|
+
- lib/blockfrostruby/endpoints/cardano/accounts_endpoints.rb
|
39
|
+
- lib/blockfrostruby/endpoints/cardano/addresses_endpoints.rb
|
40
|
+
- lib/blockfrostruby/endpoints/cardano/assets_endpoints.rb
|
41
|
+
- lib/blockfrostruby/endpoints/cardano/blocks_endpoints.rb
|
42
|
+
- lib/blockfrostruby/endpoints/cardano/epochs_endpoints.rb
|
43
|
+
- lib/blockfrostruby/endpoints/cardano/health_endpoints.rb
|
44
|
+
- lib/blockfrostruby/endpoints/cardano/ledger_endpoints.rb
|
45
|
+
- lib/blockfrostruby/endpoints/cardano/metadata_endpoints.rb
|
46
|
+
- lib/blockfrostruby/endpoints/cardano/metrics_endpoints.rb
|
47
|
+
- lib/blockfrostruby/endpoints/cardano/network_endpoints.rb
|
48
|
+
- lib/blockfrostruby/endpoints/cardano/nutlink_endpoints.rb
|
49
|
+
- lib/blockfrostruby/endpoints/cardano/pools_endpoints.rb
|
50
|
+
- lib/blockfrostruby/endpoints/cardano/transactions_endpoints.rb
|
51
|
+
- lib/blockfrostruby/endpoints/custom_endpoints.rb
|
52
|
+
- lib/blockfrostruby/endpoints/ipfs/ipfs_endpoints.rb
|
53
|
+
- lib/blockfrostruby/params.rb
|
54
|
+
- lib/blockfrostruby/request.rb
|
55
|
+
- lib/blockfrostruby/validator.rb
|
56
|
+
- lib/blockfrostruby/version.rb
|
57
|
+
homepage: https://github.com/blockfrost/blockfrost-ruby
|
58
|
+
licenses: []
|
59
|
+
metadata:
|
60
|
+
homepage_uri: https://github.com/blockfrost/blockfrost-ruby
|
61
|
+
source_code_uri: https://github.com/blockfrost/blockfrost-ruby
|
62
|
+
changelog_uri: https://github.com/blockfrost/blockfrost-ruby/blob/master/CHANGELOG.md
|
63
|
+
post_install_message:
|
64
|
+
rdoc_options: []
|
65
|
+
require_paths:
|
66
|
+
- lib
|
67
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: 2.5.0
|
72
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
requirements: []
|
78
|
+
rubygems_version: 3.2.16
|
79
|
+
signing_key:
|
80
|
+
specification_version: 4
|
81
|
+
summary: Ruby SDK to work with Blockfrost (Cardano Blockchain API)
|
82
|
+
test_files: []
|