turba_kit 0.0.8 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (191) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -0
  3. data/Gemfile +0 -7
  4. data/lib/turba_kit.rb +117 -18
  5. data/lib/turba_kit/availability.rb +7 -0
  6. data/lib/turba_kit/call_to_action.rb +25 -0
  7. data/lib/turba_kit/checkins.rb +30 -0
  8. data/lib/turba_kit/content.rb +25 -0
  9. data/lib/turba_kit/countries.rb +11 -0
  10. data/lib/turba_kit/crowd_table.rb +37 -0
  11. data/lib/turba_kit/error.rb +15 -169
  12. data/lib/turba_kit/link.rb +25 -0
  13. data/lib/turba_kit/misc.rb +25 -0
  14. data/lib/turba_kit/notification.rb +25 -0
  15. data/lib/turba_kit/phonenumber.rb +25 -0
  16. data/lib/turba_kit/place.rb +25 -0
  17. data/lib/turba_kit/services.rb +39 -0
  18. data/lib/turba_kit/tip.rb +25 -0
  19. data/lib/turba_kit/units.rb +36 -0
  20. data/lib/turba_kit/version.rb +1 -1
  21. data/spec/cassettes/availability.json +1 -0
  22. data/spec/cassettes/checkins.json +1 -0
  23. data/spec/cassettes/countries.json +1 -0
  24. data/spec/cassettes/country_fr_.json +1 -0
  25. data/spec/cassettes/create_checkins.json +1 -0
  26. data/spec/cassettes/create_service_content.json +1 -0
  27. data/spec/cassettes/create_service_link.json +1 -0
  28. data/spec/cassettes/create_service_notification.json +1 -0
  29. data/spec/cassettes/create_service_phonenumber.json +1 -0
  30. data/spec/cassettes/create_service_place.json +1 -0
  31. data/spec/cassettes/create_service_tip.json +1 -0
  32. data/spec/cassettes/search_service.json +1 -0
  33. data/spec/cassettes/service.json +1 -0
  34. data/spec/cassettes/service_crowd_table.json +1 -0
  35. data/spec/cassettes/update_service_content.json +1 -0
  36. data/spec/cassettes/update_service_crowd_table.json +1 -0
  37. data/spec/cassettes/update_service_link.json +1 -0
  38. data/spec/cassettes/update_service_phonenumber.json +1 -0
  39. data/spec/cassettes/update_service_place.json +1 -0
  40. data/spec/cassettes/update_service_tip.json +1 -0
  41. data/spec/lib/availability_spec.rb +15 -0
  42. data/spec/lib/checkins_spec.rb +22 -0
  43. data/spec/lib/content_spec.rb +31 -0
  44. data/spec/lib/countries_spec.rb +12 -14
  45. data/spec/lib/crowd_table_spec.rb +24 -0
  46. data/spec/lib/link_spec.rb +30 -0
  47. data/spec/lib/notification_spec.rb +17 -0
  48. data/spec/lib/phonenumber_spec.rb +28 -0
  49. data/spec/lib/place_spec.rb +23 -36
  50. data/spec/lib/services_spec.rb +11 -53
  51. data/spec/lib/tip_spec.rb +30 -0
  52. data/spec/spec_helper.rb +0 -4
  53. data/turba_kit.gemspec +5 -2
  54. metadata +115 -269
  55. data/lib/turba_kit/arguments.rb +0 -14
  56. data/lib/turba_kit/authentication.rb +0 -10
  57. data/lib/turba_kit/client.rb +0 -168
  58. data/lib/turba_kit/client/categories.rb +0 -41
  59. data/lib/turba_kit/client/checkins.rb +0 -14
  60. data/lib/turba_kit/client/comments.rb +0 -9
  61. data/lib/turba_kit/client/contents.rb +0 -26
  62. data/lib/turba_kit/client/countries.rb +0 -14
  63. data/lib/turba_kit/client/crowd_table.rb +0 -25
  64. data/lib/turba_kit/client/links.rb +0 -26
  65. data/lib/turba_kit/client/migrations.rb +0 -15
  66. data/lib/turba_kit/client/notifications.rb +0 -26
  67. data/lib/turba_kit/client/organismes.rb +0 -41
  68. data/lib/turba_kit/client/phonenumbers.rb +0 -26
  69. data/lib/turba_kit/client/places.rb +0 -26
  70. data/lib/turba_kit/client/search.rb +0 -9
  71. data/lib/turba_kit/client/services.rb +0 -41
  72. data/lib/turba_kit/client/tips.rb +0 -26
  73. data/lib/turba_kit/configurable.rb +0 -74
  74. data/lib/turba_kit/default.rb +0 -102
  75. data/lib/turba_kit/response/raise_error.rb +0 -20
  76. data/spec/cassettes/TurbaKit_Client_Categories/_categories/handles_the_country_code_option.json +0 -1
  77. data/spec/cassettes/TurbaKit_Client_Categories/_category/returns_a_category.json +0 -1
  78. data/spec/cassettes/TurbaKit_Client_Categories/_create_category/creates_a_category.json +0 -1
  79. data/spec/cassettes/TurbaKit_Client_Categories/_delete_category/deletes_a_category_and_returns_true.json +0 -1
  80. data/spec/cassettes/TurbaKit_Client_Categories/_delete_category/returns_false_if_category_doesn_t_exist.json +0 -1
  81. data/spec/cassettes/TurbaKit_Client_Categories/_update_category/updates_a_category.json +0 -1
  82. data/spec/cassettes/TurbaKit_Client_Contents/_create_content/creates_a_content.json +0 -1
  83. data/spec/cassettes/TurbaKit_Client_Contents/_delete_content/deletes_a_content.json +0 -1
  84. data/spec/cassettes/TurbaKit_Client_Contents/_service_content/returns_a_content.json +0 -1
  85. data/spec/cassettes/TurbaKit_Client_Contents/_service_contents/lists_contents.json +0 -1
  86. data/spec/cassettes/TurbaKit_Client_Contents/_update_content/updates_a_content.json +0 -1
  87. data/spec/cassettes/TurbaKit_Client_Countries/_countries/returns_all_countries.json +0 -1
  88. data/spec/cassettes/TurbaKit_Client_Countries/_country/returns_a_country.json +0 -1
  89. data/spec/cassettes/TurbaKit_Client_Crowds/_create_crowd/creates_a_crowd.json +0 -1
  90. data/spec/cassettes/TurbaKit_Client_Crowds/_delete_crowd/deletes_a_crowd.json +0 -1
  91. data/spec/cassettes/TurbaKit_Client_Crowds/_service_crowd/returns_a_crowd.json +0 -1
  92. data/spec/cassettes/TurbaKit_Client_Crowds/_service_crowds/lists_crowds.json +0 -1
  93. data/spec/cassettes/TurbaKit_Client_Crowds/_update_crowd/updates_a_crowd.json +0 -1
  94. data/spec/cassettes/TurbaKit_Client_Links/_create_link/creates_a_link.json +0 -1
  95. data/spec/cassettes/TurbaKit_Client_Links/_delete_link/deletes_a_link.json +0 -1
  96. data/spec/cassettes/TurbaKit_Client_Links/_service_link/returns_a_link.json +0 -1
  97. data/spec/cassettes/TurbaKit_Client_Links/_service_links/lists_links.json +0 -1
  98. data/spec/cassettes/TurbaKit_Client_Links/_update_link/updates_a_link.json +0 -1
  99. data/spec/cassettes/TurbaKit_Client_Notifications/_create_notification/creates_a_notification.json +0 -1
  100. data/spec/cassettes/TurbaKit_Client_Notifications/_delete_notification/deletes_a_notification.json +0 -1
  101. data/spec/cassettes/TurbaKit_Client_Notifications/_service_notification/returns_a_notification.json +0 -1
  102. data/spec/cassettes/TurbaKit_Client_Notifications/_service_notifications/lists_notifications.json +0 -1
  103. data/spec/cassettes/TurbaKit_Client_Notifications/_update_notification/updates_a_notification.json +0 -1
  104. data/spec/cassettes/TurbaKit_Client_Organismes/_create_organisme/creates_an_organisme.json +0 -1
  105. data/spec/cassettes/TurbaKit_Client_Organismes/_delete_organisme/deletes_a_organisme_and_returns_true.json +0 -1
  106. data/spec/cassettes/TurbaKit_Client_Organismes/_delete_organisme/returns_false_if_organisme_doesn_t_exist.json +0 -1
  107. data/spec/cassettes/TurbaKit_Client_Organismes/_organisme/returns_a_organisme.json +0 -1
  108. data/spec/cassettes/TurbaKit_Client_Organismes/_organismes/handles_the_country_code_option.json +0 -1
  109. data/spec/cassettes/TurbaKit_Client_Organismes/_update_organisme/updates_an_organisme.json +0 -1
  110. data/spec/cassettes/TurbaKit_Client_Phonenumbers/_create_phonenumber/creates_a_phonenumber.json +0 -1
  111. data/spec/cassettes/TurbaKit_Client_Phonenumbers/_delete_phonenumber/deletes_a_phonenumber.json +0 -1
  112. data/spec/cassettes/TurbaKit_Client_Phonenumbers/_service_phonenumber/returns_a_phonenumber.json +0 -1
  113. data/spec/cassettes/TurbaKit_Client_Phonenumbers/_service_phonenumbers/lists_phonenumbers.json +0 -1
  114. data/spec/cassettes/TurbaKit_Client_Phonenumbers/_update_phonenumber/updates_a_phonenumber.json +0 -1
  115. data/spec/cassettes/TurbaKit_Client_Places/_create_place/creates_a_place.json +0 -1
  116. data/spec/cassettes/TurbaKit_Client_Places/_delete_place/deletes_a_place.json +0 -1
  117. data/spec/cassettes/TurbaKit_Client_Places/_service_place/returns_a_place.json +0 -1
  118. data/spec/cassettes/TurbaKit_Client_Places/_service_places/lists_places.json +0 -1
  119. data/spec/cassettes/TurbaKit_Client_Places/_update_place/updates_a_place.json +0 -1
  120. data/spec/cassettes/TurbaKit_Client_Services/_service/returns_a_service.json +0 -1
  121. data/spec/cassettes/TurbaKit_Client_Services/_services/handles_the_country_code_option.json +0 -1
  122. data/spec/cassettes/TurbaKit_Client_Tips/_create_tip/creates_a_tip.json +0 -1
  123. data/spec/cassettes/TurbaKit_Client_Tips/_delete_tip/deletes_a_tip.json +0 -1
  124. data/spec/cassettes/TurbaKit_Client_Tips/_service_tip/returns_a_tip.json +0 -1
  125. data/spec/cassettes/TurbaKit_Client_Tips/_service_tips/lists_tips.json +0 -1
  126. data/spec/cassettes/TurbaKit_Client_Tips/_update_tip/updates_a_tip.json +0 -1
  127. data/spec/cassettes/Turkit_Client_Categories/_categories/handles_the_country_code_option.json +0 -1
  128. data/spec/cassettes/Turkit_Client_Categories/_categories/returns_all_categories.json +0 -1
  129. data/spec/cassettes/Turkit_Client_Categories/_category/returns_a_category.json +0 -1
  130. data/spec/cassettes/Turkit_Client_Categories/_create_category/creates_a_category.json +0 -1
  131. data/spec/cassettes/Turkit_Client_Categories/_delete_category/deletes_a_category_and_returns_true.json +0 -1
  132. data/spec/cassettes/Turkit_Client_Categories/_delete_category/returns_false_if_category_doesn_t_exist.json +0 -1
  133. data/spec/cassettes/Turkit_Client_Categories/_search_category/returns_a_list_of_categories.json +0 -1
  134. data/spec/cassettes/Turkit_Client_Categories/_update_category/updates_a_category.json +0 -1
  135. data/spec/cassettes/Turkit_Client_Contents/_create_content/creates_a_content.json +0 -1
  136. data/spec/cassettes/Turkit_Client_Contents/_delete_content/deletes_a_content.json +0 -1
  137. data/spec/cassettes/Turkit_Client_Contents/_service_content/returns_a_content.json +0 -1
  138. data/spec/cassettes/Turkit_Client_Contents/_service_contents/lists_contents.json +0 -1
  139. data/spec/cassettes/Turkit_Client_Contents/_update_content/updates_a_content.json +0 -1
  140. data/spec/cassettes/Turkit_Client_Countries/_countries/returns_all_countries.json +0 -1
  141. data/spec/cassettes/Turkit_Client_Countries/_country/returns_a_country.json +0 -1
  142. data/spec/cassettes/Turkit_Client_Crowds/_create_crowd/creates_a_crowd.json +0 -1
  143. data/spec/cassettes/Turkit_Client_Crowds/_delete_crowd/deletes_a_crowd.json +0 -1
  144. data/spec/cassettes/Turkit_Client_Crowds/_service_crowd/returns_a_crowd.json +0 -1
  145. data/spec/cassettes/Turkit_Client_Crowds/_service_crowds/lists_crowds.json +0 -1
  146. data/spec/cassettes/Turkit_Client_Crowds/_update_crowd/updates_a_crowd.json +0 -1
  147. data/spec/cassettes/Turkit_Client_Links/_create_link/creates_a_link.json +0 -1
  148. data/spec/cassettes/Turkit_Client_Links/_delete_link/deletes_a_link.json +0 -1
  149. data/spec/cassettes/Turkit_Client_Links/_service_link/returns_a_link.json +0 -1
  150. data/spec/cassettes/Turkit_Client_Links/_service_links/lists_links.json +0 -1
  151. data/spec/cassettes/Turkit_Client_Links/_update_link/updates_a_link.json +0 -1
  152. data/spec/cassettes/Turkit_Client_Notifications/_create_notification/creates_a_notification.json +0 -1
  153. data/spec/cassettes/Turkit_Client_Notifications/_delete_notification/deletes_a_notification.json +0 -1
  154. data/spec/cassettes/Turkit_Client_Notifications/_service_notification/returns_a_notification.json +0 -1
  155. data/spec/cassettes/Turkit_Client_Notifications/_service_notifications/lists_notifications.json +0 -1
  156. data/spec/cassettes/Turkit_Client_Notifications/_update_notification/updates_a_notification.json +0 -1
  157. data/spec/cassettes/Turkit_Client_Organismes/_create_organisme/creates_an_organisme.json +0 -1
  158. data/spec/cassettes/Turkit_Client_Organismes/_delete_organisme/deletes_a_organisme_and_returns_true.json +0 -1
  159. data/spec/cassettes/Turkit_Client_Organismes/_delete_organisme/returns_false_if_organisme_doesn_t_exist.json +0 -1
  160. data/spec/cassettes/Turkit_Client_Organismes/_organisme/returns_a_organisme.json +0 -1
  161. data/spec/cassettes/Turkit_Client_Organismes/_organismes/handles_the_country_code_option.json +0 -1
  162. data/spec/cassettes/Turkit_Client_Organismes/_organismes/returns_all_organismes.json +0 -1
  163. data/spec/cassettes/Turkit_Client_Organismes/_search_organisme/returns_a_list_of_organismes.json +0 -1
  164. data/spec/cassettes/Turkit_Client_Organismes/_update_organisme/updates_an_organisme.json +0 -1
  165. data/spec/cassettes/Turkit_Client_Phonenumbers/_create_phonenumber/creates_a_phonenumber.json +0 -1
  166. data/spec/cassettes/Turkit_Client_Phonenumbers/_delete_phonenumber/deletes_a_phonenumber.json +0 -1
  167. data/spec/cassettes/Turkit_Client_Phonenumbers/_service_phonenumber/returns_a_phonenumber.json +0 -1
  168. data/spec/cassettes/Turkit_Client_Phonenumbers/_service_phonenumbers/lists_phonenumbers.json +0 -1
  169. data/spec/cassettes/Turkit_Client_Phonenumbers/_update_phonenumber/updates_a_phonenumber.json +0 -1
  170. data/spec/cassettes/Turkit_Client_Places/_create_place/creates_a_place.json +0 -1
  171. data/spec/cassettes/Turkit_Client_Places/_delete_place/deletes_a_place.json +0 -1
  172. data/spec/cassettes/Turkit_Client_Places/_service_place/returns_a_place.json +0 -1
  173. data/spec/cassettes/Turkit_Client_Places/_service_places/lists_places.json +0 -1
  174. data/spec/cassettes/Turkit_Client_Places/_update_place/updates_a_place.json +0 -1
  175. data/spec/cassettes/Turkit_Client_Services/_search_service/returns_a_list_of_services.json +0 -1
  176. data/spec/cassettes/Turkit_Client_Services/_service/returns_a_service.json +0 -1
  177. data/spec/cassettes/Turkit_Client_Services/_services/handles_the_country_code_option.json +0 -1
  178. data/spec/cassettes/Turkit_Client_Services/_services/returns_all_services.json +0 -1
  179. data/spec/cassettes/Turkit_Client_Tips/_create_tip/creates_a_tip.json +0 -1
  180. data/spec/cassettes/Turkit_Client_Tips/_delete_tip/deletes_a_tip.json +0 -1
  181. data/spec/cassettes/Turkit_Client_Tips/_service_tip/returns_a_tip.json +0 -1
  182. data/spec/cassettes/Turkit_Client_Tips/_service_tips/lists_tips.json +0 -1
  183. data/spec/cassettes/Turkit_Client_Tips/_update_tip/updates_a_tip.json +0 -1
  184. data/spec/lib/categories_spec.rb +0 -64
  185. data/spec/lib/contents_spec.rb +0 -47
  186. data/spec/lib/crowds_spec.rb +0 -47
  187. data/spec/lib/links_spec.rb +0 -47
  188. data/spec/lib/notifications_spec.rb +0 -47
  189. data/spec/lib/organismes_spec.rb +0 -64
  190. data/spec/lib/phonenumbers_spec.rb +0 -47
  191. data/spec/lib/tips_spec.rb +0 -47
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 032cbfe91ba7465a1f61586f8147bf6745c64bdc
4
- data.tar.gz: ff76c291e3c7ef08df77e3dd9c0a3b700d2f7001
3
+ metadata.gz: e5209bf98ef2ab1dd6e3f084de4d71f26ef9d12d
4
+ data.tar.gz: f598ddb1f93ed74eb97ac1c0fb162c2a77d3abc9
5
5
  SHA512:
6
- metadata.gz: a713192585164fe8fba1633340d652235e409e23956ab031ef0f0498893487d56ad2b80b00035efd6c3f5fb1da45c7dc5458537f43cea89f6f738cec28969a3c
7
- data.tar.gz: 9f2369295552e66e3cd1ee5be8538f38d9469382dc884eea2a2fe84ac464cea72ac755e0e7f12d8ee001dee61b1ef73b8b94c451a7d0ce8d7fb2d98ab9182883
6
+ metadata.gz: 9781057e03f8b80e756188bdcc132384bd73a0ce20f940018c9e1dc017ef46008122d38623bf427895dc9ee0e48f30b3f1078f689e391af954a5246ec373dab5
7
+ data.tar.gz: 4cfc61901cd6dff83d5e890e1338479c3cbdf4c8179fd3db16d429998880f2f1945fb6692379eaad1eada6e4bcc8cb3096d795a79fbd257c666c76e010264fc8
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.2.2
data/Gemfile CHANGED
@@ -1,15 +1,8 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gem 'rake'
4
- gem 'faraday'
5
- gem 'sawyer'
6
4
 
7
5
  group :test do
8
- gem 'webmock'
9
- gem 'vcr'
10
- gem 'turn'
11
- gem 'rake'
12
- gem 'rspec', '~> 3.0.0.beta2'
13
6
  end
14
7
 
15
8
  gemspec
data/lib/turba_kit.rb CHANGED
@@ -1,27 +1,126 @@
1
- require 'turba_kit/client'
2
- require 'turba_kit/default'
1
+ require 'oj'
2
+ require 'typhoeus'
3
+ require 'recursive-open-struct'
4
+ require 'turba_kit/error'
5
+ require 'turba_kit/countries'
6
+ require 'turba_kit/checkins'
7
+ require 'turba_kit/availability'
8
+ require 'turba_kit/units'
9
+ require 'turba_kit/services'
10
+ require 'turba_kit/crowd_table'
11
+ require 'turba_kit/link'
12
+ require 'turba_kit/misc'
13
+ require 'turba_kit/call_to_action'
14
+ require 'turba_kit/phonenumber'
15
+ require 'turba_kit/tip'
16
+ require 'turba_kit/content'
17
+ require 'turba_kit/place'
18
+ require 'turba_kit/notification'
19
+ require 'active_support/core_ext/hash'
3
20
 
4
- # Ruby toolkit for the Turba API
5
21
  module TurbaKit
6
- class << self
7
- include TurbaKit::Configurable
8
- def client
9
- @client = TurbaKit::Client.new(options) unless defined?(@client) && @client.same_options?(options)
10
- @client
22
+ class Client
23
+ include TurbaKit::Countries
24
+ include TurbaKit::Checkins
25
+ include TurbaKit::Availability
26
+ include TurbaKit::Units
27
+ include TurbaKit::Services
28
+ include TurbaKit::CrowdTable
29
+ include TurbaKit::Link
30
+ include TurbaKit::Misc
31
+ include TurbaKit::CallToAction
32
+ include TurbaKit::Phonenumber
33
+ include TurbaKit::Tip
34
+ include TurbaKit::Content
35
+ include TurbaKit::Place
36
+ include TurbaKit::Notification
37
+
38
+ def initialize(api_key, options = {})
39
+ @api_key = api_key
40
+ default_options = {
41
+ version: '/v2',
42
+ domain: 'api.turba-webservices.com',
43
+ scheme: 'https'
44
+ }
45
+ @options = default_options.merge(options)
46
+ end
47
+
48
+ def api_url
49
+ @api_url ||= "#{@options[:scheme]}://#{@options[:domain]}#{@options[:version]}"
50
+ end
51
+
52
+ def default_params
53
+ @default_params ||= { api_key: @api_key }
54
+ end
55
+
56
+ def put_request(endpoint, options = {})
57
+ options[:namespace] ||= nil
58
+ options[:accept] ||= "application/json"
59
+ options[:params] ||= {}
60
+
61
+ request = Typhoeus::Request.new(
62
+ "#{api_url}#{endpoint}",
63
+ method: :put,
64
+ params: default_params,
65
+ body: Oj.dump(options[:params], mode: :compat),
66
+ headers: { "Content-Type" => options[:accept] }
67
+ ).run
68
+ response(request, options[:namespace])
69
+ end
70
+
71
+ def post_request(endpoint, options = {})
72
+ options[:namespace] ||= nil
73
+ options[:accept] ||= "application/json"
74
+ options[:params] ||= {}
75
+
76
+ request = Typhoeus::Request.new(
77
+ "#{api_url}#{endpoint}",
78
+ method: :post,
79
+ params: default_params,
80
+ body: Oj.dump(options[:params], mode: :compat),
81
+ headers: { "Content-Type" => options[:accept] }
82
+ ).run
83
+ response(request, options[:namespace])
84
+ end
85
+
86
+ def delete_request(endpoint)
87
+ request = Typhoeus::Request.new(
88
+ "#{api_url}#{endpoint}",
89
+ method: :delete,
90
+ params: default_params,
91
+ ).run
92
+
93
+ response(request, nil)
94
+ end
95
+
96
+ def get_request(endpoint, options = {})
97
+ options[:namespace] ||= nil
98
+ options[:accept] ||= "application/json"
99
+ options[:params] ||= {}
100
+
101
+ request = Typhoeus::Request.new(
102
+ "#{api_url}#{endpoint}",
103
+ method: :get,
104
+ params: default_params.merge(options[:params]),
105
+ headers: { Accept: options[:accept] }
106
+ ).run
107
+
108
+ response(request, options[:namespace])
11
109
  end
12
110
 
13
- # @private
14
- def respond_to_missing?(method_name, include_private=false); client.respond_to?(method_name, include_private); end if RUBY_VERSION >= "1.9"
15
- # @private
16
- def respond_to?(method_name, include_private=false); client.respond_to?(method_name, include_private) || super; end if RUBY_VERSION < "1.9"
111
+ def response(request, namespace)
112
+ body = Oj.load(request.body)
113
+ body = body.with_indifferent_access unless body.nil?
114
+ status = request.options[:response_code]
115
+ body ||= request.body
17
116
 
18
- private
117
+ if (400..599).include?(status)
118
+ return Error.from_response(body, status)
119
+ end
19
120
 
20
- def method_missing(method_name, *args, &block)
21
- return super unless client.respond_to?(method_name)
22
- client.send(method_name, *args, &block)
121
+ return "" if body.empty?
122
+
123
+ namespace ? RecursiveOpenStruct.new(body[namespace], recurse_over_arrays: true) : RecursiveOpenStruct.new(body, recurse_over_arrays: true)
23
124
  end
24
125
  end
25
126
  end
26
-
27
- TurbaKit.setup
@@ -0,0 +1,7 @@
1
+ module TurbaKit
2
+ module Availability
3
+ def availability
4
+ get_request('/status')
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,25 @@
1
+ module TurbaKit
2
+ module CallToAction
3
+ def update_service_call_to_action(service_id, call_to_action_id, options = {})
4
+ put_request("/services/#{service_id}/call_to_actions/#{call_to_action_id}", {
5
+ namespace: :call_to_action,
6
+ params: {
7
+ call_to_action: options
8
+ }
9
+ })
10
+ end
11
+
12
+ def create_service_call_to_action(service_id, options = {})
13
+ post_request("/services/#{service_id}/call_to_actions", {
14
+ namespace: :call_to_action,
15
+ params: {
16
+ call_to_action: options
17
+ }
18
+ })
19
+ end
20
+
21
+ def delete_service_call_to_action(service_id, call_to_action_id, options = {})
22
+ delete_request("/services/#{service_id}/call_to_actions/#{call_to_action_id}")
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,30 @@
1
+ module TurbaKit
2
+ module Checkins
3
+ def checkins(options = {})
4
+ default = {
5
+ page: 0,
6
+ per_page: 10,
7
+ published: true,
8
+ country_code: 'FR',
9
+ type: 'parent'
10
+ }
11
+
12
+ get_request("/checkins", {params: default.merge(options)})
13
+ end
14
+
15
+ def create_checkin(service_id, wait, options = {})
16
+ default = {
17
+ user: :guest,
18
+ location: 'N/A',
19
+ platform: :web,
20
+ service_id: service_id,
21
+ wait: wait
22
+ }
23
+ post_request("/checkins", {
24
+ params: {
25
+ checkin: default.merge(options)
26
+ }
27
+ })
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,25 @@
1
+ module TurbaKit
2
+ module Content
3
+ def update_service_content(service_id, content_id, options = {})
4
+ put_request("/services/#{service_id}/contents/#{content_id}", {
5
+ namespace: :content,
6
+ params: {
7
+ content: options
8
+ }
9
+ })
10
+ end
11
+
12
+ def create_service_content(service_id, options = {})
13
+ post_request("/services/#{service_id}/contents", {
14
+ namespace: :content,
15
+ params: {
16
+ content: options
17
+ }
18
+ })
19
+ end
20
+
21
+ def delete_service_content(service_id, content_id, options = {})
22
+ delete_request("/services/#{service_id}/contents/#{content_id}")
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,11 @@
1
+ module TurbaKit
2
+ module Countries
3
+ def countries
4
+ get_request('/countries', {namespace: :countries})
5
+ end
6
+
7
+ def country(country_code)
8
+ get_request("/countries/#{country_code}", {namespace: :country})
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,37 @@
1
+ module TurbaKit
2
+ module CrowdTable
3
+ def service_crowd_table(service_id, options = {})
4
+ default = {
5
+ from: Time.now.beginning_of_day.to_datetime.new_offset(0).to_i,
6
+ to: (Time.now + 6.days).beginning_of_day.to_datetime.new_offset(0).to_i
7
+ }
8
+
9
+ get_request("/services/#{service_id}/crowd_table", {
10
+ namespace: :crowd_table,
11
+ params: default.merge(options)
12
+ })
13
+ end
14
+
15
+ def update_service_crowd_table(service_id, crowd_table_id, options = {})
16
+ put_request("/services/#{service_id}/crowd_tables/#{crowd_table_id}", {
17
+ namespace: :crowd_table,
18
+ params: {
19
+ crowd_table: options
20
+ }
21
+ })
22
+ end
23
+
24
+ def create_service_crowd_table(service_id, options = {})
25
+ post_request("/services/#{service_id}/crowd_table", {
26
+ namespace: :crowd_table,
27
+ params: {
28
+ crowd_table: options
29
+ }
30
+ })
31
+ end
32
+
33
+ def delete_service_crowd_table(service_id, options = {})
34
+ delete_request("/services/#{service_id}/crowd_table")
35
+ end
36
+ end
37
+ end
@@ -1,23 +1,12 @@
1
1
  module TurbaKit
2
- # Custom error class for rescuing from all Turba errors
3
2
  class Error < StandardError
4
- attr_accessor :hash_message
5
-
6
- # Returns the appropriate TurbaKit::Error subclass based
7
- # on status and response message
8
- #
9
- # @param [Hash] response HTTP response
10
- # @return [TurbaKit::Error]
11
- def self.from_response(response)
12
- status = response[:status].to_i
13
- body = response[:body].to_s
14
- headers = response[:response_headers]
15
-
16
- if klass = case status
3
+ def self.from_response(body, status)
4
+ if klass = case status.to_i
17
5
  when 400 then TurbaKit::BadRequest
18
- when 401 then error_for_401(headers)
19
- when 403 then error_for_403(body)
6
+ when 401 then TurbaKit::Unauthorized
7
+ when 403 then TurbaKit::Forbidden
20
8
  when 404 then TurbaKit::NotFound
9
+ when 405 then TurbaKit::MethodNotAllowed
21
10
  when 406 then TurbaKit::NotAcceptable
22
11
  when 409 then TurbaKit::Conflict
23
12
  when 415 then TurbaKit::UnsupportedMediaType
@@ -29,181 +18,38 @@ module TurbaKit
29
18
  when 503 then TurbaKit::ServiceUnavailable
30
19
  when 500..599 then TurbaKit::ServerError
31
20
  end
32
- klass.new(response)
33
- end
34
- end
35
-
36
- def initialize(response=nil)
37
- @response = response
38
- super(build_error_message)
39
- @status = @response[:status]
40
- @hash_message = build_hash_message
41
- end
42
-
43
- # Documentation URL returned by the API for some errors
44
- #
45
- # @return [String]
46
- def documentation_url
47
- data[:documentation_url] if data.is_a? Hash
48
- end
49
-
50
- # Returns most appropriate error for 401 HTTP status code
51
- # @private
52
- def self.error_for_401(headers)
53
- if TurbaKit::OneTimePasswordRequired.required_header(headers)
54
- TurbaKit::OneTimePasswordRequired
55
- else
56
- TurbaKit::Unauthorized
57
- end
58
- end
59
-
60
- # Returns most appropriate error for 403 HTTP status code
61
- # @private
62
- def self.error_for_403(body)
63
- if body =~ /rate limit exceeded/i
64
- TurbaKit::TooManyRequests
65
- elsif body =~ /login attempts exceeded/i
66
- TurbaKit::TooManyLoginAttempts
67
- else
68
- TurbaKit::Forbidden
21
+ klass.new(body, status)
69
22
  end
70
23
  end
71
24
 
72
- # Array of validation errors
73
- # @return [Array<Hash>] Error info
74
- def errors
75
- if data && data.is_a?(Hash)
76
- data[:errors] || []
77
- else
78
- []
79
- end
80
- end
81
-
82
- private
83
-
84
- def data
85
- @data ||=
86
- if (body = @response[:body]) && !body.empty?
87
- if body.is_a?(String) &&
88
- @response[:response_headers] &&
89
- @response[:response_headers][:content_type] =~ /json/
90
-
91
- Sawyer::Agent.serializer.decode(body)
92
- else
93
- body
94
- end
95
- else
96
- nil
97
- end
98
- end
99
-
100
- def response_message
101
- case data
102
- when Hash
103
- data[:message]
104
- when String
105
- data
106
- end
107
- end
108
-
109
- def response_error
110
- "Error: #{data[:error]}" if data.is_a?(Hash) && data[:error]
111
- end
112
-
113
- def response_error_summary
114
- return nil unless data.is_a?(Hash) && !Array(data[:errors]).empty?
115
- summary = "\nError summary:\n"
116
- summary << data[:errors].map{|x| x}.join("\n")
117
- summary
118
- end
119
-
120
- def build_hash_message
121
- response = {}
122
- return response if @response.nil?
123
- response[:method] = @response[:method].to_s.upcase
124
- response[:status] = @response[:status]
125
- response[:message] = response_message unless response_message.nil?
126
-
127
- data_array = data[:errors].map do |x|
128
- x.is_a?(Hash) ? x[:message] : x
129
- end unless data[:errors].blank?
130
-
131
- response[:errors] = data_array
132
- response[:documentation_url] = documentation_url unless documentation_url.nil?
133
- response
134
- end
135
-
136
- def build_error_message
137
- return nil if @response.nil?
25
+ def initialize(body, status)
26
+ message = {
27
+ status: status,
28
+ error: body['error']
29
+ }
138
30
 
139
- message = "#{@response[:method].to_s.upcase} "
140
- message << redact_url(@response[:url].to_s) + ": "
141
- message << "#{@response[:status]} - "
142
- message << "#{response_message}" unless response_message.nil?
143
- message << "#{response_error}" unless response_error.nil?
144
- message << "#{response_error_summary}" unless response_error_summary.nil?
145
- message << " // See: #{documentation_url}" unless documentation_url.nil?
146
- message
31
+ super(Oj.dump(message, mode: :compat))
32
+ raise self
147
33
  end
148
34
 
149
- def redact_url(url_string)
150
- %w[api_key].each do |token|
151
- url_string.gsub!(/#{token}=\S+/, "#{token}=(redacted)") if url_string.include? token
152
- end
153
- url_string
154
- end
155
35
  end
156
36
 
157
37
  # Raised on errors in the 400-499 range
158
38
  class ClientError < Error; end
159
-
160
- # Raised when Turba returns a 400 HTTP status code
161
39
  class BadRequest < ClientError; end
162
-
163
- # Raised when Turba returns a 401 HTTP status code
164
40
  class Unauthorized < ClientError; end
165
-
166
- # Raised when Turba returns a 403 HTTP status code
167
41
  class Forbidden < ClientError; end
168
-
169
- # Raised when Turba returns a 403 HTTP status code
170
- # and body matches 'rate limit exceeded'
171
- class TooManyRequests < Forbidden; end
172
-
173
- # Raised when Turba returns a 403 HTTP status code
174
- # and body matches 'login attempts exceeded'
175
- class TooManyLoginAttempts < Forbidden; end
176
-
177
- # Raised when Turba returns a 404 HTTP status code
178
42
  class NotFound < ClientError; end
179
-
180
- # Raised when Turba returns a 406 HTTP status code
43
+ class MethodNotAllowed < ClientError; end
181
44
  class NotAcceptable < ClientError; end
182
-
183
- # Raised when Turba returns a 409 HTTP status code
184
45
  class Conflict < ClientError; end
185
-
186
- # Raised when Turba returns a 414 HTTP status code
187
46
  class UnsupportedMediaType < ClientError; end
188
-
189
- # Raised when Turba returns a 422 HTTP status code
190
47
  class UnprocessableEntity < ClientError; end
191
-
192
- # Raised on errors in the 500-599 range
193
48
  class ServerError < Error; end
194
-
195
- # Raised when Turba returns a 500 HTTP status code
196
49
  class InternalServerError < ServerError; end
197
-
198
- # Raised when Turba returns a 501 HTTP status code
199
50
  class NotImplemented < ServerError; end
200
-
201
- # Raised when Turba returns a 502 HTTP status code
202
51
  class BadGateway < ServerError; end
203
-
204
- # Raised when Turba returns a 503 HTTP status code
205
52
  class ServiceUnavailable < ServerError; end
206
-
207
- # Raised when client fails to provide valid Content-Type
208
53
  class MissingContentType < ArgumentError; end
54
+ class ApplicationCredentialsRequired < StandardError; end
209
55
  end