revily 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
File without changes
@@ -0,0 +1,5 @@
1
+ 1. Fork it
2
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
3
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
4
+ 4. Push to the branch (`git push origin my-new-feature`)
5
+ 5. Create new Pull Request
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Applied Awesome LLC
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,21 @@
1
+ # Revily
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'revily'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install revily
18
+
19
+ ## Usage
20
+
21
+ incidents
@@ -0,0 +1,61 @@
1
+ module Revily
2
+ module Client
3
+
4
+ end
5
+ end
6
+ # require 'revily/authentication'
7
+ # require 'revily/connection'
8
+ # require 'revily/request'
9
+
10
+ # require 'revily/clients/incidents'
11
+ # require 'revily/clients/policies'
12
+ # require 'revily/clients/policy_rules'
13
+ # require 'revily/clients/schedule_layers'
14
+ # require 'revily/clients/schedules'
15
+ # require 'revily/clients/services'
16
+ # require 'revily/clients/users'
17
+
18
+ # module Revily
19
+ # class Client
20
+ # attr_accessor(*Config::VALID_OPTIONS_KEYS)
21
+
22
+ # def initialize(options={})
23
+ # options = Revily.options.merge(options)
24
+ # Config::VALID_OPTIONS_KEYS.each do |key|
25
+ # send("#{key}=", options[key])
26
+ # end
27
+ # end
28
+
29
+ # include Revily::Authentication
30
+ # include Revily::Connection
31
+ # include Revily::Request
32
+
33
+ # include Revily::Client::Incidents
34
+ # include Revily::Client::Integration
35
+ # include Revily::Client::Policies
36
+ # include Revily::Client::PolicyRules
37
+ # include Revily::Client::ScheduleLayers
38
+ # include Revily::Client::Schedules
39
+ # include Revily::Client::Services
40
+ # include Revily::Client::Users
41
+ # include Revily::Client::Webhooks
42
+ # end
43
+ # end
44
+
45
+ # extend Config
46
+
47
+ # class << self
48
+
49
+ # def new(options={})
50
+ # Revily::Client.new(options)
51
+ # end
52
+
53
+ # def method_missing(method, *args, &block)
54
+ # return super unless new.respond_to?(method)
55
+ # new.send(method, *args, &block)
56
+ # end
57
+
58
+ # def respond_to?(method, include_private=false)
59
+ # new.respond_to?(method, include_private) || super(method, include_private)
60
+ # end
61
+ # end
@@ -0,0 +1,52 @@
1
+ require 'faraday'
2
+ require 'revily/version'
3
+
4
+ module Revily
5
+ module Config
6
+ VALID_OPTION_KEYS = [
7
+ :adapter,
8
+ :api_version,
9
+ :api_endpoint,
10
+ :auth_token,
11
+ :faraday_config_block,
12
+ :user_agent
13
+ ]
14
+
15
+ DEFAULT_ADAPTER = Faraday.default_adapter
16
+ DEFAULT_API_VERSION = 1
17
+ DEFAULT_API_ENDPOINT = ENV['REVEILLE_API_ENDPOINT'] || 'https://api.revily.io/'
18
+ DEFAULT_USER_AGENT = "Revily Ruby Client v#{Revily::VERSION}"
19
+
20
+ attr_accessor(*VALID_OPTION_KEYS)
21
+
22
+ def self.extended(base)
23
+ base.reset
24
+ end
25
+
26
+ def configure
27
+ yield self
28
+ end
29
+
30
+ def options
31
+ VALID_OPTION_KEYS.inject({}) { |opts, key| opts.merge!(key => send(key) }
32
+ end
33
+
34
+ def api_endpoint=(value)
35
+ @api_endpoint = File.join(value, "")
36
+ end
37
+
38
+ def faraday_config(&block)
39
+ @faraday_config_block = block
40
+ end
41
+
42
+ def reset
43
+ self.adapter = DEFAULT_ADAPTER
44
+ self.api_version = DEFAULT_API_VERSION
45
+ self.api_endpoint = DEFAULT_API_ENDPOINT
46
+ self.user_agent = DEFAULT_USER_AGENT
47
+ self.auth_token = nil
48
+ end
49
+
50
+
51
+ end
52
+ end
@@ -0,0 +1,26 @@
1
+
2
+ module Revily
3
+ module Connection
4
+ def connection(options={})
5
+ options = {
6
+ authenticate: true,
7
+ raw: false
8
+ }.merge(options)
9
+
10
+ connection = Faraday.new(options) do |builder|
11
+
12
+ builder.use FaradayMiddleware::FollowRedirects
13
+ builder.use FaradayMiddleware::Mashify
14
+ builder.use FaradayMiddleware::ParseJson, content_type: /\bjson$/
15
+
16
+ faraday_config_block.call(builder) if faraday_config_block
17
+
18
+ builder.adapter *adapter
19
+ end
20
+
21
+ connection.headers[:user_agent] = user_agent
22
+
23
+ connection
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,23 @@
1
+ module Revily
2
+ class Client
3
+ module Incidents
4
+
5
+ def incidents(service_id=nil, options={})
6
+ service_id ? get "services/#{service_id}/incidents", options : get "incidents", options
7
+ end
8
+ alias :list_incidents :incidents
9
+
10
+ def incident(id, options={})
11
+ get "incidents/#{id}", options
12
+ end
13
+
14
+ def acknowledge_incident(id, options={})
15
+ get "incidents/#{id}/acknowledge", options
16
+ end
17
+
18
+ def resolve_incident(id, options={})
19
+ get "incidents/#{id}/resolve", options
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,27 @@
1
+ module Revily
2
+ class Client
3
+ module Integration
4
+
5
+ def service_trigger_incident(key, message=nil, description=nil, options={})
6
+ incident = {
7
+ message: message,
8
+ description: description,
9
+ key: key
10
+ }
11
+ put "trigger", options.merge(incident)
12
+ end
13
+ alias :service_trigger :service_trigger_incident
14
+
15
+ def service_acknowledge_incident(key, options={})
16
+ put "acknowledge", options.merge(key: key)
17
+ end
18
+ alias :service_acknowledge :service_acknowledge_incident
19
+
20
+ def service_resolve_incident(key, options={})
21
+ put "resolve", options.merge(key: key)
22
+ end
23
+ alias :service_resolve :service_resolve_incident
24
+
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,28 @@
1
+ module Revily
2
+ class Client
3
+ module Policies
4
+
5
+ def policies(options={})
6
+ get "policies", options
7
+ end
8
+ alias :list_policies :policies
9
+
10
+ def policy(id, options={})
11
+ get "policies/#{id}", options
12
+ end
13
+
14
+ def create_policy(name, loop_limit, options={})
15
+ post "policies", options.merge({name: name, loop_limit: loop_limit})
16
+ end
17
+
18
+ def update_policy(id, options={})
19
+ patch "policies/#{id}", options
20
+ end
21
+
22
+ def delete_policy(id, options={})
23
+ delete "policies/#{id}", options
24
+ end
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,32 @@
1
+ module Revily
2
+ class Client
3
+ module PolicyRules
4
+ def policy_rules(policy_id, options={})
5
+ get "policies/#{policy_id}/rules", options
6
+ end
7
+ alias :list_policy_rules :policy_rules
8
+ alias :list_rules :policy_rules
9
+
10
+ def policy_rule(policy_id, id, options={})
11
+ get "policies/#{policy_id}/rules/#{id}", options
12
+ end
13
+ alias :rule :policy_rule
14
+
15
+ def create_policy_rule(assignment_id, loop_limit, options={})
16
+ post "policies", options.merge({name: name, loop_limit: loop_limit})
17
+ end
18
+ alias :create_rule :create_policy_rule
19
+
20
+ def update_policy_rule(policy_id, id, options={})
21
+ patch "policies/#{policy_id}/rules/#{id}", options
22
+ end
23
+ alias :update_rule :update_policy_rule
24
+
25
+ def delete_policy_rule(policy_id, id, options={})
26
+ delete "policies/#{policy_id}/rules/#{id}", options
27
+ end
28
+ alias :delete_rule :delete_policy_rule
29
+
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,62 @@
1
+ require 'multi_json'
2
+
3
+ module Revily
4
+ module Request
5
+
6
+ def delete(path, options={})
7
+ request(:delete, path, options).body
8
+ end
9
+
10
+ def get(path, options={})
11
+ response = request(:get, path, options)
12
+ body = response.body
13
+
14
+ body
15
+ end
16
+
17
+ def patch(path, options={})
18
+ request(:patch, path, options).body
19
+ end
20
+
21
+ def post(path, options={})
22
+ request(:post, path, options).body
23
+ end
24
+
25
+ def put(path, options={})
26
+ request(:put, path, options).body
27
+ end
28
+
29
+ private
30
+
31
+ def request(method, path, options={})
32
+
33
+ end path = URI.encode path
34
+
35
+ token = options.delete(:auth_token) || options.delete(:access_token)
36
+
37
+ url = options.delete(:endpoint) || api_endpoint
38
+
39
+ conn_options = {
40
+ :url => url
41
+ }
42
+
43
+ response = connection(conn_options).send(method) do |request|
44
+ request.headers['Accept'] = options.delete(:accept) || "application/vnd.revily.v#{DEFAULT_API_VERSION}+json"
45
+
46
+ request.headers['Authorization'] = "token #{token}" if token
47
+
48
+ case method
49
+ when :get
50
+ request.url(path, options)
51
+ when :delete, :head
52
+ request.url(path, options)
53
+ when :patch, :post, :put
54
+ request.path = path
55
+ request.body = MultiJson.dump(options) unless options.empty?
56
+ end
57
+ end
58
+
59
+ response
60
+ end
61
+
62
+ end
@@ -0,0 +1,7 @@
1
+ module Revily
2
+ class Client
3
+ module ScheduleLayers
4
+
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Revily
2
+ class Client
3
+ module Schedules
4
+
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Revily
2
+ class Client
3
+ module Services
4
+
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Revily
2
+ class Client
3
+ module Users
4
+
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module Revily
2
+ module Client
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ module Revily
2
+ class Client
3
+ module Webhooks
4
+
5
+ end
6
+ end
7
+ end
File without changes
File without changes
@@ -0,0 +1,30 @@
1
+ require 'rspec'
2
+ require 'webmock/rspec'
3
+
4
+ RSpec.configure do |config|
5
+ config.mock_with :rspec
6
+ config.use_transactional_fixtures = false
7
+ config.infer_base_class_for_anonymous_controllers = false
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.order = "random"
10
+ config.run_all_when_everything_filtered = true
11
+ config.filter_run focus: true
12
+ config.filter_run_excluding external: true
13
+ end
14
+
15
+ def fixture_path
16
+ File.expand_path("../support/fixtures", __FILE__)
17
+ end
18
+
19
+ def fixture
20
+ File.new(fixture_path + '/' + file)
21
+ end
22
+
23
+ def json_response(file)
24
+ {
25
+ body: fixture(file),
26
+ headers: {
27
+ content_type: 'application/json; charset=utf-8'
28
+ }
29
+ }
30
+ end
metadata ADDED
@@ -0,0 +1,344 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: revily
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Dan Ryan
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-07-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: cabin
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '0.6'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '0.6'
30
+ - !ruby/object:Gem::Dependency
31
+ name: clamp
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '0.6'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '0.6'
46
+ - !ruby/object:Gem::Dependency
47
+ name: faraday
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '0.8'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '0.8'
62
+ - !ruby/object:Gem::Dependency
63
+ name: faraday_middleware
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '0.9'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '0.9'
78
+ - !ruby/object:Gem::Dependency
79
+ name: hashie
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: '2.0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '2.0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: multi_json
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: '1.7'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: '1.7'
110
+ - !ruby/object:Gem::Dependency
111
+ name: bundler
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: '1.3'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: '1.3'
126
+ - !ruby/object:Gem::Dependency
127
+ name: guard-rspec
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: 3.0.2
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: 3.0.2
142
+ - !ruby/object:Gem::Dependency
143
+ name: guard-spork
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ - !ruby/object:Gem::Dependency
159
+ name: libnotify
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ - !ruby/object:Gem::Dependency
175
+ name: pry
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ! '>='
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ! '>='
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ - !ruby/object:Gem::Dependency
191
+ name: rake
192
+ requirement: !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ! '>='
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ type: :development
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ! '>='
204
+ - !ruby/object:Gem::Version
205
+ version: '0'
206
+ - !ruby/object:Gem::Dependency
207
+ name: rb-fsevent
208
+ requirement: !ruby/object:Gem::Requirement
209
+ none: false
210
+ requirements:
211
+ - - ! '>='
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ type: :development
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
218
+ requirements:
219
+ - - ! '>='
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
222
+ - !ruby/object:Gem::Dependency
223
+ name: rb-inotify
224
+ requirement: !ruby/object:Gem::Requirement
225
+ none: false
226
+ requirements:
227
+ - - ! '>='
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ none: false
234
+ requirements:
235
+ - - ! '>='
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
238
+ - !ruby/object:Gem::Dependency
239
+ name: rspec
240
+ requirement: !ruby/object:Gem::Requirement
241
+ none: false
242
+ requirements:
243
+ - - ! '>='
244
+ - !ruby/object:Gem::Version
245
+ version: 2.13.0
246
+ type: :development
247
+ prerelease: false
248
+ version_requirements: !ruby/object:Gem::Requirement
249
+ none: false
250
+ requirements:
251
+ - - ! '>='
252
+ - !ruby/object:Gem::Version
253
+ version: 2.13.0
254
+ - !ruby/object:Gem::Dependency
255
+ name: ruby_gntp
256
+ requirement: !ruby/object:Gem::Requirement
257
+ none: false
258
+ requirements:
259
+ - - ! '>='
260
+ - !ruby/object:Gem::Version
261
+ version: '0'
262
+ type: :development
263
+ prerelease: false
264
+ version_requirements: !ruby/object:Gem::Requirement
265
+ none: false
266
+ requirements:
267
+ - - ! '>='
268
+ - !ruby/object:Gem::Version
269
+ version: '0'
270
+ - !ruby/object:Gem::Dependency
271
+ name: webmock
272
+ requirement: !ruby/object:Gem::Requirement
273
+ none: false
274
+ requirements:
275
+ - - ! '>='
276
+ - !ruby/object:Gem::Version
277
+ version: 1.13.0
278
+ type: :development
279
+ prerelease: false
280
+ version_requirements: !ruby/object:Gem::Requirement
281
+ none: false
282
+ requirements:
283
+ - - ! '>='
284
+ - !ruby/object:Gem::Version
285
+ version: 1.13.0
286
+ description: A library for communicating with the revi.ly service or self-hosted Revily
287
+ setup.
288
+ email:
289
+ - hi@revi.ly
290
+ executables: []
291
+ extensions: []
292
+ extra_rdoc_files: []
293
+ files:
294
+ - CHANGELOG.md
295
+ - CONTRIBUTING
296
+ - LICENSE
297
+ - README.md
298
+ - lib/revily/client.rb
299
+ - lib/revily/client/config.rb
300
+ - lib/revily/client/connection.rb
301
+ - lib/revily/client/incidents.rb
302
+ - lib/revily/client/integration.rb
303
+ - lib/revily/client/policies.rb
304
+ - lib/revily/client/policy_rules.rb
305
+ - lib/revily/client/request.rb
306
+ - lib/revily/client/schedule_layers.rb
307
+ - lib/revily/client/schedules.rb
308
+ - lib/revily/client/services.rb
309
+ - lib/revily/client/users.rb
310
+ - lib/revily/client/version.rb
311
+ - lib/revily/client/webhooks.rb
312
+ - spec/revily/command_spec.rb
313
+ - spec/revily_spec.rb
314
+ - spec/spec_helper.rb
315
+ homepage: https://revi.ly
316
+ licenses:
317
+ - MIT
318
+ post_install_message:
319
+ rdoc_options: []
320
+ require_paths:
321
+ - lib
322
+ required_ruby_version: !ruby/object:Gem::Requirement
323
+ none: false
324
+ requirements:
325
+ - - ! '>='
326
+ - !ruby/object:Gem::Version
327
+ version: 1.9.3
328
+ required_rubygems_version: !ruby/object:Gem::Requirement
329
+ none: false
330
+ requirements:
331
+ - - ! '>='
332
+ - !ruby/object:Gem::Version
333
+ version: 1.3.6
334
+ requirements: []
335
+ rubyforge_project:
336
+ rubygems_version: 1.8.23
337
+ signing_key:
338
+ specification_version: 3
339
+ summary: A library for communicating with the revi.ly service or self-hosted Revily
340
+ setup.
341
+ test_files:
342
+ - spec/revily/command_spec.rb
343
+ - spec/revily_spec.rb
344
+ - spec/spec_helper.rb