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.
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: []