turba_kit 0.0.8 → 1.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 (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