assembla_api 0.1.2

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 (112) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +20 -0
  3. data/Rakefile +22 -0
  4. data/lib/assembla_api.rb +130 -0
  5. data/lib/assembla_api/api.rb +373 -0
  6. data/lib/assembla_api/api/actions.rb +58 -0
  7. data/lib/assembla_api/api/arguments.rb +248 -0
  8. data/lib/assembla_api/api/config.rb +107 -0
  9. data/lib/assembla_api/api/config/property.rb +30 -0
  10. data/lib/assembla_api/api/config/property_set.rb +119 -0
  11. data/lib/assembla_api/api/factory.rb +33 -0
  12. data/lib/assembla_api/authorization.rb +76 -0
  13. data/lib/assembla_api/client.rb +21 -0
  14. data/lib/assembla_api/client/activity.rb +30 -0
  15. data/lib/assembla_api/client/authorizations.rb +143 -0
  16. data/lib/assembla_api/client/authorizations/app.rb +98 -0
  17. data/lib/assembla_api/client/portfolio.rb +19 -0
  18. data/lib/assembla_api/client/portfolio/invitations.rb +30 -0
  19. data/lib/assembla_api/client/portfolio/spaces.rb +13 -0
  20. data/lib/assembla_api/client/portfolio/standup_reports.rb +34 -0
  21. data/lib/assembla_api/client/portfolio/tasks.rb +13 -0
  22. data/lib/assembla_api/client/portfolio/ticket_reports.rb +13 -0
  23. data/lib/assembla_api/client/portfolio/tickets.rb +13 -0
  24. data/lib/assembla_api/client/portfolio/users.rb +13 -0
  25. data/lib/assembla_api/client/spaces.rb +140 -0
  26. data/lib/assembla_api/client/spaces/documents.rb +87 -0
  27. data/lib/assembla_api/client/spaces/milestones.rb +102 -0
  28. data/lib/assembla_api/client/spaces/space_tools.rb +65 -0
  29. data/lib/assembla_api/client/spaces/space_tools/merge_requests.rb +105 -0
  30. data/lib/assembla_api/client/spaces/space_tools/merge_requests/versions.rb +41 -0
  31. data/lib/assembla_api/client/spaces/space_tools/merge_requests/versions/comments.rb +34 -0
  32. data/lib/assembla_api/client/spaces/space_tools/merge_requests/versions/votes.rb +46 -0
  33. data/lib/assembla_api/client/spaces/ssh.rb +14 -0
  34. data/lib/assembla_api/client/spaces/ssh/actions.rb +76 -0
  35. data/lib/assembla_api/client/spaces/ssh/actions/launches.rb +14 -0
  36. data/lib/assembla_api/client/spaces/ssh/keys.rb +18 -0
  37. data/lib/assembla_api/client/spaces/ssh/launches.rb +29 -0
  38. data/lib/assembla_api/client/spaces/ssh/servers.rb +63 -0
  39. data/lib/assembla_api/client/spaces/standup_away_reports.rb +41 -0
  40. data/lib/assembla_api/client/spaces/standup_reports.rb +41 -0
  41. data/lib/assembla_api/client/spaces/tags.rb +96 -0
  42. data/lib/assembla_api/client/spaces/tickets.rb +154 -0
  43. data/lib/assembla_api/client/spaces/tickets/associations.rb +57 -0
  44. data/lib/assembla_api/client/spaces/tickets/comments.rb +45 -0
  45. data/lib/assembla_api/client/spaces/tickets/custom_fields.rb +57 -0
  46. data/lib/assembla_api/client/spaces/tickets/statuses.rb +55 -0
  47. data/lib/assembla_api/client/spaces/user_roles.rb +61 -0
  48. data/lib/assembla_api/client/spaces/users.rb +11 -0
  49. data/lib/assembla_api/client/spaces/webhooks.rb +63 -0
  50. data/lib/assembla_api/client/spaces/wiki_pages.rb +78 -0
  51. data/lib/assembla_api/client/spaces/wiki_pages/versions.rb +20 -0
  52. data/lib/assembla_api/client/tasks.rb +72 -0
  53. data/lib/assembla_api/client/users.rb +49 -0
  54. data/lib/assembla_api/client/users/keys.rb +97 -0
  55. data/lib/assembla_api/configuration.rb +71 -0
  56. data/lib/assembla_api/connection.rb +66 -0
  57. data/lib/assembla_api/constants.rb +74 -0
  58. data/lib/assembla_api/core_ext/array.rb +25 -0
  59. data/lib/assembla_api/core_ext/hash.rb +92 -0
  60. data/lib/assembla_api/core_ext/ordered_hash.rb +107 -0
  61. data/lib/assembla_api/deprecation.rb +39 -0
  62. data/lib/assembla_api/error.rb +37 -0
  63. data/lib/assembla_api/error/bad_request.rb +14 -0
  64. data/lib/assembla_api/error/client_error.rb +20 -0
  65. data/lib/assembla_api/error/forbidden.rb +14 -0
  66. data/lib/assembla_api/error/internal_server_error.rb +15 -0
  67. data/lib/assembla_api/error/invalid_options.rb +18 -0
  68. data/lib/assembla_api/error/not_acceptable.rb +15 -0
  69. data/lib/assembla_api/error/not_found.rb +14 -0
  70. data/lib/assembla_api/error/required_params.rb +18 -0
  71. data/lib/assembla_api/error/service_error.rb +68 -0
  72. data/lib/assembla_api/error/service_unavailable.rb +15 -0
  73. data/lib/assembla_api/error/unauthorized.rb +15 -0
  74. data/lib/assembla_api/error/unknown_media.rb +18 -0
  75. data/lib/assembla_api/error/unknown_value.rb +18 -0
  76. data/lib/assembla_api/error/unprocessable_entity.rb +14 -0
  77. data/lib/assembla_api/error/validations.rb +18 -0
  78. data/lib/assembla_api/ext/faraday.rb +38 -0
  79. data/lib/assembla_api/jsonable.rb +18 -0
  80. data/lib/assembla_api/middleware.rb +31 -0
  81. data/lib/assembla_api/mime_type.rb +33 -0
  82. data/lib/assembla_api/normalizer.rb +25 -0
  83. data/lib/assembla_api/null_encoder.rb +25 -0
  84. data/lib/assembla_api/page_iterator.rb +142 -0
  85. data/lib/assembla_api/page_links.rb +45 -0
  86. data/lib/assembla_api/paged_request.rb +40 -0
  87. data/lib/assembla_api/pagination.rb +102 -0
  88. data/lib/assembla_api/parameter_filter.rb +32 -0
  89. data/lib/assembla_api/params_hash.rb +101 -0
  90. data/lib/assembla_api/rate_limit.rb +25 -0
  91. data/lib/assembla_api/request.rb +85 -0
  92. data/lib/assembla_api/request/basic_auth.rb +33 -0
  93. data/lib/assembla_api/request/jsonize.rb +53 -0
  94. data/lib/assembla_api/request/key_auth.rb +31 -0
  95. data/lib/assembla_api/request/oauth2.rb +42 -0
  96. data/lib/assembla_api/request/verbs.rb +60 -0
  97. data/lib/assembla_api/response.rb +28 -0
  98. data/lib/assembla_api/response/header.rb +76 -0
  99. data/lib/assembla_api/response/jsonize.rb +29 -0
  100. data/lib/assembla_api/response/mashify.rb +24 -0
  101. data/lib/assembla_api/response/raise_error.rb +18 -0
  102. data/lib/assembla_api/response/xmlize.rb +26 -0
  103. data/lib/assembla_api/response_wrapper.rb +157 -0
  104. data/lib/assembla_api/ssl_certs/cacerts.pem +2183 -0
  105. data/lib/assembla_api/utils/url.rb +59 -0
  106. data/lib/assembla_api/validations.rb +25 -0
  107. data/lib/assembla_api/validations/format.rb +24 -0
  108. data/lib/assembla_api/validations/presence.rb +30 -0
  109. data/lib/assembla_api/validations/required.rb +24 -0
  110. data/lib/assembla_api/validations/token.rb +41 -0
  111. data/lib/assembla_api/version.rb +12 -0
  112. metadata +347 -0
@@ -0,0 +1,59 @@
1
+ require 'cgi'
2
+ require 'addressable/uri'
3
+
4
+ module Assembla
5
+ module Utils
6
+ module Url
7
+ extend self
8
+
9
+ DEFAULT_QUERY_SEP = /[&;] */n
10
+
11
+ KEY_VALUE_SEP = '='.freeze
12
+
13
+ def escape_uri(s) Addressable::URI.escape(s.to_s) end
14
+
15
+ def escape(s) CGI.escape(s.to_s) end
16
+
17
+ def unescape(s) CGI.unescape(s.to_s) end
18
+
19
+ def build_query(params)
20
+ params.map { |k, v|
21
+ if v.class == Array
22
+ build_query(v.map { |x| [k, x] })
23
+ else
24
+ v.nil? ? escape(k) : "#{escape(k)}=#{escape(v)}"
25
+ end
26
+ }.join("&")
27
+ end
28
+
29
+ def parse_query(query_string)
30
+ return '' if query_string.nil? || query_string.empty?
31
+ params = {}
32
+
33
+ query_string.split(DEFAULT_QUERY_SEP).each do |part|
34
+ k, v = part.split(KEY_VALUE_SEP, 2).map { |el| unescape(el) }
35
+
36
+ if cur = params[k]
37
+ if cur.class == Array
38
+ params[k] << v
39
+ else
40
+ params[k] = [cur, v]
41
+ end
42
+ else
43
+ params[k] = v
44
+ end
45
+ end
46
+ params
47
+ end
48
+
49
+ def parse_query_for_param(query_string, name)
50
+ parse_query(query_string).each do |key, val|
51
+ return val.first if (name == key) && val.is_a?(Array)
52
+ return val if (name == key)
53
+ end
54
+ return nil
55
+ end
56
+
57
+ end # Url
58
+ end # Utils
59
+ end # Assembla
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+
3
+ module Assembla
4
+ module Validations
5
+
6
+ Assembla::require_all 'assembla_api/validations',
7
+ 'presence',
8
+ 'token',
9
+ 'format',
10
+ 'required'
11
+
12
+ include Presence
13
+ include Format
14
+ include Token
15
+ include Required
16
+
17
+ VALID_API_KEYS = [
18
+ 'page',
19
+ 'per_page',
20
+ 'auto_pagination',
21
+ 'jsonp_callback'
22
+ ]
23
+
24
+ end # Validation
25
+ end # Assembla
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+
3
+ module Assembla
4
+ module Validations
5
+ module Format
6
+
7
+ # Ensures that value for a given key is of the correct form whether
8
+ # matching regular expression or set of predefined values.
9
+ #
10
+ def assert_valid_values(permitted, params)
11
+ params.each do |k, v|
12
+ next unless permitted.keys.include?(k)
13
+ if permitted[k].is_a?(Array) && !permitted[k].include?(params[k])
14
+ raise Assembla::Error::UnknownValue.new(k,v, permitted[k].join(', '))
15
+
16
+ elsif permitted[k].is_a?(Regexp) && !(permitted[k] =~ params[k])
17
+ raise Assembla::Error::UnknownValue.new(k,v, permitted[k])
18
+ end
19
+ end
20
+ end
21
+
22
+ end # Format
23
+ end # Validations
24
+ end # Assembla
@@ -0,0 +1,30 @@
1
+ # encoding: utf-8
2
+
3
+ module Assembla
4
+ module Validations
5
+ # A mixin to help validate presence of non-empty values
6
+ module Presence
7
+
8
+ # Ensure that esential arguments are present before request is made.
9
+ #
10
+ # == Parameters
11
+ # Hash/Array of arguments to be checked against nil and empty string
12
+ #
13
+ # == Example
14
+ # assert_presence_of user: '...', repo: '...'
15
+ # assert_presence_of user, repo
16
+ #
17
+ def assert_presence_of(*args)
18
+ hash = args.last.is_a?(::Hash) ? args.pop : {}
19
+
20
+ errors = hash.select { |key, val| val.to_s.empty? }
21
+ raise Assembla::Error::Validations.new(errors) unless errors.empty?
22
+
23
+ args.each do |arg|
24
+ raise ArgumentError, "parameter cannot be nil" if arg.nil?
25
+ end
26
+ end
27
+
28
+ end # Presence
29
+ end # Validations
30
+ end # Assembla
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+
3
+ module Assembla
4
+ module Validations
5
+ module Required
6
+
7
+ # Validate all keys present in a provided hash against required set,
8
+ # on mismatch raise Assembla::Error::RequiredParams
9
+ # Note that keys need to be in the same format i.e. symbols or strings,
10
+ # otherwise the comparison will fail.
11
+ #
12
+ def assert_required_keys(required, provided)
13
+ result = required.all? do |key|
14
+ provided.deep_key? key
15
+ end
16
+ if !result
17
+ raise Assembla::Error::RequiredParams.new(provided, required)
18
+ end
19
+ result
20
+ end
21
+
22
+ end # Required
23
+ end # Validations
24
+ end # Assembla
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+
3
+ module Assembla
4
+ module Validations
5
+ module Token
6
+
7
+ TOKEN_REQUIRED = [
8
+ 'get /user',
9
+ 'get /user/emails',
10
+ 'get /user/followers',
11
+ 'get /user/following',
12
+ 'get /user/keys',
13
+ 'get /user/repos',
14
+ 'patch /user',
15
+ 'post /user/emails',
16
+ 'post /user/keys',
17
+ 'post /user/repos'
18
+ ]
19
+
20
+ TOKEN_REQUIRED_REGEXP = [
21
+ /repos\/.*\/.*\/comments/,
22
+ ]
23
+
24
+ # Ensures that required authentication token is present before
25
+ # request is sent.
26
+ #
27
+ def validates_token_for(method, path)
28
+ return true unless TOKEN_REQUIRED.grep("#{method} #{path}").empty?
29
+
30
+ token_required = false
31
+ TOKEN_REQUIRED_REGEXP.each do |regex|
32
+ if "#{method} #{path}" =~ regex
33
+ token_required = true
34
+ end
35
+ end
36
+ return token_required
37
+ end
38
+
39
+ end # Token
40
+ end # Validations
41
+ end # Assembla
@@ -0,0 +1,12 @@
1
+ # encoding: utf-8
2
+
3
+ module Assembla
4
+ module VERSION
5
+ MAJOR = 0
6
+ MINOR = 1
7
+ PATCH = 2
8
+ BUILD = nil
9
+
10
+ STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.');
11
+ end
12
+ end # Assembla
metadata ADDED
@@ -0,0 +1,347 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: assembla_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Vitalie Lazu
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: addressable
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: hashie
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.2'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '3.2'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '3.2'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '3.2'
47
+ - !ruby/object:Gem::Dependency
48
+ name: faraday
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '0.8'
54
+ - - "<"
55
+ - !ruby/object:Gem::Version
56
+ version: '0.10'
57
+ type: :runtime
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '0.8'
64
+ - - "<"
65
+ - !ruby/object:Gem::Version
66
+ version: '0.10'
67
+ - !ruby/object:Gem::Dependency
68
+ name: multi_json
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: 1.7.5
74
+ - - "<"
75
+ - !ruby/object:Gem::Version
76
+ version: '2.0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: 1.7.5
84
+ - - "<"
85
+ - !ruby/object:Gem::Version
86
+ version: '2.0'
87
+ - !ruby/object:Gem::Dependency
88
+ name: mime-types
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '1.16'
94
+ - - "<"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
97
+ type: :runtime
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '1.16'
104
+ - - "<"
105
+ - !ruby/object:Gem::Version
106
+ version: '3.0'
107
+ - !ruby/object:Gem::Dependency
108
+ name: oauth2
109
+ requirement: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - "~>"
112
+ - !ruby/object:Gem::Version
113
+ version: '1.0'
114
+ type: :runtime
115
+ prerelease: false
116
+ version_requirements: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - "~>"
119
+ - !ruby/object:Gem::Version
120
+ version: '1.0'
121
+ - !ruby/object:Gem::Dependency
122
+ name: nokogiri
123
+ requirement: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - "~>"
126
+ - !ruby/object:Gem::Version
127
+ version: 1.6.3
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: 1.6.3
131
+ type: :runtime
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: 1.6.3
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: 1.6.3
141
+ - !ruby/object:Gem::Dependency
142
+ name: descendants_tracker
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: 0.0.4
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: 0.0.4
151
+ type: :runtime
152
+ prerelease: false
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - "~>"
156
+ - !ruby/object:Gem::Version
157
+ version: 0.0.4
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: 0.0.4
161
+ - !ruby/object:Gem::Dependency
162
+ name: bundler
163
+ requirement: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - "~>"
166
+ - !ruby/object:Gem::Version
167
+ version: '1.5'
168
+ type: :development
169
+ prerelease: false
170
+ version_requirements: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: '1.5'
175
+ - !ruby/object:Gem::Dependency
176
+ name: sshkey
177
+ requirement: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - "~>"
180
+ - !ruby/object:Gem::Version
181
+ version: '1.6'
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - "~>"
187
+ - !ruby/object:Gem::Version
188
+ version: '1.6'
189
+ - !ruby/object:Gem::Dependency
190
+ name: git-ssh-wrapper
191
+ requirement: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - "~>"
194
+ - !ruby/object:Gem::Version
195
+ version: '0.2'
196
+ type: :development
197
+ prerelease: false
198
+ version_requirements: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - "~>"
201
+ - !ruby/object:Gem::Version
202
+ version: '0.2'
203
+ description: " Ruby client that supports all of the Assembla API methods. It's build
204
+ in a modular way, that is, you can either instantiate the whole api wrapper Assembla.new
205
+ or use parts of it e.i. Assembla::Client::Spaces.new if working solely with spaces
206
+ is your main concern. Intuitive query methods allow you easily call API endpoints. "
207
+ email: vitalie.lazu@gmail.com
208
+ executables: []
209
+ extensions: []
210
+ extra_rdoc_files: []
211
+ files:
212
+ - LICENSE.txt
213
+ - Rakefile
214
+ - lib/assembla_api.rb
215
+ - lib/assembla_api/api.rb
216
+ - lib/assembla_api/api/actions.rb
217
+ - lib/assembla_api/api/arguments.rb
218
+ - lib/assembla_api/api/config.rb
219
+ - lib/assembla_api/api/config/property.rb
220
+ - lib/assembla_api/api/config/property_set.rb
221
+ - lib/assembla_api/api/factory.rb
222
+ - lib/assembla_api/authorization.rb
223
+ - lib/assembla_api/client.rb
224
+ - lib/assembla_api/client/activity.rb
225
+ - lib/assembla_api/client/authorizations.rb
226
+ - lib/assembla_api/client/authorizations/app.rb
227
+ - lib/assembla_api/client/portfolio.rb
228
+ - lib/assembla_api/client/portfolio/invitations.rb
229
+ - lib/assembla_api/client/portfolio/spaces.rb
230
+ - lib/assembla_api/client/portfolio/standup_reports.rb
231
+ - lib/assembla_api/client/portfolio/tasks.rb
232
+ - lib/assembla_api/client/portfolio/ticket_reports.rb
233
+ - lib/assembla_api/client/portfolio/tickets.rb
234
+ - lib/assembla_api/client/portfolio/users.rb
235
+ - lib/assembla_api/client/spaces.rb
236
+ - lib/assembla_api/client/spaces/documents.rb
237
+ - lib/assembla_api/client/spaces/milestones.rb
238
+ - lib/assembla_api/client/spaces/space_tools.rb
239
+ - lib/assembla_api/client/spaces/space_tools/merge_requests.rb
240
+ - lib/assembla_api/client/spaces/space_tools/merge_requests/versions.rb
241
+ - lib/assembla_api/client/spaces/space_tools/merge_requests/versions/comments.rb
242
+ - lib/assembla_api/client/spaces/space_tools/merge_requests/versions/votes.rb
243
+ - lib/assembla_api/client/spaces/ssh.rb
244
+ - lib/assembla_api/client/spaces/ssh/actions.rb
245
+ - lib/assembla_api/client/spaces/ssh/actions/launches.rb
246
+ - lib/assembla_api/client/spaces/ssh/keys.rb
247
+ - lib/assembla_api/client/spaces/ssh/launches.rb
248
+ - lib/assembla_api/client/spaces/ssh/servers.rb
249
+ - lib/assembla_api/client/spaces/standup_away_reports.rb
250
+ - lib/assembla_api/client/spaces/standup_reports.rb
251
+ - lib/assembla_api/client/spaces/tags.rb
252
+ - lib/assembla_api/client/spaces/tickets.rb
253
+ - lib/assembla_api/client/spaces/tickets/associations.rb
254
+ - lib/assembla_api/client/spaces/tickets/comments.rb
255
+ - lib/assembla_api/client/spaces/tickets/custom_fields.rb
256
+ - lib/assembla_api/client/spaces/tickets/statuses.rb
257
+ - lib/assembla_api/client/spaces/user_roles.rb
258
+ - lib/assembla_api/client/spaces/users.rb
259
+ - lib/assembla_api/client/spaces/webhooks.rb
260
+ - lib/assembla_api/client/spaces/wiki_pages.rb
261
+ - lib/assembla_api/client/spaces/wiki_pages/versions.rb
262
+ - lib/assembla_api/client/tasks.rb
263
+ - lib/assembla_api/client/users.rb
264
+ - lib/assembla_api/client/users/keys.rb
265
+ - lib/assembla_api/configuration.rb
266
+ - lib/assembla_api/connection.rb
267
+ - lib/assembla_api/constants.rb
268
+ - lib/assembla_api/core_ext/array.rb
269
+ - lib/assembla_api/core_ext/hash.rb
270
+ - lib/assembla_api/core_ext/ordered_hash.rb
271
+ - lib/assembla_api/deprecation.rb
272
+ - lib/assembla_api/error.rb
273
+ - lib/assembla_api/error/bad_request.rb
274
+ - lib/assembla_api/error/client_error.rb
275
+ - lib/assembla_api/error/forbidden.rb
276
+ - lib/assembla_api/error/internal_server_error.rb
277
+ - lib/assembla_api/error/invalid_options.rb
278
+ - lib/assembla_api/error/not_acceptable.rb
279
+ - lib/assembla_api/error/not_found.rb
280
+ - lib/assembla_api/error/required_params.rb
281
+ - lib/assembla_api/error/service_error.rb
282
+ - lib/assembla_api/error/service_unavailable.rb
283
+ - lib/assembla_api/error/unauthorized.rb
284
+ - lib/assembla_api/error/unknown_media.rb
285
+ - lib/assembla_api/error/unknown_value.rb
286
+ - lib/assembla_api/error/unprocessable_entity.rb
287
+ - lib/assembla_api/error/validations.rb
288
+ - lib/assembla_api/ext/faraday.rb
289
+ - lib/assembla_api/jsonable.rb
290
+ - lib/assembla_api/middleware.rb
291
+ - lib/assembla_api/mime_type.rb
292
+ - lib/assembla_api/normalizer.rb
293
+ - lib/assembla_api/null_encoder.rb
294
+ - lib/assembla_api/page_iterator.rb
295
+ - lib/assembla_api/page_links.rb
296
+ - lib/assembla_api/paged_request.rb
297
+ - lib/assembla_api/pagination.rb
298
+ - lib/assembla_api/parameter_filter.rb
299
+ - lib/assembla_api/params_hash.rb
300
+ - lib/assembla_api/rate_limit.rb
301
+ - lib/assembla_api/request.rb
302
+ - lib/assembla_api/request/basic_auth.rb
303
+ - lib/assembla_api/request/jsonize.rb
304
+ - lib/assembla_api/request/key_auth.rb
305
+ - lib/assembla_api/request/oauth2.rb
306
+ - lib/assembla_api/request/verbs.rb
307
+ - lib/assembla_api/response.rb
308
+ - lib/assembla_api/response/header.rb
309
+ - lib/assembla_api/response/jsonize.rb
310
+ - lib/assembla_api/response/mashify.rb
311
+ - lib/assembla_api/response/raise_error.rb
312
+ - lib/assembla_api/response/xmlize.rb
313
+ - lib/assembla_api/response_wrapper.rb
314
+ - lib/assembla_api/ssl_certs/cacerts.pem
315
+ - lib/assembla_api/utils/url.rb
316
+ - lib/assembla_api/validations.rb
317
+ - lib/assembla_api/validations/format.rb
318
+ - lib/assembla_api/validations/presence.rb
319
+ - lib/assembla_api/validations/required.rb
320
+ - lib/assembla_api/validations/token.rb
321
+ - lib/assembla_api/version.rb
322
+ homepage: http://www.assembla.com/
323
+ licenses:
324
+ - MIT
325
+ metadata: {}
326
+ post_install_message:
327
+ rdoc_options: []
328
+ require_paths:
329
+ - lib
330
+ required_ruby_version: !ruby/object:Gem::Requirement
331
+ requirements:
332
+ - - ">="
333
+ - !ruby/object:Gem::Version
334
+ version: '0'
335
+ required_rubygems_version: !ruby/object:Gem::Requirement
336
+ requirements:
337
+ - - ">="
338
+ - !ruby/object:Gem::Version
339
+ version: '0'
340
+ requirements: []
341
+ rubyforge_project:
342
+ rubygems_version: 2.2.2
343
+ signing_key:
344
+ specification_version: 4
345
+ summary: Ruby client for the official Assembla API
346
+ test_files: []
347
+ has_rdoc: