api_gears 1.0.2 → 1.0.3

This diff has not been reviewed by any users.
Log in in order to be able to vote.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/api_gears.rb +34 -5
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d53e8962a0c383b8878f29a249ff36acc990ad88ed5eaeeddc587f04a9c09221
4
- data.tar.gz: ee8ff800e633132c5c8c99975b58a441c87489ee10edda9aee51a0f4288c5672
3
+ metadata.gz: 548bb48ccb9ac58a7b7ffaeb721c6555a2277def81c9760d72a15a94d815a834
4
+ data.tar.gz: b47a91c3db56462aaed913aa3d0f35f69691e4683bca4c7c9f52f3002b244a7e
5
5
  SHA512:
6
- metadata.gz: 02d488c4a3c1f4e9a505428e6ecf8feb0e9c02b28b25b547c067f56c017c8048d5675dfb696f470d3c2e10a2508a8cc317e0e84f46239ee6770a5f26d602fcc5
7
- data.tar.gz: 1560c839f153713e9c49de6f18d1d23b6b3ae750e1cc6b6b173016cc6e7470681edf2e725097d149a3a4b00226120f2875f46bfa2692cbf5573284e99c2ef866
6
+ metadata.gz: 7a7edbbf6e91f9c3487af26ee57f27a4e219dd80a000ff7295b2117e7c1579f7e5c832a044e695b252269cfcb060c420db73e6ae63ff85fb4592c78fdc4fe53d
7
+ data.tar.gz: 60b35d6156a5af96defb2e2dea720aa72e16dfccf2b84a5a14271917a373b82ee1bea856afcca36485f619e4af3afa90ed9450b1e8f1daac9371dff222ac9e3e
@@ -2,9 +2,13 @@ require 'uri'
2
2
  require 'net/http'
3
3
  require 'date'
4
4
  require 'json'
5
-
5
+ # Base class for API client development, specify endpoints with `endpoint "shortcut_name", path:"api/subpath/"` syntax and method calls to valid shortcut_names will be caught with method_missing
6
6
  class ApiGears
7
-
7
+ # Intializes a new ApiGears instance.
8
+ #
9
+ # @param url [String] the base url for the API being queried
10
+ # @param options [Hash] allows setting :query_interval, global params (such as api-key, and default query_method)
11
+ # @return [ApiGears] a new ApiGears Instance
8
12
  def initialize(url, **options)
9
13
  @uri = URI.parse(url)
10
14
  @endpoints = {}
@@ -32,7 +36,11 @@ class ApiGears
32
36
  @query_method = :GET
33
37
  end
34
38
  end
35
-
39
+ # Provides information on the request an endpoint will send.
40
+ #
41
+ # @param endpoint [Symbol] the base url for the API being queried
42
+ # @param args [Hash] params to flesh-out the API call.
43
+ # @return [nil]
36
44
  def request_info(endpoint,**args)
37
45
  if(args.nil?)
38
46
  args = {}
@@ -102,6 +110,12 @@ class ApiGears
102
110
  # end
103
111
 
104
112
  end
113
+ # Handles calls to any endpoint created during initialization
114
+ #
115
+ # @param m [Symbol] the method name being called
116
+ # @param args [Hash] params passed to method call
117
+ # @param block [Block] As yet unused.
118
+ # @return [Hash] or [Array], depending on what API returns.
105
119
  def method_missing(m, **args, &block)
106
120
  if(!@endpoints[m.to_sym].nil?)
107
121
  request(endpoint:m.to_sym,**args)
@@ -110,15 +124,24 @@ class ApiGears
110
124
  end
111
125
 
112
126
  end
127
+ # Provides a list of endpoints that can be called as method names on the ApiGears object. Api calls are caught with #method_missing
128
+ #
129
+ # @return [Array]
113
130
  def endpoints
114
131
  @endpoints.keys
115
132
  end
133
+ # Provides a list of args that a particular endpoint needs
134
+ # @param e [Symbol] or [String]
135
+ # @return [Array] of argument symbols sought during endpoint call.
116
136
  def args_for(e)
117
137
  @endpoints[e.to_sym][:args].map{|arg| arg.to_sym}
118
138
  end
119
139
  def query_params_for(e)
120
140
  @endpoints[e.to_sym][:query_params].map{|arg| arg.to_sym}.concat(@endpoints[e.to_sym][:set_query_params].keys)
121
141
  end
142
+ # Can be called during override of #request to modify API response data before return
143
+ # @param data [Hash] or [Array]
144
+ # @return [Hash] or [Array] depending on the data in the API response
122
145
  def prepare_data(data, depth=0,&block)
123
146
  if(!block.nil?)
124
147
  yield(data,depth)
@@ -160,7 +183,10 @@ class ApiGears
160
183
  uf = url_for(args[:endpoint],args)
161
184
  return {query_method:args[:query_method],**uf}
162
185
  end
163
-
186
+ # Allows implementer to specify an API endpoint to be queried by a specific method name.
187
+ # @param name [String] the method name that will execute the query
188
+ # @param args [Hash] accepts path (subpath to query), query_params (query parameters to be sent when method is called) and set_query_params (query parameters that are specified ahead of time for each execution of the method being defined)
189
+ # @return [nil]
164
190
  def endpoint(name, **args, &block)
165
191
  if(args[:path] == nil)
166
192
  args[:path] = "/#{name.to_s}"
@@ -186,7 +212,10 @@ class ApiGears
186
212
  end
187
213
  @endpoints[name.to_sym] = {path:args[:path],args:path_args,query_params:args[:query_params],query_method:args[:query_method] ,set_query_params:args[:set_query_params], block:block}
188
214
  end
189
-
215
+ # Builds URL and args for a specific endpoint call
216
+ # @param endpoint [String] or [Symbol] the method name that has been called
217
+ # @param args [Hash] the args passed in during the method call
218
+ # @return [Hash] with url and query params
190
219
  def url_for(endpoint, args)
191
220
  url = @uri.dup
192
221
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api_gears
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Greg Mikeska