assembla_api 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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: