tsms 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/Gemfile.lock +60 -0
  4. data/LICENSE +22 -0
  5. data/README.md +107 -0
  6. data/Rakefile +7 -0
  7. data/fixtures/vcr_cassettes/account_api_get_balance.yml +49 -0
  8. data/fixtures/vcr_cassettes/email_sms_api_add_email.yml +49 -0
  9. data/fixtures/vcr_cassettes/email_sms_api_delete_email.yml +49 -0
  10. data/fixtures/vcr_cassettes/keywords_api_add_keyword.yml +49 -0
  11. data/fixtures/vcr_cassettes/keywords_api_edit_keyword.yml +49 -0
  12. data/fixtures/vcr_cassettes/keywords_api_get_keywords.yml +50 -0
  13. data/fixtures/vcr_cassettes/lists_api_add_list.yml +49 -0
  14. data/fixtures/vcr_cassettes/lists_api_add_to_list.yml +50 -0
  15. data/fixtures/vcr_cassettes/lists_api_delete_from_list.yml +49 -0
  16. data/fixtures/vcr_cassettes/lists_api_edit_list_member.yml +50 -0
  17. data/fixtures/vcr_cassettes/lists_api_get_list.yml +60 -0
  18. data/fixtures/vcr_cassettes/lists_api_get_lists.yml +61 -0
  19. data/fixtures/vcr_cassettes/lists_api_optout_list_member.yml +49 -0
  20. data/fixtures/vcr_cassettes/lists_api_remove_list.yml +49 -0
  21. data/fixtures/vcr_cassettes/numbers_api_get_number.yml +49 -0
  22. data/fixtures/vcr_cassettes/numbers_api_get_numbers.yml +49 -0
  23. data/fixtures/vcr_cassettes/numbers_api_lease_number.yml +50 -0
  24. data/fixtures/vcr_cassettes/resellers_api_add_client.yml +49 -0
  25. data/fixtures/vcr_cassettes/resellers_api_edit_client.yml +40 -0
  26. data/fixtures/vcr_cassettes/resellers_api_get_client.yml +50 -0
  27. data/fixtures/vcr_cassettes/resellers_api_get_clients.yml +59 -0
  28. data/fixtures/vcr_cassettes/resellers_api_get_transaction.yml +51 -0
  29. data/fixtures/vcr_cassettes/resellers_api_get_transactions.yml +61 -0
  30. data/fixtures/vcr_cassettes/sms_api_test_cancel_sms.yml +50 -0
  31. data/fixtures/vcr_cassettes/sms_api_test_format_number.yml +49 -0
  32. data/fixtures/vcr_cassettes/sms_api_test_format_number_fail_in_missing_msisdn.yml +50 -0
  33. data/fixtures/vcr_cassettes/sms_api_test_get_message_log.yml +50 -0
  34. data/fixtures/vcr_cassettes/sms_api_test_get_sms_info.yml +49 -0
  35. data/fixtures/vcr_cassettes/sms_api_test_get_sms_info_fail_for_not_existing_message_id.yml +50 -0
  36. data/fixtures/vcr_cassettes/sms_api_test_get_sms_responses.yml +53 -0
  37. data/fixtures/vcr_cassettes/sms_api_test_get_sms_sent.yml +50 -0
  38. data/fixtures/vcr_cassettes/sms_api_test_get_user_sms_responses.yml +49 -0
  39. data/fixtures/vcr_cassettes/sms_api_test_message_reply.yml +49 -0
  40. data/fixtures/vcr_cassettes/sms_api_test_send.yml +49 -0
  41. data/fixtures/vcr_cassettes/sms_api_test_send_missing_to_and_list_id.yml +50 -0
  42. data/fixtures/vcr_cassettes/sms_api_test_send_with_list_id.yml +50 -0
  43. data/geminstall.sh +1 -0
  44. data/lib/account_api.rb +80 -0
  45. data/lib/email_api.rb +137 -0
  46. data/lib/keywords_api.rb +224 -0
  47. data/lib/lists_api.rb +523 -0
  48. data/lib/monkey.rb +90 -0
  49. data/lib/numbers_api.rb +188 -0
  50. data/lib/resellers_api.rb +379 -0
  51. data/lib/ruby-transmitsms.rb +16 -0
  52. data/lib/sms_api.rb +550 -0
  53. data/lib/swagger/configuration.rb +22 -0
  54. data/lib/swagger/request.rb +212 -0
  55. data/lib/swagger/response.rb +70 -0
  56. data/lib/swagger/version.rb +4 -0
  57. data/lib/swagger.rb +84 -0
  58. data/ruby-transmitsms.gemspec +34 -0
  59. data/runtest.sh +8 -0
  60. data/setup.sh +1 -0
  61. data/spec/account_api_spec.rb +30 -0
  62. data/spec/email_sms_api_spec.rb +40 -0
  63. data/spec/keywords_api_spec.rb +56 -0
  64. data/spec/lists_api_spec.rb +117 -0
  65. data/spec/numbers_api_spec.rb +53 -0
  66. data/spec/resellers_api_spec.rb +85 -0
  67. data/spec/sms_api_spec.rb +174 -0
  68. data/spec/spec.opts +4 -0
  69. metadata +233 -0
data/lib/lists_api.rb ADDED
@@ -0,0 +1,523 @@
1
+ require "uri"
2
+
3
+ class ListsApi
4
+ basePath = "https://api.transmitsms.com/"
5
+ # apiInvoker = APIInvoker
6
+
7
+ def initialize(api_key, api_secret)
8
+ @api_key = api_key
9
+ @api_secret = api_secret
10
+ @sms_api = SmsApi
11
+
12
+ @api_key_secret = create_api_key_secret()
13
+
14
+ config_swagger()
15
+ end
16
+
17
+ def create_api_key_secret()
18
+ api_key_secret = Base64.strict_encode64("#{@api_key}:#{@api_secret}")
19
+ "Basic #{api_key_secret}"
20
+ end
21
+
22
+ def config_swagger()
23
+ Swagger.configure do |config|
24
+ config.host = "https://api.transmitsms.com/".gsub("http://", "").gsub("https://", "").gsub("/", "")
25
+ config.base_path = "/"
26
+ config.format = "x-www-form-urlencoded"
27
+ config.camelize_params = false
28
+ end
29
+ end
30
+
31
+
32
+ # Create a new list including the ability to add custom fields.
33
+ #
34
+ # @param name A unique name for the list
35
+ # @param field_1 Custom field value 1
36
+ # @param field_2 Custom field value 2
37
+ # @param field_3 Custom field value 3
38
+ # @param field_4 Custom field value 4
39
+ # @param field_5 Custom field value 5
40
+ # @param field_6 Custom field value 6
41
+ # @param field_7 Custom field value 7
42
+ # @param field_8 Custom field value 8
43
+ # @param field_9 Custom field value 9
44
+ # @param field_10 Custom field value 10
45
+ # @return void
46
+ def add_list (name = nil, field_1 = nil, field_2 = nil, field_3 = nil, field_4 = nil, field_5 = nil, field_6 = nil, field_7 = nil, field_8 = nil, field_9 = nil, field_10 = nil, opts={})
47
+ query_param_keys = [:name,:field_1,:field_2,:field_3,:field_4,:field_5,:field_6,:field_7,:field_8,:field_9,:field_10]
48
+ headerParams = {}
49
+
50
+
51
+
52
+ # set default values and merge with input
53
+ options = {
54
+ :'name' => name,
55
+ :'field_1' => field_1,
56
+ :'field_2' => field_2,
57
+ :'field_3' => field_3,
58
+ :'field_4' => field_4,
59
+ :'field_5' => field_5,
60
+ :'field_6' => field_6,
61
+ :'field_7' => field_7,
62
+ :'field_8' => field_8,
63
+ :'field_9' => field_9,
64
+ :'field_10' => field_10
65
+
66
+ }.merge(opts)
67
+
68
+ #resource path
69
+ path = "/add-list.json".sub('{format}','json')
70
+
71
+ # pull querystring keys from options
72
+ queryopts = options.select do |key,value|
73
+ query_param_keys.include? key
74
+ end
75
+
76
+ # header parameters
77
+ headers = {}
78
+
79
+ _header_accept = 'application/json'
80
+ if _header_accept != ''
81
+ headerParams['Accept'] = _header_accept
82
+ end
83
+ _header_content_type = ['application/x-www-form-urlencoded']
84
+ headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json'
85
+
86
+
87
+
88
+ headers[:'Authorization'] = @api_key_secret
89
+
90
+ # http body (model)
91
+ post_body = nil
92
+
93
+ # form parameters
94
+ form_parameter_hash = {}
95
+
96
+
97
+
98
+ Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make
99
+
100
+
101
+ end
102
+
103
+ # Add a member to a list.
104
+ #
105
+ # @param list_id ID of the list to add to
106
+ # @param msisdn Mobile number of the member
107
+ # @param first_name First name of the member
108
+ # @param last_name Last name of the member
109
+ # @param field_1 Custom field value 1
110
+ # @param field_2 Custom field value 2
111
+ # @param field_3 Custom field value 3
112
+ # @param field_4 Custom field value 4
113
+ # @param field_5 Custom field value 5
114
+ # @param field_6 Custom field value 6
115
+ # @param field_7 Custom field value 7
116
+ # @param field_8 Custom field value 8
117
+ # @param field_9 Custom field value 9
118
+ # @param field_10 Custom field value 10
119
+ # @return void
120
+ def add_to_list (list_id = nil, msisdn = nil, first_name = nil, last_name = nil, field_1 = nil, field_2 = nil, field_3 = nil, field_4 = nil, field_5 = nil, field_6 = nil, field_7 = nil, field_8 = nil, field_9 = nil, field_10 = nil, opts={})
121
+ query_param_keys = [:list_id,:msisdn,:first_name,:last_name,:field_1,:field_2,:field_3,:field_4,:field_5,:field_6,:field_7,:field_8,:field_9,:field_10]
122
+ headerParams = {}
123
+
124
+
125
+
126
+ # set default values and merge with input
127
+ options = {
128
+ :'list_id' => list_id,
129
+ :'msisdn' => msisdn,
130
+ :'first_name' => first_name,
131
+ :'last_name' => last_name,
132
+ :'field_1' => field_1,
133
+ :'field_2' => field_2,
134
+ :'field_3' => field_3,
135
+ :'field_4' => field_4,
136
+ :'field_5' => field_5,
137
+ :'field_6' => field_6,
138
+ :'field_7' => field_7,
139
+ :'field_8' => field_8,
140
+ :'field_9' => field_9,
141
+ :'field_10' => field_10
142
+
143
+ }.merge(opts)
144
+
145
+ #resource path
146
+ path = "/add-to-list.json".sub('{format}','json')
147
+
148
+ # pull querystring keys from options
149
+ queryopts = options.select do |key,value|
150
+ query_param_keys.include? key
151
+ end
152
+
153
+ # header parameters
154
+ headers = {}
155
+
156
+ _header_accept = 'application/json'
157
+ if _header_accept != ''
158
+ headerParams['Accept'] = _header_accept
159
+ end
160
+ _header_content_type = ['application/x-www-form-urlencoded']
161
+ headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json'
162
+
163
+
164
+
165
+ headers[:'Authorization'] = @api_key_secret
166
+
167
+ # http body (model)
168
+ post_body = nil
169
+
170
+ # form parameters
171
+ form_parameter_hash = {}
172
+
173
+
174
+
175
+ Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make
176
+
177
+
178
+ end
179
+
180
+ # Remove a member from one list or all lists.
181
+ #
182
+ # @param list_id ID of the list to remove from. If set to 0 (zero) the member will be removed from all lists.
183
+ # @param msisdn Mobile number of the member
184
+ # @return void
185
+ def delete_from_list (list_id = nil, msisdn = nil, opts={})
186
+ query_param_keys = [:list_id,:msisdn]
187
+ headerParams = {}
188
+
189
+
190
+
191
+ # set default values and merge with input
192
+ options = {
193
+ :'list_id' => list_id,
194
+ :'msisdn' => msisdn
195
+
196
+ }.merge(opts)
197
+
198
+ #resource path
199
+ path = "/delete-from-list.json".sub('{format}','json')
200
+
201
+ # pull querystring keys from options
202
+ queryopts = options.select do |key,value|
203
+ query_param_keys.include? key
204
+ end
205
+
206
+ # header parameters
207
+ headers = {}
208
+
209
+ _header_accept = 'application/json'
210
+ if _header_accept != ''
211
+ headerParams['Accept'] = _header_accept
212
+ end
213
+ _header_content_type = ['application/x-www-form-urlencoded']
214
+ headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json'
215
+
216
+
217
+
218
+ headers[:'Authorization'] = @api_key_secret
219
+
220
+ # http body (model)
221
+ post_body = nil
222
+
223
+ # form parameters
224
+ form_parameter_hash = {}
225
+
226
+
227
+
228
+ Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make
229
+
230
+
231
+ end
232
+
233
+ # Edit a member of a list.
234
+ #
235
+ # @param list_id ID of the list the member belongs to
236
+ # @param msisdn Mobile number of the member to edit
237
+ # @param first_name First name of the member
238
+ # @param last_name Last name of the member
239
+ # @param field_1 Custom field value 1
240
+ # @param field_2 Custom field value 2
241
+ # @param field_3 Custom field value 3
242
+ # @param field_4 Custom field value 4
243
+ # @param field_5 Custom field value 5
244
+ # @param field_6 Custom field value 6
245
+ # @param field_7 Custom field value 7
246
+ # @param field_8 Custom field value 8
247
+ # @param field_9 Custom field value 9
248
+ # @param field_10 Custom field value 10
249
+ # @return void
250
+ def edit_list_member (list_id = nil, msisdn = nil, first_name = nil, last_name = nil, field_1 = nil, field_2 = nil, field_3 = nil, field_4 = nil, field_5 = nil, field_6 = nil, field_7 = nil, field_8 = nil, field_9 = nil, field_10 = nil, opts={})
251
+ query_param_keys = [:list_id,:msisdn,:first_name,:last_name,:field_1,:field_2,:field_3,:field_4,:field_5,:field_6,:field_7,:field_8,:field_9,:field_10]
252
+ headerParams = {}
253
+
254
+
255
+
256
+ # set default values and merge with input
257
+ options = {
258
+ :'list_id' => list_id,
259
+ :'msisdn' => msisdn,
260
+ :'first_name' => first_name,
261
+ :'last_name' => last_name,
262
+ :'field_1' => field_1,
263
+ :'field_2' => field_2,
264
+ :'field_3' => field_3,
265
+ :'field_4' => field_4,
266
+ :'field_5' => field_5,
267
+ :'field_6' => field_6,
268
+ :'field_7' => field_7,
269
+ :'field_8' => field_8,
270
+ :'field_9' => field_9,
271
+ :'field_10' => field_10
272
+
273
+ }.merge(opts)
274
+
275
+ #resource path
276
+ path = "/edit-list-member.json".sub('{format}','json')
277
+
278
+ # pull querystring keys from options
279
+ queryopts = options.select do |key,value|
280
+ query_param_keys.include? key
281
+ end
282
+
283
+ # header parameters
284
+ headers = {}
285
+
286
+ _header_accept = 'application/json'
287
+ if _header_accept != ''
288
+ headerParams['Accept'] = _header_accept
289
+ end
290
+ _header_content_type = ['application/x-www-form-urlencoded']
291
+ headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json'
292
+
293
+
294
+
295
+ headers[:'Authorization'] = @api_key_secret
296
+
297
+ # http body (model)
298
+ post_body = nil
299
+
300
+ # form parameters
301
+ form_parameter_hash = {}
302
+
303
+
304
+
305
+ Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make
306
+
307
+
308
+ end
309
+
310
+ # Get information about a list and its members.
311
+ #
312
+ # @param list_id List ID
313
+ # @param members Types of members to return. (active, inactive, all, none)
314
+ # @param page Page number, for pagination
315
+ # @param max Maximum results returned per page
316
+ # @return void
317
+ def get_list (list_id = nil, members = nil, page = nil, max = nil, opts={})
318
+ query_param_keys = [:list_id,:members,:page,:max]
319
+ headerParams = {}
320
+
321
+
322
+
323
+ # set default values and merge with input
324
+ options = {
325
+ :'list_id' => list_id,
326
+ :'members' => members,
327
+ :'page' => page,
328
+ :'max' => max
329
+
330
+ }.merge(opts)
331
+
332
+ #resource path
333
+ path = "/get-list.json".sub('{format}','json')
334
+
335
+ # pull querystring keys from options
336
+ queryopts = options.select do |key,value|
337
+ query_param_keys.include? key
338
+ end
339
+
340
+ # header parameters
341
+ headers = {}
342
+
343
+ _header_accept = 'application/json'
344
+ if _header_accept != ''
345
+ headerParams['Accept'] = _header_accept
346
+ end
347
+ _header_content_type = ['application/x-www-form-urlencoded']
348
+ headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json'
349
+
350
+
351
+
352
+ headers[:'Authorization'] = @api_key_secret
353
+
354
+ # http body (model)
355
+ post_body = nil
356
+
357
+ # form parameters
358
+ form_parameter_hash = {}
359
+
360
+
361
+
362
+ Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make
363
+
364
+
365
+ end
366
+
367
+ # Get the metadata of all your lists.
368
+ #
369
+ # @param page Page number, for pagination
370
+ # @param max Maximum results returned per page
371
+ # @return void
372
+ def get_lists (page = nil, max = nil, opts={})
373
+ query_param_keys = [:page,:max]
374
+ headerParams = {}
375
+
376
+
377
+
378
+ # set default values and merge with input
379
+ options = {
380
+ :'page' => page,
381
+ :'max' => max
382
+
383
+ }.merge(opts)
384
+
385
+ #resource path
386
+ path = "/get-lists.json".sub('{format}','json')
387
+
388
+ # pull querystring keys from options
389
+ queryopts = options.select do |key,value|
390
+ query_param_keys.include? key
391
+ end
392
+
393
+ # header parameters
394
+ headers = {}
395
+
396
+ _header_accept = 'application/json'
397
+ if _header_accept != ''
398
+ headerParams['Accept'] = _header_accept
399
+ end
400
+ _header_content_type = ['application/x-www-form-urlencoded']
401
+ headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json'
402
+
403
+
404
+
405
+ headers[:'Authorization'] = @api_key_secret
406
+
407
+ # http body (model)
408
+ post_body = nil
409
+
410
+ # form parameters
411
+ form_parameter_hash = {}
412
+
413
+
414
+
415
+ Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make
416
+
417
+
418
+ end
419
+
420
+ # Opt a user out of one list or all lists.
421
+ #
422
+ # @param list_id ID of the list to opt the user out of. Set this to 0 (zero) to opt out of all of your lists.
423
+ # @param msisdn Mobile number of the member to opt out
424
+ # @return void
425
+ def optout_list_member (list_id = nil, msisdn = nil, opts={})
426
+ query_param_keys = [:list_id,:msisdn]
427
+ headerParams = {}
428
+
429
+
430
+
431
+ # set default values and merge with input
432
+ options = {
433
+ :'list_id' => list_id,
434
+ :'msisdn' => msisdn
435
+
436
+ }.merge(opts)
437
+
438
+ #resource path
439
+ path = "/optout-list-member.json".sub('{format}','json')
440
+
441
+ # pull querystring keys from options
442
+ queryopts = options.select do |key,value|
443
+ query_param_keys.include? key
444
+ end
445
+
446
+ # header parameters
447
+ headers = {}
448
+
449
+ _header_accept = 'application/json'
450
+ if _header_accept != ''
451
+ headerParams['Accept'] = _header_accept
452
+ end
453
+ _header_content_type = ['application/x-www-form-urlencoded']
454
+ headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json'
455
+
456
+
457
+
458
+ headers[:'Authorization'] = @api_key_secret
459
+
460
+ # http body (model)
461
+ post_body = nil
462
+
463
+ # form parameters
464
+ form_parameter_hash = {}
465
+
466
+
467
+
468
+ Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make
469
+
470
+
471
+ end
472
+
473
+ # Delete a list and its members.
474
+ #
475
+ # @param list_id ID of the list to remove.
476
+ # @return void
477
+ def remove_list (list_id = nil, opts={})
478
+ query_param_keys = [:list_id]
479
+ headerParams = {}
480
+
481
+
482
+
483
+ # set default values and merge with input
484
+ options = {
485
+ :'list_id' => list_id
486
+
487
+ }.merge(opts)
488
+
489
+ #resource path
490
+ path = "/remove-list.json".sub('{format}','json')
491
+
492
+ # pull querystring keys from options
493
+ queryopts = options.select do |key,value|
494
+ query_param_keys.include? key
495
+ end
496
+
497
+ # header parameters
498
+ headers = {}
499
+
500
+ _header_accept = 'application/json'
501
+ if _header_accept != ''
502
+ headerParams['Accept'] = _header_accept
503
+ end
504
+ _header_content_type = ['application/x-www-form-urlencoded']
505
+ headerParams['Content-Type'] = _header_content_type.length > 0 ? _header_content_type[0] : 'application/json'
506
+
507
+
508
+
509
+ headers[:'Authorization'] = @api_key_secret
510
+
511
+ # http body (model)
512
+ post_body = nil
513
+
514
+ # form parameters
515
+ form_parameter_hash = {}
516
+
517
+
518
+
519
+ Swagger::Request.new(:POST, path, {:params=>queryopts,:headers=>headers, :body=>post_body, :form_params => form_parameter_hash }).make
520
+
521
+
522
+ end
523
+ end
data/lib/monkey.rb ADDED
@@ -0,0 +1,90 @@
1
+ # module Swagger
2
+ class Object
3
+
4
+ unless Object.method_defined? :blank?
5
+ def blank?
6
+ respond_to?(:empty?) ? empty? : !self
7
+ end
8
+ end
9
+
10
+ unless Object.method_defined? :present?
11
+ def present?
12
+ !blank?
13
+ end
14
+ end
15
+
16
+ end
17
+
18
+ class String
19
+
20
+ unless String.method_defined? :underscore
21
+ def underscore
22
+ self.gsub(/::/, '/').
23
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
24
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
25
+ tr("-", "_").
26
+ downcase
27
+ end
28
+ end
29
+
30
+ unless String.method_defined? :camelize
31
+ def camelize(first_letter_in_uppercase = true)
32
+ if first_letter_in_uppercase != :lower
33
+ self.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
34
+ else
35
+ self.to_s[0].chr.downcase + camelize(self)[1..-1]
36
+ end
37
+ end
38
+ end
39
+
40
+ end
41
+
42
+ class Hash
43
+
44
+ unless Hash.method_defined? :stringify_keys
45
+ def stringify_keys
46
+ inject({}) do |options, (key, value)|
47
+ options[key.to_s] = value
48
+ options
49
+ end
50
+ end
51
+ end
52
+
53
+ unless Hash.method_defined? :stringify_keys!
54
+ def stringify_keys!
55
+ self.replace(self.stringify_keys)
56
+ end
57
+ end
58
+
59
+ unless Hash.method_defined? :symbolize_keys
60
+ def symbolize_keys
61
+ inject({}) do |options, (key, value)|
62
+ options[(key.to_sym rescue key) || key] = value
63
+ options
64
+ end
65
+ end
66
+ end
67
+
68
+ unless Hash.method_defined? :symbolize_keys!
69
+ def symbolize_keys!
70
+ self.replace(self.symbolize_keys)
71
+ end
72
+ end
73
+
74
+ unless Hash.method_defined? :symbolize_and_underscore_keys
75
+ def symbolize_and_underscore_keys
76
+ inject({}) do |options, (key, value)|
77
+ options[(key.to_s.underscore.to_sym rescue key) || key] = value
78
+ options
79
+ end
80
+ end
81
+ end
82
+
83
+ unless Hash.method_defined? :symbolize_and_underscore_keys!
84
+ def symbolize_and_underscore_keys!
85
+ self.replace(self.symbolize_and_underscore_keys)
86
+ end
87
+ end
88
+
89
+ end
90
+ # end