blockfrost-ruby 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +39 -0
  5. data/CHANGELOG.md +5 -0
  6. data/Gemfile +10 -0
  7. data/LICENSE +201 -0
  8. data/README.md +134 -0
  9. data/Rakefile +8 -0
  10. data/blockfrost-ruby.gemspec +40 -0
  11. data/lib/blockfrost-ruby.rb +98 -0
  12. data/lib/blockfrostruby/config.yml +4 -0
  13. data/lib/blockfrostruby/configuration.rb +30 -0
  14. data/lib/blockfrostruby/constants.rb +9 -0
  15. data/lib/blockfrostruby/endpoints/cardano/accounts_endpoints.rb +99 -0
  16. data/lib/blockfrostruby/endpoints/cardano/addresses_endpoints.rb +47 -0
  17. data/lib/blockfrostruby/endpoints/cardano/assets_endpoints.rb +70 -0
  18. data/lib/blockfrostruby/endpoints/cardano/blocks_endpoints.rb +84 -0
  19. data/lib/blockfrostruby/endpoints/cardano/epochs_endpoints.rb +105 -0
  20. data/lib/blockfrostruby/endpoints/cardano/health_endpoints.rb +28 -0
  21. data/lib/blockfrostruby/endpoints/cardano/ledger_endpoints.rb +14 -0
  22. data/lib/blockfrostruby/endpoints/cardano/metadata_endpoints.rb +40 -0
  23. data/lib/blockfrostruby/endpoints/cardano/metrics_endpoints.rb +21 -0
  24. data/lib/blockfrostruby/endpoints/cardano/network_endpoints.rb +14 -0
  25. data/lib/blockfrostruby/endpoints/cardano/nutlink_endpoints.rb +50 -0
  26. data/lib/blockfrostruby/endpoints/cardano/pools_endpoints.rb +102 -0
  27. data/lib/blockfrostruby/endpoints/cardano/transactions_endpoints.rb +99 -0
  28. data/lib/blockfrostruby/endpoints/custom_endpoints.rb +26 -0
  29. data/lib/blockfrostruby/endpoints/ipfs/ipfs_endpoints.rb +58 -0
  30. data/lib/blockfrostruby/params.rb +66 -0
  31. data/lib/blockfrostruby/request.rb +216 -0
  32. data/lib/blockfrostruby/validator.rb +219 -0
  33. data/lib/blockfrostruby/version.rb +5 -0
  34. 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
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blockfrostruby
4
+ VERSION = '0.1.0'
5
+ end
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: []