bimbly 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 57076d2c384ab1c50540030c459ff640bed9000a
4
- data.tar.gz: e6b593dd302e9be306fab974337ef312fd3c4951
3
+ metadata.gz: c3e11a328ed271b7f1c97eef441d9c7b50c6952e
4
+ data.tar.gz: c64b8e7607dab495c1af4417f8659d4e1ad44cc8
5
5
  SHA512:
6
- metadata.gz: f9cb1b8d88ce6f6bc1bfc3f895466f3daa7cd9aee020113e1bb533c9b05339f7b3e93bb00010c3e75a248e10a7116213b1a977cfd312a1d41e5e8f6d9416e40f
7
- data.tar.gz: afde0b5c8333ba97968c1a0ac571cd1c4ba213b5ce286ce5068f19545889a8e35721b91ab94b81130ca208619c1188012ae3014d151d86ac15a6506e1a15cfe1
6
+ metadata.gz: 91700face2b8c4d46599420e760087a616488b661522d4c58e8245f861e196bf97268ee98c1d8bd29f9c2a6ef2f94efad2c29a2d8b55ecc2cc3ce6b88099b731
7
+ data.tar.gz: 65c2d30304aa5b3943474623f7429f477ddcd781bbd15e4c6cedea8c4c60bb7d386b7c287abc111864425651c26ade0cc9c0182065574066e3f9d8729f869532
data/lib/bimbly.rb CHANGED
@@ -6,20 +6,26 @@ require 'pp'
6
6
 
7
7
  class Bimbly
8
8
  attr_reader :data_type, :error_codes, :error_names, :obj_sets
9
- attr_accessor :array, :base_url, :cert, :doc_pointer, :file, :file_select, :headers, :menu,
10
- :param_pointer, :password, :pointer, :port, :user, :verb
9
+ attr_accessor :array, :base_url, :cert, :doc_pointer, :file, :file_select, :headers, :meth_name,
10
+ :menu, :param_pointer, :password, :pointer, :port, :req_pointer, :user, :verb
11
11
 
12
12
  def initialize(opts = {})
13
13
  # Read in setup files
14
- @error_codes = YAML.load(File.read("#{File.dirname(__FILE__)}/errors_by_code.yml"))
15
- @error_names = YAML.load(File.read("#{File.dirname(__FILE__)}/errors_by_name.yml"))
16
- @obj_sets = YAML.load(File.read("#{File.dirname(__FILE__)}/object_sets.yml"))
14
+ #@error_codes = YAML.load(File.read("#{File.dirname(__FILE__)}/errors_by_code.yml"))
15
+ #@error_names = YAML.load(File.read("#{File.dirname(__FILE__)}/errors_by_name.yml"))
16
+ @error_codes = YAML.load(File.read("#{File.dirname(__FILE__)}/error_codes.yml"))
17
+ #@obj_sets = YAML.load(File.read("#{File.dirname(__FILE__)}/object_sets.yml"))
18
+ @obj_sets = YAML.load(File.read("#{File.dirname(__FILE__)}/object_sets_v2.yml"))
17
19
  @data_type = YAML.load(File.read("#{File.dirname(__FILE__)}/data_types.yml"))
18
20
 
21
+ @meth_name = nil
22
+
19
23
  @base_url = "NotConnected"
20
24
  @menu = []
21
25
  @param_pointer = @obj_sets
22
26
  @doc_pointer = @obj_sets
27
+ @req_pointer = @obj_sets
28
+
23
29
  gen_methods
24
30
  new_connection(opts)
25
31
  end
@@ -52,9 +58,9 @@ class Bimbly
52
58
  puts "Response Headers:"
53
59
  pp e.response.headers
54
60
  puts "Response Body:"
55
- pp e.response.body
61
+ pp error_format(e.response.body)
56
62
  puts "Response Object:"
57
- pp e.response.request.inspect
63
+ puts e.response.request.inspect
58
64
  end
59
65
 
60
66
  begin
@@ -64,6 +70,16 @@ class Bimbly
64
70
  end
65
71
  end
66
72
 
73
+ def error_format(messages)
74
+ message_array = []
75
+ JSON.parse(messages)["messages"].each { |message|
76
+ message.merge!(@error_names[message["code"]])
77
+ message.delete("Error_Desc")
78
+ message_array << message
79
+ }
80
+ message_array
81
+ end
82
+
67
83
  def new_connection(opts = {})
68
84
  @file = opts[:file]
69
85
  @file_select = opts[:file_select]
@@ -126,14 +142,22 @@ class Bimbly
126
142
  @verb = nil
127
143
  @payload = nil
128
144
  @uri = nil
145
+ @meth_name = nil
129
146
  @doc_pointer = @obj_sets
130
147
  @param_pointer = @obj_sets
131
148
  end
132
149
 
133
150
  def details
151
+ puts "Method Selected: #{@meth_name}"
134
152
  puts "URI: #{@uri}"
135
153
  puts "Verb: #{@verb}"
136
- puts "Payload: #{@payload}"
154
+ if not @payload.nil?
155
+ puts "Payload:"
156
+ pp @payload
157
+ else
158
+ puts "Payload: n/a"
159
+ end
160
+ return
137
161
  end
138
162
 
139
163
  def doc
@@ -143,6 +167,10 @@ class Bimbly
143
167
  def parameters
144
168
  @param_pointer
145
169
  end
170
+
171
+ def request
172
+ puts @req_pointer.to_yaml
173
+ end
146
174
 
147
175
  def available_methods
148
176
  self.methods - Object.methods
@@ -202,6 +230,7 @@ class Bimbly
202
230
  hash[:verb] = verb.downcase.to_sym
203
231
  hash[:url_suffix] = url_suffix
204
232
  hash[:avail_params] = value
233
+ hash[:request] = @obj_sets[obj_key][op_key]["Request"]
205
234
  hash[:object] = obj_key
206
235
  hash[:op] = op_key
207
236
 
@@ -218,20 +247,56 @@ class Bimbly
218
247
  method_hash = gen_method_hash
219
248
  method_hash.each { |method_name, hash|
220
249
  define_singleton_method(method_name) { |opts = {}|
250
+ @param_pointer = hash[:avail_params]
251
+ @doc_pointer = @obj_sets[hash[:object]][hash[:op]]
252
+ @req_pointer = @obj_sets[hash[:object]][hash[:op]]["Request"]
253
+ @meth_name = method_name
254
+
221
255
  raise ArgumentError, "Please provide id" if method_name.match(/id/) and opts[:id].nil?
222
256
  url_suffix = hash[:url_suffix]
223
257
  url_suffix = url_suffix.gsub(/\/id/, "/#{opts[:id]}") if method_name.match(/id/)
224
258
 
225
- @param_pointer = hash[:avail_params]
226
-
227
259
  uri = gen_uri(url_suffix: url_suffix,
228
260
  params: opts[:params])
229
261
 
230
262
  @uri = uri
231
263
  @verb = hash[:verb]
232
- @payload = opts[:payload]
233
- @doc_pointer = @obj_sets[hash[:object]][hash[:op]]
264
+ @payload = opts[:payload]
265
+
266
+ if not opts[:params].nil?
267
+ opts[:params].each { |key, value|
268
+ raise ArgumentError,
269
+ "Invalid parameter for #{method_name}: #{key}" unless hash[:avail_params].include?(key)
270
+ }
271
+ end
234
272
 
273
+ # Maybe pull this out into its own method
274
+ # Check for mandatory payload info
275
+ mando_array = []
276
+ if not hash[:request].nil?
277
+ hash[:request].each { |key, value|
278
+ mando_array << key
279
+ }
280
+ end
281
+
282
+ raise ArgumentError,
283
+ "Must supply :payload with attributes #{mando_array} on #{method_name}" if
284
+ not mando_array.empty? and opts[:payload].nil?
285
+
286
+ mando_array.each { |ele|
287
+ raise ArgumentError,
288
+ "\'#{ele}\' is a mandatory attribute in the payload for #{method_name}: Please supply these attributes #{mando_array}" unless
289
+ opts[:payload].keys.to_s.include?(ele)
290
+ }
291
+
292
+ if not opts[:payload].nil?
293
+ opts[:payload].keys.each { |key|
294
+ raise ArgumentError,
295
+ "The attribute \'#{key}\' is not an available attribute for #{method_name}" unless
296
+ hash[:request].keys.include?(key.to_s)
297
+ }
298
+ end
299
+
235
300
  self
236
301
  }
237
302
  }
File without changes