the-city-admin 0.1.0 → 0.1.1

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 (135) hide show
  1. data/.autotest +9 -0
  2. data/.gitignore +4 -0
  3. data/.rspec +2 -0
  4. data/.rvmrc +1 -0
  5. data/.yardoc/checksums +50 -0
  6. data/.yardoc/object_types +0 -0
  7. data/.yardoc/objects/root.dat +0 -0
  8. data/.yardoc/proxy_types +0 -0
  9. data/Gemfile +11 -0
  10. data/Gemfile.lock +51 -0
  11. data/README +1 -0
  12. data/Rakefile +32 -0
  13. data/index.rb +123 -0
  14. data/lib/common.rb +163 -72
  15. data/lib/the_city_admin.rb +2 -2
  16. data/notes.txt +21 -0
  17. data/spec/api/address_list_spec.rb +0 -0
  18. data/spec/api/address_spec.rb +0 -0
  19. data/spec/api/group_address_list_spec.rb +93 -0
  20. data/spec/api/group_address_spec.rb +19 -0
  21. data/spec/api/group_checkin_list_spec.rb +93 -0
  22. data/spec/api/group_event_attendance_list_spec.rb +93 -0
  23. data/spec/api/group_export_spec.rb +19 -0
  24. data/spec/api/group_invitation_list_spec.rb +23 -0
  25. data/spec/api/group_invitation_spec.rb +19 -0
  26. data/spec/api/group_list_spec.rb +23 -0
  27. data/spec/api/group_role_list_spec.rb +23 -0
  28. data/spec/api/group_role_spec.rb +19 -0
  29. data/spec/api/group_spec.rb +19 -0
  30. data/spec/api/group_tag_list_spec.rb +23 -0
  31. data/spec/api/group_tag_spec.rb +19 -0
  32. data/spec/api/metric_list_spec.rb +22 -0
  33. data/spec/api/metric_measurement_list_spec.rb +23 -0
  34. data/spec/api/metric_measurement_spec.rb +19 -0
  35. data/spec/api/metric_spec.rb +19 -0
  36. data/spec/api/role_list_spec.rb +75 -0
  37. data/spec/api/role_spec.rb +19 -0
  38. data/spec/api/skill_list_spec.rb +76 -0
  39. data/spec/api/skilled_user_id_list_spec.rb +82 -0
  40. data/spec/api/skilled_user_list_spec.rb +82 -0
  41. data/spec/api/tag_group_list_spec.rb +72 -0
  42. data/spec/api/tag_list_spec.rb +77 -0
  43. data/spec/api/tag_spec.rb +19 -0
  44. data/spec/api/terminology_list_spec.rb +75 -0
  45. data/spec/api/terminology_spec.rb +19 -0
  46. data/spec/api/user_address_list_spec.rb +92 -0
  47. data/spec/api/user_address_spec.rb +19 -0
  48. data/spec/api/user_admin_privilege_list_spec.rb +94 -0
  49. data/spec/api/user_admin_privilege_spec.rb +19 -0
  50. data/spec/api/user_barcode_spec.rb +19 -0
  51. data/spec/api/user_family_list_spec.rb +91 -0
  52. data/spec/api/user_family_member_spec.rb +19 -0
  53. data/spec/api/user_invitation_list_spec.rb +91 -0
  54. data/spec/api/user_invitation_spec.rb +19 -0
  55. data/spec/api/user_list_spec.rb +76 -0
  56. data/spec/api/user_note_list_spec.rb +91 -0
  57. data/spec/api/user_note_spec.rb +19 -0
  58. data/spec/api/user_process_list_spec.rb +90 -0
  59. data/spec/api/user_process_spec.rb +19 -0
  60. data/spec/api/user_role_list_spec.rb +92 -0
  61. data/spec/api/user_role_spec.rb +18 -0
  62. data/spec/api/user_skill_list_spec.rb +91 -0
  63. data/spec/api/user_skill_spec.rb +19 -0
  64. data/spec/api/user_spec.rb +37 -0
  65. data/spec/api/web_hook_list_spec.rb +75 -0
  66. data/spec/api/web_hook_spec.rb +19 -0
  67. data/spec/factories/address.rb +21 -0
  68. data/spec/factories/address_list.rb +13 -0
  69. data/spec/factories/checkin.rb +35 -0
  70. data/spec/factories/checkin_list.rb +13 -0
  71. data/spec/factories/group.rb +30 -0
  72. data/spec/factories/group_address.rb +21 -0
  73. data/spec/factories/group_address_list.rb +13 -0
  74. data/spec/factories/group_checkin.rb +35 -0
  75. data/spec/factories/group_checkin_list.rb +13 -0
  76. data/spec/factories/group_event_attendance.rb +19 -0
  77. data/spec/factories/group_event_attendance_list.rb +13 -0
  78. data/spec/factories/group_export.rb +16 -0
  79. data/spec/factories/group_export_list.rb +13 -0
  80. data/spec/factories/group_role.rb +19 -0
  81. data/spec/factories/group_tag.rb +12 -0
  82. data/spec/factories/role.rb +22 -0
  83. data/spec/factories/role_list.rb +13 -0
  84. data/spec/factories/skill.rb +13 -0
  85. data/spec/factories/skill_list.rb +13 -0
  86. data/spec/factories/skilled_user_id_list.rb +13 -0
  87. data/spec/factories/skilled_user_list.rb +13 -0
  88. data/spec/factories/tag.rb +13 -0
  89. data/spec/factories/tag_group_list.rb +13 -0
  90. data/spec/factories/tag_list.rb +13 -0
  91. data/spec/factories/terminology.rb +10 -0
  92. data/spec/factories/terminology_list.rb +13 -0
  93. data/spec/factories/user.rb +51 -0
  94. data/spec/factories/user_address.rb +19 -0
  95. data/spec/factories/user_address_list.rb +13 -0
  96. data/spec/factories/user_admin_privilege.rb +11 -0
  97. data/spec/factories/user_admin_privilege_list.rb +13 -0
  98. data/spec/factories/user_barcode.rb +15 -0
  99. data/spec/factories/user_family_list.rb +13 -0
  100. data/spec/factories/user_family_member.rb +28 -0
  101. data/spec/factories/user_invitation.rb +16 -0
  102. data/spec/factories/user_invitation_list.rb +13 -0
  103. data/spec/factories/user_list.rb +13 -0
  104. data/spec/factories/user_note.rb +28 -0
  105. data/spec/factories/user_note_list.rb +13 -0
  106. data/spec/factories/user_process.rb +11 -0
  107. data/spec/factories/user_process_list.rb +13 -0
  108. data/spec/factories/user_role.rb +17 -0
  109. data/spec/factories/user_role_list.rb +13 -0
  110. data/spec/factories/user_skill.rb +10 -0
  111. data/spec/factories/user_skill_list.rb +13 -0
  112. data/spec/factories/web_hook.rb +12 -0
  113. data/spec/factories/web_hook_list.rb +13 -0
  114. data/spec/functional/the_city_admin_spec.rb +20 -0
  115. data/spec/readers/user_reader_spec.rb +7 -0
  116. data/spec/spec_helper.rb +31 -0
  117. data/spec/writers/skill_writer_spec.rb +0 -0
  118. data/spec/writers/tag_writer_spec.rb +80 -0
  119. data/spec/writers/user_writer_spec.rb +80 -0
  120. data/status.txt +187 -0
  121. data/test_scripts/addresses.rb +36 -0
  122. data/test_scripts/barcodes_checkins.rb +45 -0
  123. data/test_scripts/city_keys.rb +6 -0
  124. data/test_scripts/familes.rb +83 -0
  125. data/test_scripts/groups.rb +124 -0
  126. data/test_scripts/metrics.rb +72 -0
  127. data/test_scripts/roles.rb +94 -0
  128. data/test_scripts/skills.rb +55 -0
  129. data/test_scripts/tags.rb +71 -0
  130. data/test_scripts/terminology.rb +62 -0
  131. data/test_scripts/users.rb +325 -0
  132. data/test_scripts/webhooks.rb +57 -0
  133. data/thecity_admin_api.gemspec +39 -0
  134. data/thecity_headers.rb +27 -0
  135. metadata +238 -3
data/.autotest ADDED
@@ -0,0 +1,9 @@
1
+ Autotest.add_hook(:initialize) {|at|
2
+ at.add_exception %r{^\.git} # ignore Version Control System
3
+ at.add_exception %r{^./tmp} # ignore temp files, lest autotest will run again, and again...
4
+ # at.clear_mappings # take out the default (test/test*rb)
5
+ at.add_mapping(%r{^lib/.*\.rb$}) {|f, _|
6
+ Dir['spec/**/*.rb']
7
+ }
8
+ nil
9
+ }
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ .DS_Store
2
+ storage/*
3
+ doc/*
4
+ the-city-admin-*.gem
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm ruby-1.9.2-p290@admin-api
data/.yardoc/checksums ADDED
@@ -0,0 +1,50 @@
1
+ lib/api/user.rb 5dade14583140e58467fe81ec6d9dcd8cb7ce771
2
+ lib/api/group.rb 688af7befcf3625562a4aef1dc504acb3ceab9a5
3
+ lib/api/user_list.rb f44fbcb17b7bd5af0c8badc962cc002eb1515b1a
4
+ lib/api/user_note.rb 7eab928ca4fd289d173da2328d1287bcc8e0ec86
5
+ lib/api/user_role.rb 6c94d6554127bd5ba7dd8fa5a1d8050e69a79762
6
+ lib/api/group_tag.rb 9cf763bb34b213c693607b29da52ea1f3ea8ab43
7
+ lib/api/api_object.rb f9bd763bcac5924f26aabcaf031db815327781e3
8
+ lib/api/group_role.rb 00f19d0474379a62eea84497de5061d66a7865a6
9
+ lib/api/group_list.rb 0e735c638cf75d927a992d45d3a9bd8d2c6a847c
10
+ lib/api/user_skill.rb 8ea23049d38ea56a58e931a1f25c02115d176522
11
+ lib/api/user_process.rb 2248b5aac1a9777669d0884296ae00fbed3a0cbe
12
+ lib/savers/api_saver.rb 84647040fa91876aede6c7fd96852d90673cbc0e
13
+ lib/api/user_address.rb 0e0aee03c01396688a613dd25d0e9bfe2ab62568
14
+ lib/api/group_address.rb 0e0aee03c01396688a613dd25d0e9bfe2ab62568
15
+ lib/savers/user_saver.rb bfeb601f57cbe388c36a7fe6fb11211a1fb2d929
16
+ lib/api/group_tag_list.rb 3176b69b88ab4d57ab0055a96a79d6e4f652220d
17
+ lib/savers/group_saver.rb 02f37545a177d9a7e750672d271e246bb323d028
18
+ lib/loaders/api_loader.rb 7610bcecd9a4ef7d26cb798e7020b42fa678a47a
19
+ lib/api/user_role_list.rb 6a145e707f6983de15bed5e4f68d3ef4b4f3a441
20
+ lib/api/user_note_list.rb 68b9a7891cac8c1b65bdddfa4f34b63fe00c73a4
21
+ lib/api/user_skill_list.rb 3dcae8a035930c13dc94c9486fcd954877babd69
22
+ lib/loaders/user_loader.rb 81063767128f7531b09b184c36bcbeae2ae4fdc0
23
+ lib/api/group_role_list.rb ebfc563a4a515598eaa7cfaf100b05b8d6db5125
24
+ lib/api/user_invitation.rb 2795c3fb3149560e3dcd69dba6a05034150fe76b
25
+ lib/api/user_family_list.rb f01ea5f60815860074b0e0cbcbe6fc745f346326
26
+ lib/api/group_invitation.rb 6185ab5951831992988996fb00953b956df5d560
27
+ lib/loaders/group_loader.rb 4c12f649c547633ad94616a4ae5cc8c1de6fe13c
28
+ lib/cachers/cache_adapter.rb b05d6e2d541c09245e515ef55228cbcdcbfce049
29
+ lib/api/user_address_list.rb 2d39275605b855509918fdb3320c93ae618dc96a
30
+ lib/api/user_process_list.rb e2f4fb3a792253a7a0857b07af90155d84676d55
31
+ lib/api/group_address_list.rb d3bceba9f2f0ad1c576d9dc43e02064f5eadc16f
32
+ lib/api/user_family_member.rb e45c848b782a3267b90001e530115d006cbb543c
33
+ lib/loaders/user_list_loader.rb 82ae7ec17a0dfaefb5d475a09c5aa28cb793eefc
34
+ lib/api/user_invitation_list.rb 0f5de9a0c65ec3cdb712a1b822d4fa6c7bdff142
35
+ lib/api/user_admin_privilege.rb c44d44c7f5aecbc397b83b6c7daba310cee08b87
36
+ lib/api/group_invitation_list.rb c64c56679a79b5bf2ce8d17b811a18d4617c5cbd
37
+ lib/loaders/group_list_loader.rb 1b1d7d5eda23bee37bfe2d4204d1399e11ffda7a
38
+ lib/loaders/user_role_list_loader.rb eaf1e78c3947f7eb80d0dde2e5237025f610ad2f
39
+ lib/loaders/user_note_list_loader.rb 59e861cbaf5536e0851f4be181a629acd2621937
40
+ lib/loaders/group_tag_list_loader.rb 2b17f2af70ed7a1e9e45657f45f2e5fd75657404
41
+ lib/api/user_admin_privilege_list.rb 7c954ccdd8b9e4d270ded17c253d23b4fd7a9f28
42
+ lib/loaders/user_skill_list_loader.rb db64c1cffac257fbde2ff6b9a236a7170e58cba1
43
+ lib/loaders/group_role_list_loader.rb f49af8592fc34fc59c155bddbb7f188c3f956979
44
+ lib/loaders/user_family_list_loader.rb dc5336a91f6f7b061f362d682edeebacb0bcac76
45
+ lib/loaders/user_process_list_loader.rb 656704758d8369d6391865172a56afa40d3ddc06
46
+ lib/loaders/user_address_list_loader.rb 43d91cf3866e6cfad97339325e36065c5db6cf52
47
+ lib/loaders/group_address_list_loader.rb 1b6e628a464d345bdb8beb1cbc5570d3104eeaf6
48
+ lib/loaders/user_invitation_list_loader.rb dfa2590f8d1a122a34d147a38be9c6bf21927c57
49
+ lib/loaders/group_invitation_list_loader.rb 81c117073f3f950f8aca7b05ba6b596e6bc6d681
50
+ lib/loaders/user_admin_privilege_list_loader.rb 314945a85d2c789060066f9629596f66915d892b
Binary file
Binary file
Binary file
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'typhoeus'
4
+ gem 'json'
5
+
6
+ group :development, :test do
7
+ gem 'autotest'
8
+ gem 'rspec'
9
+ gem 'ruby-debug19'
10
+ gem 'factory_girl'
11
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,51 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ ZenTest (4.8.1)
5
+ activesupport (3.2.6)
6
+ i18n (~> 0.6)
7
+ multi_json (~> 1.0)
8
+ archive-tar-minitar (0.5.2)
9
+ autotest (4.4.6)
10
+ ZenTest (>= 4.4.1)
11
+ columnize (0.3.6)
12
+ diff-lcs (1.1.3)
13
+ factory_girl (3.5.0)
14
+ activesupport (>= 3.0.0)
15
+ i18n (0.6.0)
16
+ json (1.7.3)
17
+ linecache19 (0.5.12)
18
+ ruby_core_source (>= 0.1.4)
19
+ mime-types (1.18)
20
+ multi_json (1.3.6)
21
+ rspec (2.8.0)
22
+ rspec-core (~> 2.8.0)
23
+ rspec-expectations (~> 2.8.0)
24
+ rspec-mocks (~> 2.8.0)
25
+ rspec-core (2.8.0)
26
+ rspec-expectations (2.8.0)
27
+ diff-lcs (~> 1.1.2)
28
+ rspec-mocks (2.8.0)
29
+ ruby-debug-base19 (0.11.25)
30
+ columnize (>= 0.3.1)
31
+ linecache19 (>= 0.5.11)
32
+ ruby_core_source (>= 0.1.4)
33
+ ruby-debug19 (0.11.6)
34
+ columnize (>= 0.3.1)
35
+ linecache19 (>= 0.5.11)
36
+ ruby-debug-base19 (>= 0.11.19)
37
+ ruby_core_source (0.1.5)
38
+ archive-tar-minitar (>= 0.5.2)
39
+ typhoeus (0.3.3)
40
+ mime-types
41
+
42
+ PLATFORMS
43
+ ruby
44
+
45
+ DEPENDENCIES
46
+ autotest
47
+ factory_girl
48
+ json
49
+ rspec
50
+ ruby-debug19
51
+ typhoeus
data/README ADDED
@@ -0,0 +1 @@
1
+ This Ruby project is an API wrapper for TheCity Admin API (OnTheCity.org)
data/Rakefile ADDED
@@ -0,0 +1,32 @@
1
+ require 'rspec/core/rake_task'
2
+
3
+
4
+ desc 'Default: run specs.'
5
+ task :default => :spec
6
+ task :test => :spec
7
+
8
+ desc "Run specs"
9
+ RSpec::Core::RakeTask.new do |t|
10
+ t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
11
+ # Put spec opts in a file named .rspec in root
12
+ end
13
+
14
+
15
+ desc "Generate code coverage"
16
+ RSpec::Core::RakeTask.new(:coverage) do |t|
17
+ t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
18
+ t.rcov = true
19
+ t.rcov_opts = ['--exclude', 'spec']
20
+ end
21
+
22
+
23
+
24
+ namespace :docs do
25
+
26
+ desc 'Build the docs for The City Admin API.'
27
+ task :build do
28
+ system('rm -rf doc')
29
+ system('yardoc --no-private --protected lib/**/*.rb')
30
+ end
31
+
32
+ end
data/index.rb ADDED
@@ -0,0 +1,123 @@
1
+ # *******************************************
2
+ # This is a demo file to show usage.
3
+ #
4
+ # @package TheCity::Admin
5
+ # @authors Robbie Lieb <robbie@onthecity.org>, Wes Hays <wes@onthecity.org>
6
+ # *******************************************
7
+
8
+ require 'ruby-debug'
9
+ require File.dirname(__FILE__) + '/lib/the_city_admin.rb'
10
+
11
+ # staging
12
+ # key = 'bc6b57204b0ee4818bb4b3befd0f3292e93a2d0a'
13
+ # token = '7cfed59b037125d3'
14
+
15
+ # Local
16
+ key = '66c59e2ee24553e7237259e30b4c17365681b95c'
17
+ token = 'a9ae4af3c3e80102'
18
+
19
+
20
+ TheCity::AdminApi.connect(key, token)
21
+
22
+ ###### USERS / GROUPS #######
23
+
24
+ puts "-----------------------------"
25
+
26
+ user = TheCity::User.new
27
+ user.title = 'Deacon'
28
+ user.first = 'James'
29
+ user.middle = 'Wesley'
30
+ user.last = 'Hays'
31
+ user.nickname = 'Wes'
32
+ user.gender = TheCity::User::Gender[:male]
33
+ user.email = 'wes+tc6@onthecity.org'
34
+ user.staff = false
35
+ user.member_since = Time.now.strftime("%Y-%m-%d")
36
+ user.birthdate = '1980-09-27'
37
+ user.primary_phone = '775-745-3013'
38
+ user.primary_phone_type = TheCity::User::PhoneType[:mobile]
39
+ user.secondary_phone = '775-677-7707'
40
+ user.secondary_phone_type = TheCity::User::PhoneType[:home]
41
+ #user.marital_status = TheCity::User::MaritalStatus[:married]
42
+ #user.primary_campus_id
43
+ #user.external_id_1
44
+ #user.external_id_2
45
+ #user.external_id_3
46
+ unless user.save
47
+ user.error_messages.each { |em| puts em }
48
+ end
49
+
50
+ user.delete
51
+
52
+
53
+ # puts "-----------------------------"
54
+
55
+
56
+ # user = the_city.users[0]
57
+ # puts user.full_name
58
+ # user.first = 'Wes'
59
+ # puts user.full_name
60
+ # user.save
61
+ # puts user.id
62
+ # user2 = TheCity::User.load_user_by_id(user.id)
63
+ # puts user2.full_name
64
+
65
+ # group = the_city.groups[0]
66
+ # puts group.name
67
+ # group.name = 'Wes Group'
68
+ # puts group.name
69
+ # group.save
70
+ # group2 = TheCity::Group.load_group_by_id(group.id)
71
+ # puts group2.name
72
+
73
+
74
+
75
+
76
+ ###### USERS #######
77
+
78
+ # user = the_city.users[0]
79
+ # puts user.full_name
80
+
81
+
82
+ # user2 = TheCity::User.load_user_by_id(1068169470) #(564114313)
83
+ # puts user2.full_name
84
+
85
+ # user = the_city.users[1]
86
+ # puts user.full_name
87
+
88
+ # This is currenly returning a 404 if no family members are found
89
+ # puts user.family[0].name
90
+
91
+ # puts user.addresses[0].location_type
92
+ # puts user.notes[0].author
93
+ # puts user.roles[0].group_name
94
+ # puts user.skills[0].name
95
+ # puts user.processes[0].name
96
+ # puts user.invitations[0].source
97
+ # puts user.admin_privileges[0].title
98
+
99
+
100
+ ###### GROUPS #######
101
+
102
+ # group = the_city.groups[0]
103
+ # puts group.name
104
+ # puts group.id
105
+
106
+ # Fails with 500 error
107
+ # puts group.addresses[0].location_type
108
+
109
+ # puts group.roles[0].user_name
110
+ # puts group.tags[0].name
111
+
112
+ # puts group.invitations[0].source
113
+
114
+ # metric = the_city.metrics[0]
115
+
116
+ # puts metric.name
117
+ # metric.measurements.total_entries.times do |i|
118
+ # puts "#{metric.measurements[i].created_at}: #{metric.measurements[i].value}"
119
+ # end
120
+ # new_measurement = TheCity::MetricMeasurement.new(:id => metric.id, :value => 999)
121
+ # new_measurement.save
122
+
123
+
data/lib/common.rb CHANGED
@@ -1,31 +1,38 @@
1
1
  module TheCity
2
2
  require 'cgi'
3
3
 
4
- def self.admin_request(method, path, params = {})
5
- # data_params = params.inject({}) {|h, (k,v)| h.update({k => v.nil? ? v : v.to_s})}
6
- # flattened_params = self._flatten_params(data_params)
7
4
 
8
- flattened_params = self._flatten_params(params)
9
-
10
- # puts "############################"
11
- # puts "flattened_params: #{flattened_params}"
12
- # puts "############################"
13
-
14
- headers = self._build_admin_headers(method, path, flattened_params)
5
+ def self.admin_request(method, path, params = {})
6
+ headers = self._build_admin_headers(method, path, params)
15
7
  url = THE_CITY_ADMIN_PATH+path
16
8
 
17
- response =
18
- case method
9
+ data_params = params.inject({}) {|h, (k,v)| h.update({k => v.nil? ? v : CGI.escape(v.to_s)})}
10
+
11
+ response =
12
+ case method
19
13
  when :post
20
- Typhoeus::Request.post(url, {:headers => headers, :params => flattened_params})
21
- when :get
22
- Typhoeus::Request.get(url, {:headers => headers, :params => flattened_params})
23
- when :put
24
- Typhoeus::Request.put(url, {:headers => headers, :params => flattened_params})
25
- when :delete
26
- Typhoeus::Request.delete(url, {:headers => headers, :params => flattened_params})
14
+ Typhoeus::Request.post(url, {:headers => headers, :params => self._flatten_params(data_params)})
15
+ when :get
16
+ Typhoeus::Request.get(url, {:headers => headers, :params => self._flatten_params(data_params)})
17
+ when :put
18
+ Typhoeus::Request.put(url, {:headers => headers, :params => self._flatten_params(data_params)})
19
+ when :delete
20
+ Typhoeus::Request.delete(url, {:headers => headers, :params => self._flatten_params(data_params)})
27
21
  end
28
22
 
23
+ # unless response.success?
24
+ # if response.curl_error_message != 'No error'
25
+ # raise TheCityExceptions::UnableToConnectToTheCity.new(response.curl_error_message)
26
+ # else
27
+ # begin
28
+ # raise TheCityExceptions::TheCityResponseError.new( JSON.parse(response.body)['error_message'] )
29
+ # rescue
30
+ # raise TheCityExceptions::UnknownErrorConnectingToTheCity.new('Unknown error when connecting to The City')
31
+ # end
32
+ # end
33
+ # end
34
+
35
+
29
36
  unless response.success?
30
37
  if response.curl_error_message != 'No error'
31
38
  raise TheCityExceptions::UnableToConnectToTheCity.new(response.curl_error_message)
@@ -38,66 +45,28 @@ module TheCity
38
45
  raise TheCityExceptions::TheCityResponseError.new(error_messages)
39
46
  end
40
47
  end
41
- end
42
-
48
+ end
49
+
43
50
  response
44
51
  end
45
52
 
46
53
 
47
- def self._flatten_params(params, prefix='')
48
- retval = []
49
- if params.instance_of?(Array)
50
- if params.empty?
51
- retval << self._flatten_params('', "#{prefix.to_s}[0]")
52
- else
53
- params.each_with_index do |value, indx|
54
- retval << self._flatten_params(value, "#{prefix.to_s}[#{indx}]")
55
- end
56
- end
57
- elsif params.instance_of?(Hash)
58
- params.each do |key, value|
59
- retval << self._flatten_params(value, prefix.empty? ? key.to_s : "#{prefix}[#{key.to_s}]")
54
+ def self._flatten_params(params)
55
+ retval = {}
56
+ params.each do |key, value|
57
+ if value.instance_of?(Array)
58
+ value.each_with_index { |a_val, indx| retval["#{key}[#{indx}]"] = a_val }
59
+ else # assume string
60
+ retval[key] = value
60
61
  end
61
- else # assume string
62
- retval << "#{prefix}=#{params}"
63
62
  end
64
-
65
- if prefix.empty?
66
- hvals = {}
67
- retval.flatten.sort.each { |v| hvals[v.split('=')[0]] = v.split('=')[1] }
68
- hvals
69
- else
70
- retval.flatten.sort
71
- end
72
- #retval.flatten.sort
63
+ retval
73
64
  end
74
65
 
75
66
 
76
-
77
- def self._build_admin_headers(method, path, params)
78
- # get_vars = '?' + params.to_a.sort.collect { |kv_pair| "#{kv_pair[0]}=#{kv_pair[1]}" }.join('&')
79
- # get_vars = '' if get_vars == '?'
80
-
81
-
82
- get_vars = '?' + params.to_a.sort.collect { |kv_pair|
83
- if kv_pair[1].class == Array
84
- puts "ARRAY"
85
- kv_pair[1].each_with_index do |v, indx|
86
- "#{kv_pair[0]}[#{indx}]=#{v}"
87
- end
88
- else
89
- "#{kv_pair[0]}=#{kv_pair[1]}"
90
- end
91
- }.join('&')
67
+ def self._build_admin_headers(method, path, params)
68
+ get_vars = '?' + params.to_a.sort.collect { |kv_pair| "#{kv_pair[0]}=#{kv_pair[1]}" }.join('&')
92
69
  get_vars = '' if get_vars == '?'
93
-
94
-
95
- # puts "############################"
96
- # puts "params: #{params}"
97
- # puts '------------'
98
- # puts "get_vars: #{get_vars}"
99
- # puts "############################"
100
-
101
70
  method_request = method.to_s.upcase
102
71
  url = THE_CITY_ADMIN_PATH + path + get_vars
103
72
  current_time = Time.now.to_i.to_s
@@ -114,11 +83,133 @@ module TheCity
114
83
 
115
84
  # This is causing issues.... not sure if it is needed (docs might be lieing)
116
85
  # if [:post, :put].include?(method)
117
- # headers['Content-Type'] = 'application/json'
118
- # headers['Content-Length'] = params.to_json.length
86
+ # headers['Content-Type'] = 'application/json'
87
+ # headers['Content-Length'] = params.to_json.length
119
88
  # end
120
89
 
121
90
  headers
122
- end
91
+ end
92
+
93
+
94
+
95
+ # def self.admin_request(method, path, params = {})
96
+ # # data_params = params.inject({}) {|h, (k,v)| h.update({k => v.nil? ? v : v.to_s})}
97
+ # # flattened_params = self._flatten_params(data_params)
98
+
99
+ # flattened_params = self._flatten_params(params)
100
+
101
+ # # puts "############################"
102
+ # # puts "flattened_params: #{flattened_params}"
103
+ # # puts "############################"
104
+
105
+ # headers = self._build_admin_headers(method, path, flattened_params)
106
+ # url = THE_CITY_ADMIN_PATH+path
107
+
108
+ # response =
109
+ # case method
110
+ # when :post
111
+ # Typhoeus::Request.post(url, {:headers => headers, :params => flattened_params})
112
+ # when :get
113
+ # Typhoeus::Request.get(url, {:headers => headers, :params => flattened_params})
114
+ # when :put
115
+ # Typhoeus::Request.put(url, {:headers => headers, :params => flattened_params})
116
+ # when :delete
117
+ # Typhoeus::Request.delete(url, {:headers => headers, :params => flattened_params})
118
+ # end
119
+
120
+ # unless response.success?
121
+ # if response.curl_error_message != 'No error'
122
+ # raise TheCityExceptions::UnableToConnectToTheCity.new(response.curl_error_message)
123
+ # else
124
+ # begin
125
+ # error_messages = JSON.parse(response.body)['error_message']
126
+ # rescue
127
+ # raise TheCityExceptions::UnknownErrorConnectingToTheCity.new('Unknown error when connecting to The City')
128
+ # else
129
+ # raise TheCityExceptions::TheCityResponseError.new(error_messages)
130
+ # end
131
+ # end
132
+ # end
133
+
134
+ # response
135
+ # end
136
+
137
+
138
+ # def self._flatten_params(params, prefix='')
139
+ # retval = []
140
+ # if params.instance_of?(Array)
141
+ # if params.empty?
142
+ # retval << self._flatten_params('', "#{prefix.to_s}[0]")
143
+ # else
144
+ # params.each_with_index do |value, indx|
145
+ # retval << self._flatten_params(value, "#{prefix.to_s}[#{indx}]")
146
+ # end
147
+ # end
148
+ # elsif params.instance_of?(Hash)
149
+ # params.each do |key, value|
150
+ # retval << self._flatten_params(value, prefix.empty? ? key.to_s : "#{prefix}[#{key.to_s}]")
151
+ # end
152
+ # else # assume string
153
+ # retval << "#{prefix}=#{params}"
154
+ # end
155
+
156
+ # if prefix.empty?
157
+ # hvals = {}
158
+ # retval.flatten.sort.each { |v| hvals[v.split('=')[0]] = v.split('=')[1] }
159
+ # hvals
160
+ # else
161
+ # retval.flatten.sort
162
+ # end
163
+ # #retval.flatten.sort
164
+ # end
165
+
166
+
167
+
168
+ # def self._build_admin_headers(method, path, params)
169
+ # # get_vars = '?' + params.to_a.sort.collect { |kv_pair| "#{kv_pair[0]}=#{kv_pair[1]}" }.join('&')
170
+ # # get_vars = '' if get_vars == '?'
171
+
172
+
173
+ # get_vars = '?' + params.to_a.sort.collect { |kv_pair|
174
+ # if kv_pair[1].class == Array
175
+ # puts "ARRAY"
176
+ # kv_pair[1].each_with_index do |v, indx|
177
+ # "#{kv_pair[0]}[#{indx}]=#{v}"
178
+ # end
179
+ # else
180
+ # "#{kv_pair[0]}=#{kv_pair[1]}"
181
+ # end
182
+ # }.join('&')
183
+ # get_vars = '' if get_vars == '?'
184
+
185
+
186
+ # # puts "############################"
187
+ # # puts "params: #{params}"
188
+ # # puts '------------'
189
+ # # puts "get_vars: #{get_vars}"
190
+ # # puts "############################"
191
+
192
+ # method_request = method.to_s.upcase
193
+ # url = THE_CITY_ADMIN_PATH + path + get_vars
194
+ # current_time = Time.now.to_i.to_s
195
+ # string_to_sign = current_time.to_s + method_request + url
196
+ # unencoded_hmac = OpenSSL::HMAC.digest('sha256', TheCity::AdminApi::API_KEY, string_to_sign)
197
+ # unescaped_hmac = Base64.encode64(unencoded_hmac).chomp
198
+ # hmac_signature = CGI.escape(unescaped_hmac)
199
+
200
+ # headers = {'X-City-Sig' => hmac_signature,
201
+ # 'X-City-User-Token' => TheCity::AdminApi::API_TOKEN,
202
+ # 'X-City-Time' => current_time,
203
+ # 'Accept' => 'application/vnd.thecity.admin.v1+json'}
204
+
205
+
206
+ # # This is causing issues.... not sure if it is needed (docs might be lieing)
207
+ # # if [:post, :put].include?(method)
208
+ # # headers['Content-Type'] = 'application/json'
209
+ # # headers['Content-Length'] = params.to_json.length
210
+ # # end
211
+
212
+ # headers
213
+ # end
123
214
 
124
215
  end