ruroku 0.0.2 → 0.0.3
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.
- data/CHANGELOG.md +18 -1
- data/README.md +51 -1
- data/TODO.md +0 -2
- data/lib/ruroku.rb +23 -30
- data/lib/ruroku/api.rb +6 -2
- data/lib/ruroku/app.rb +46 -0
- data/lib/ruroku/base.rb +17 -2
- data/lib/ruroku/config_var.rb +13 -0
- data/lib/ruroku/nested_base.rb +1 -2
- data/lib/ruroku/release.rb +15 -0
- data/lib/ruroku/resource_sets.rb +12 -0
- data/lib/ruroku/{addon_set.rb → resource_sets/addon_set.rb} +1 -1
- data/lib/ruroku/resource_sets/app_set.rb +24 -0
- data/lib/ruroku/{collaborator_set.rb → resource_sets/collaborator_set.rb} +11 -0
- data/lib/ruroku/{config_var_set.rb → resource_sets/config_var_set.rb} +11 -0
- data/lib/ruroku/{domain_set.rb → resource_sets/domain_set.rb} +0 -0
- data/lib/ruroku/{key_set.rb → resource_sets/key_set.rb} +0 -0
- data/lib/ruroku/{nested_resource_set.rb → resource_sets/nested_resource_set.rb} +0 -0
- data/lib/ruroku/resource_sets/process_set.rb +38 -0
- data/lib/ruroku/resource_sets/release_set.rb +33 -0
- data/lib/ruroku/{resource_set.rb → resource_sets/resource_set.rb} +38 -7
- data/lib/ruroku/{stack_set.rb → resource_sets/stack_set.rb} +0 -0
- data/lib/ruroku/version.rb +1 -1
- data/ruroku.gemspec +5 -5
- data/spec/helpers/release.rb +4 -0
- data/spec/ruroku/api_spec.rb +12 -0
- data/spec/ruroku/app_spec.rb +14 -0
- data/spec/ruroku/config_var_set_spec.rb +31 -0
- data/spec/ruroku/release_spec.rb +14 -0
- data/spec/spec_helper.rb +1 -1
- metadata +20 -15
- data/lib/ruroku/app_set.rb +0 -13
- data/lib/ruroku/process_set.rb +0 -20
- data/lib/ruroku/release_set.rb +0 -13
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,21 @@
|
|
1
|
-
##
|
1
|
+
## Ruroku 0.0.3 (Jun 12, 2012)
|
2
|
+
|
3
|
+
* Added alternative app finder: `heroku['app-name']`
|
4
|
+
* Added release range finder: `releases[1..10]`
|
5
|
+
* Added release finder: `releases[2]` and `releases['v2']`
|
6
|
+
* Added process finder, which can return specific process or process
|
7
|
+
group: `processes['web.1']` and `processes['web']`
|
8
|
+
* Added app, collaborator finders, now possible to `apps['app-name']` or
|
9
|
+
`collaborators['email@me.com']`
|
10
|
+
* Added logs access
|
11
|
+
* Added config var access convenience method `#[]`, so it's possible to
|
12
|
+
`app.config_vars['KEY']` to get specific `Ruroku::ConfigVar`
|
13
|
+
* Added `#rollback` to `Ruroku::Release`
|
14
|
+
* Added ability to rename apps
|
15
|
+
* Added ability to transfer app ownership
|
16
|
+
* Added ability to delete apps
|
17
|
+
|
18
|
+
## Ruroku 0.0.2 (Jun 10, 2012)
|
2
19
|
|
3
20
|
* Added collection reloading
|
4
21
|
* Added collection caching
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
[](https://gemnasium.com/goshakkk/ruroku)
|
4
4
|
|
5
5
|
The better Ruby client for Heroku API, built on top of official
|
6
|
-
`heroku.rb` gem.
|
6
|
+
[`heroku.rb`](https://github.com/heroku/heroku.rb) gem.
|
7
7
|
|
8
8
|
## Installation
|
9
9
|
|
@@ -48,6 +48,14 @@ To get specific app:
|
|
48
48
|
|
49
49
|
```ruby
|
50
50
|
app = heroku.app 'app-name'
|
51
|
+
|
52
|
+
# or:
|
53
|
+
|
54
|
+
app = heroku.apps['app-name']
|
55
|
+
|
56
|
+
# or even:
|
57
|
+
|
58
|
+
app = heroku['app-name']
|
51
59
|
```
|
52
60
|
|
53
61
|
And access its properties such as:
|
@@ -117,6 +125,12 @@ List all app collaborators:
|
|
117
125
|
collaborators = app.collaborators
|
118
126
|
```
|
119
127
|
|
128
|
+
get a specific collaborator:
|
129
|
+
|
130
|
+
```ruby
|
131
|
+
collaborators['guy@me.com']
|
132
|
+
```
|
133
|
+
|
120
134
|
and
|
121
135
|
|
122
136
|
```ruby
|
@@ -154,6 +168,13 @@ They can also be updated like that:
|
|
154
168
|
config_var.value = 'new value'
|
155
169
|
```
|
156
170
|
|
171
|
+
Get/set a specific var:
|
172
|
+
|
173
|
+
```ruby
|
174
|
+
config_vars['DEBUG'] # => false
|
175
|
+
config_vars['DEBUG'] = true
|
176
|
+
```
|
177
|
+
|
157
178
|
And it'll instantly get updated.
|
158
179
|
|
159
180
|
### Domains
|
@@ -193,6 +214,13 @@ processes.stop 'ps' => 'run.1'
|
|
193
214
|
processes.stop 'type' => 'worker'
|
194
215
|
```
|
195
216
|
|
217
|
+
And access specific processes/process groups:
|
218
|
+
|
219
|
+
```ruby
|
220
|
+
processes['web.1']
|
221
|
+
processes['web']
|
222
|
+
```
|
223
|
+
|
196
224
|
### Releases
|
197
225
|
|
198
226
|
List all app releases:
|
@@ -201,10 +229,24 @@ List all app releases:
|
|
201
229
|
releases = app.releases
|
202
230
|
```
|
203
231
|
|
232
|
+
Get specific release:
|
233
|
+
|
234
|
+
```ruby
|
235
|
+
releases[2]
|
236
|
+
releases['v2']
|
237
|
+
```
|
238
|
+
|
239
|
+
Or a range of releases:
|
240
|
+
|
241
|
+
```ruby
|
242
|
+
releases[1..10]
|
243
|
+
```
|
244
|
+
|
204
245
|
And rollback to any release:
|
205
246
|
|
206
247
|
```ruby
|
207
248
|
releases.rollback 'v1'
|
249
|
+
release.rollback
|
208
250
|
```
|
209
251
|
|
210
252
|
### Stacks
|
@@ -221,6 +263,14 @@ Migrate the app to available stack:
|
|
221
263
|
stacks.migrate 'stack-name'
|
222
264
|
```
|
223
265
|
|
266
|
+
### Logs
|
267
|
+
|
268
|
+
Get the Array of String log lines:
|
269
|
+
|
270
|
+
```ruby
|
271
|
+
app.logs
|
272
|
+
```
|
273
|
+
|
224
274
|
### User
|
225
275
|
|
226
276
|
Get User object associtaed with current heroku account:
|
data/TODO.md
CHANGED
data/lib/ruroku.rb
CHANGED
@@ -1,35 +1,28 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
1
|
+
require 'time'
|
2
|
+
require 'net/http'
|
3
|
+
require 'heroku-api'
|
4
|
+
require 'virtus'
|
5
|
+
require 'active_support/core_ext/numeric'
|
6
|
+
require 'active_support/core_ext/string'
|
6
7
|
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require "ruroku/resource_set"
|
10
|
-
require "ruroku/nested_resource_set"
|
8
|
+
require 'ruroku/base'
|
9
|
+
require 'ruroku/nested_base'
|
11
10
|
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
17
|
-
require
|
18
|
-
require
|
19
|
-
require
|
20
|
-
require
|
21
|
-
require
|
22
|
-
require
|
23
|
-
|
24
|
-
require
|
25
|
-
|
26
|
-
require
|
27
|
-
require "ruroku/stack"
|
28
|
-
require "ruroku/stack_set"
|
29
|
-
require "ruroku/user"
|
30
|
-
require "ruroku/key"
|
31
|
-
require "ruroku/key_set"
|
32
|
-
require "ruroku/version"
|
11
|
+
require 'ruroku/api'
|
12
|
+
require 'ruroku/app'
|
13
|
+
require 'ruroku/addon'
|
14
|
+
require 'ruroku/collaborator'
|
15
|
+
require 'ruroku/config_var'
|
16
|
+
require 'ruroku/domain'
|
17
|
+
require 'ruroku/process'
|
18
|
+
require 'ruroku/release'
|
19
|
+
require 'ruroku/stack'
|
20
|
+
require 'ruroku/user'
|
21
|
+
require 'ruroku/key'
|
22
|
+
|
23
|
+
require 'ruroku/resource_sets'
|
24
|
+
|
25
|
+
require 'ruroku/version'
|
33
26
|
|
34
27
|
module Ruroku
|
35
28
|
end
|
data/lib/ruroku/api.rb
CHANGED
@@ -7,16 +7,20 @@ module Ruroku
|
|
7
7
|
end
|
8
8
|
|
9
9
|
# Public: Get apps associated with current heroku account.
|
10
|
-
#
|
11
|
-
# Returns the Array[App].
|
12
10
|
def apps
|
13
11
|
@apps ||= AppSet.new heroku_api
|
14
12
|
end
|
15
13
|
|
16
14
|
# Public: Get specific app.
|
15
|
+
#
|
16
|
+
# Examples
|
17
|
+
#
|
18
|
+
# heroku.app 'app-name'
|
19
|
+
# heroku['app-name']
|
17
20
|
def app(app_name)
|
18
21
|
App.new heroku_api, heroku_api.get_app(app_name).body
|
19
22
|
end
|
23
|
+
alias :[] :app
|
20
24
|
|
21
25
|
# Public: Get keys associated with current heroku account.
|
22
26
|
def keys
|
data/lib/ruroku/app.rb
CHANGED
@@ -50,6 +50,27 @@ module Ruroku
|
|
50
50
|
@stacks ||= StackSet.new self
|
51
51
|
end
|
52
52
|
|
53
|
+
# Public: Get app logs.
|
54
|
+
#
|
55
|
+
# Examples
|
56
|
+
#
|
57
|
+
# app.logs
|
58
|
+
#
|
59
|
+
# Returns the Array of String log lines.
|
60
|
+
def logs
|
61
|
+
log_url = api.get_logs(name).body
|
62
|
+
log_uri = URI.parse log_url
|
63
|
+
|
64
|
+
http = Net::HTTP.new log_uri.host, log_uri.port
|
65
|
+
http.use_ssl = true
|
66
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
67
|
+
request = Net::HTTP::Get.new log_uri.request_uri
|
68
|
+
|
69
|
+
data = http.request request
|
70
|
+
|
71
|
+
data.body.split "\n"
|
72
|
+
end
|
73
|
+
|
53
74
|
# Public: Turn the maintenance mode on.
|
54
75
|
def maintenance!
|
55
76
|
api.post_app_maintenance name, '1'
|
@@ -59,5 +80,30 @@ module Ruroku
|
|
59
80
|
def no_maintenance!
|
60
81
|
api.post_app_maintenance name, '0'
|
61
82
|
end
|
83
|
+
|
84
|
+
# Public: Rename the app.
|
85
|
+
#
|
86
|
+
# Examples
|
87
|
+
#
|
88
|
+
# app.rename 'new-name'
|
89
|
+
def rename(new_name)
|
90
|
+
api.put_app name, name: new_name
|
91
|
+
self.name = new_name
|
92
|
+
end
|
93
|
+
|
94
|
+
# Public: Transfer app ownership.
|
95
|
+
#
|
96
|
+
# Examples
|
97
|
+
#
|
98
|
+
# app.transfer_ownership 'new_owner@me.com'
|
99
|
+
def transfer_ownership(new_owner)
|
100
|
+
api.put_app name, transfer_owner: new_owner
|
101
|
+
end
|
102
|
+
|
103
|
+
def delete!
|
104
|
+
api_method = "delete_app"
|
105
|
+
resource_id = name
|
106
|
+
api.send api_method, name, resource_id
|
107
|
+
end
|
62
108
|
end
|
63
109
|
end
|
data/lib/ruroku/base.rb
CHANGED
@@ -11,6 +11,17 @@ module Ruroku
|
|
11
11
|
end
|
12
12
|
|
13
13
|
# Public: Define resource id key.
|
14
|
+
# It's used to represent the resource when talking to API. (It might be
|
15
|
+
# the name of the app for App object, the email for Collaborator object,
|
16
|
+
# and so on.)
|
17
|
+
#
|
18
|
+
# Examples
|
19
|
+
#
|
20
|
+
# class App < Base
|
21
|
+
# attr_accessor :name
|
22
|
+
#
|
23
|
+
# resource_id :name
|
24
|
+
# end
|
14
25
|
def self.resource_id(id_key = nil)
|
15
26
|
if id_key
|
16
27
|
@_resource_id = id_key
|
@@ -19,9 +30,13 @@ module Ruroku
|
|
19
30
|
end
|
20
31
|
end
|
21
32
|
|
33
|
+
# Public: Get the value of resource id.
|
34
|
+
def resource_id
|
35
|
+
send self.class.resource_id
|
36
|
+
end
|
37
|
+
|
22
38
|
def inspect
|
23
|
-
if
|
24
|
-
resource_id = send self.class.resource_id
|
39
|
+
if resource_id
|
25
40
|
"<#{self.class} #{resource_id}>"
|
26
41
|
else
|
27
42
|
"<#{self.class}>"
|
data/lib/ruroku/config_var.rb
CHANGED
@@ -6,6 +6,19 @@ module Ruroku
|
|
6
6
|
resource_id :key
|
7
7
|
deletable_resource
|
8
8
|
|
9
|
+
# Public: Set a ConfigVar value.
|
10
|
+
# Sets instance variable if current value is nil.
|
11
|
+
# If curren value is present, queries the api to update current var's
|
12
|
+
# value, and updates instance variable.
|
13
|
+
#
|
14
|
+
# Examples
|
15
|
+
#
|
16
|
+
# config_var = ConfigVar.new app # empty config var
|
17
|
+
# config_var.key = 'KEY'
|
18
|
+
# config_var.value = 'value' # doesn't send an api request
|
19
|
+
#
|
20
|
+
# config_var = app.config_vars['KEY'] # non-empty config var
|
21
|
+
# config_var.value = 'value' # sends the api request & updates i-var
|
9
22
|
def value=(new_value)
|
10
23
|
if @value.nil?
|
11
24
|
@value = new_value
|
data/lib/ruroku/nested_base.rb
CHANGED
@@ -8,13 +8,12 @@ module Ruroku
|
|
8
8
|
super app.api, attributes
|
9
9
|
end
|
10
10
|
|
11
|
-
# Public:
|
11
|
+
# Public: Declare nested resource as deletable.
|
12
12
|
def self.deletable_resource
|
13
13
|
resource_name = name.demodulize.underscore
|
14
14
|
|
15
15
|
define_method :delete! do
|
16
16
|
api_method = "delete_#{resource_name}"
|
17
|
-
resource_id = send self.class.resource_id
|
18
17
|
api.send api_method, app.name, resource_id
|
19
18
|
end
|
20
19
|
end
|
data/lib/ruroku/release.rb
CHANGED
@@ -10,5 +10,20 @@ module Ruroku
|
|
10
10
|
attribute :created_at, Time
|
11
11
|
|
12
12
|
resource_id :name
|
13
|
+
|
14
|
+
# Public: Rollback to specific release.
|
15
|
+
#
|
16
|
+
# Examples
|
17
|
+
#
|
18
|
+
# release.rollback
|
19
|
+
def rollback
|
20
|
+
api.post_release app.name, name
|
21
|
+
end
|
22
|
+
|
23
|
+
# Public: Convert the release to Integer.
|
24
|
+
# Returns the release version number.
|
25
|
+
def to_i
|
26
|
+
name[1..-1]
|
27
|
+
end
|
13
28
|
end
|
14
29
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'ruroku/resource_sets/resource_set'
|
2
|
+
require 'ruroku/resource_sets/nested_resource_set'
|
3
|
+
|
4
|
+
require 'ruroku/resource_sets/app_set'
|
5
|
+
require 'ruroku/resource_sets/addon_set'
|
6
|
+
require 'ruroku/resource_sets/collaborator_set'
|
7
|
+
require 'ruroku/resource_sets/config_var_set'
|
8
|
+
require 'ruroku/resource_sets/domain_set'
|
9
|
+
require 'ruroku/resource_sets/key_set'
|
10
|
+
require 'ruroku/resource_sets/process_set'
|
11
|
+
require 'ruroku/resource_sets/release_set'
|
12
|
+
require 'ruroku/resource_sets/stack_set'
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Ruroku
|
2
|
+
class AppSet < ResourceSet
|
3
|
+
resource_class App
|
4
|
+
collection_api_selector :get_apps
|
5
|
+
|
6
|
+
# Map API methods to collection methods.
|
7
|
+
#
|
8
|
+
# Examples
|
9
|
+
#
|
10
|
+
# apps.create name: 'another-app', stack: 'cedar'
|
11
|
+
map_api create: :post_app
|
12
|
+
|
13
|
+
# Public: Find an App with specified name.
|
14
|
+
#
|
15
|
+
# Examples
|
16
|
+
#
|
17
|
+
# apps['test-app']
|
18
|
+
#
|
19
|
+
# Returns the App object.
|
20
|
+
def [](app_name)
|
21
|
+
select { |app| app.name == app_name }.first
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -11,5 +11,16 @@ module Ruroku
|
|
11
11
|
# collaborators.delete 'collaborator-email'
|
12
12
|
map_api add: :post_collaborator,
|
13
13
|
delete: :delete_collaborator
|
14
|
+
|
15
|
+
# Public: Find a Collaborator with specified email.
|
16
|
+
#
|
17
|
+
# Examples
|
18
|
+
#
|
19
|
+
# collaborators['guy@me.com']
|
20
|
+
#
|
21
|
+
# Returns the Collaborator object.
|
22
|
+
def [](collaborator_email)
|
23
|
+
select { |collaborator| collaborator.email == collaborator_email }.first
|
24
|
+
end
|
14
25
|
end
|
15
26
|
end
|
@@ -11,5 +11,16 @@ module Ruroku
|
|
11
11
|
# config_vars.delete 'KEY'
|
12
12
|
map_api add: :post_config_vars,
|
13
13
|
delete: :delete_config_var
|
14
|
+
|
15
|
+
# Public: Find a ConfigVar with specified name.
|
16
|
+
#
|
17
|
+
# Examples
|
18
|
+
#
|
19
|
+
# config_vars['DEBUG']
|
20
|
+
#
|
21
|
+
# Returns the ConfigVar object.
|
22
|
+
def [](var_name)
|
23
|
+
select { |var| var.key == var_name }.first
|
24
|
+
end
|
14
25
|
end
|
15
26
|
end
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Ruroku
|
2
|
+
class ProcessSet < NestedResourceSet
|
3
|
+
resource_class Process
|
4
|
+
collection_api_selector :get_ps
|
5
|
+
|
6
|
+
# Map API methods to collection methods.
|
7
|
+
#
|
8
|
+
# Examples
|
9
|
+
#
|
10
|
+
# processes.run 'rake task'
|
11
|
+
# processes.restart
|
12
|
+
# processes.scale 'web', 10
|
13
|
+
# processes.stop 'ps' => 'web.1'
|
14
|
+
# processes.stop 'type' => 'web'
|
15
|
+
map_api run: :post_ps,
|
16
|
+
restart: :post_ps_restart,
|
17
|
+
scale: :ps_scale,
|
18
|
+
stop: :post_ps_stop
|
19
|
+
|
20
|
+
# Public: Find either a process when specified full process name,
|
21
|
+
# or a collection of processes, if specified a process type.
|
22
|
+
#
|
23
|
+
# Examples
|
24
|
+
#
|
25
|
+
# processes['web.1']
|
26
|
+
# processes['web']
|
27
|
+
#
|
28
|
+
# Returns the ProcessSet object if process type was passed, the
|
29
|
+
# Process object otherwise.
|
30
|
+
def [](process_name)
|
31
|
+
if process_name.include? '.'
|
32
|
+
select { |process| process.type == process_name }
|
33
|
+
else
|
34
|
+
select { |process| process.process == process_name }.first
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Ruroku
|
2
|
+
class ReleaseSet < NestedResourceSet
|
3
|
+
resource_class Release
|
4
|
+
collection_api_selector :get_releases
|
5
|
+
|
6
|
+
# Map API methods to collection methods.
|
7
|
+
#
|
8
|
+
# Examples
|
9
|
+
#
|
10
|
+
# releases.rollback 'v1'
|
11
|
+
map_api rollback: :post_release
|
12
|
+
|
13
|
+
# Public: Find the specified release.
|
14
|
+
#
|
15
|
+
# Examples
|
16
|
+
#
|
17
|
+
# releases[2]
|
18
|
+
# releases['v2']
|
19
|
+
# releases[1..10]
|
20
|
+
#
|
21
|
+
# Returns the ReleaseSet object if range of release numbers is passed,
|
22
|
+
# the Release object otherwise.
|
23
|
+
def [](release_name)
|
24
|
+
if release_name.instance_of? Range
|
25
|
+
select { |release| release_name.include? release.to_i }
|
26
|
+
else
|
27
|
+
release_name = "v#{release_name}" if release.instance_of? Fixnum
|
28
|
+
|
29
|
+
select { |release| release.name == release_name }.first
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -20,7 +20,7 @@ module Ruroku
|
|
20
20
|
query_collection_objects
|
21
21
|
end
|
22
22
|
|
23
|
-
#
|
23
|
+
# Internal: Query collection objects from API.
|
24
24
|
def query_collection_objects
|
25
25
|
collection_objects = api.send(self.class.collection_api_selector, *collection_query_params).body
|
26
26
|
|
@@ -35,27 +35,47 @@ module Ruroku
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
#
|
38
|
+
# Internal: Build a resource from response.
|
39
39
|
def build_resource(response)
|
40
40
|
resource_class = self.class.resource_class
|
41
|
-
resource_class.new response
|
41
|
+
resource_class.new api, response
|
42
42
|
end
|
43
43
|
|
44
|
-
#
|
44
|
+
# Internal: Get params for querying collection.
|
45
45
|
def collection_query_params
|
46
46
|
[]
|
47
47
|
end
|
48
48
|
|
49
49
|
# Public: Set or get a collection API selector.
|
50
|
-
|
51
|
-
|
52
|
-
|
50
|
+
# This selector method is then applied on the API object in order to
|
51
|
+
# get collection objects.
|
52
|
+
#
|
53
|
+
# selector - The Symbol api selector.
|
54
|
+
#
|
55
|
+
# Examples
|
56
|
+
#
|
57
|
+
# class KeySet < ResourceSet
|
58
|
+
# resource_class Key
|
59
|
+
# collection_api_selector :get_keys
|
60
|
+
# end
|
61
|
+
def self.collection_api_selector(selector = nil)
|
62
|
+
if selector
|
63
|
+
@_collection_api_selector = selector
|
53
64
|
else
|
54
65
|
@_collection_api_selector
|
55
66
|
end
|
56
67
|
end
|
57
68
|
|
58
69
|
# Public: Set or get a collection resource class.
|
70
|
+
# Once collection was queried, the response is processed and
|
71
|
+
# resources are created with resource class.
|
72
|
+
#
|
73
|
+
# Examples
|
74
|
+
#
|
75
|
+
# class KeySet < ResourceSet
|
76
|
+
# resource_class Key
|
77
|
+
# collection_api_selector :get_keys
|
78
|
+
# end
|
59
79
|
def self.resource_class(klass = nil)
|
60
80
|
if klass
|
61
81
|
@_resource_class = klass
|
@@ -64,6 +84,17 @@ module Ruroku
|
|
64
84
|
end
|
65
85
|
end
|
66
86
|
|
87
|
+
# Public: Create mappings "set method -> api method".
|
88
|
+
#
|
89
|
+
# methods - The Hash of set method -> api method mappings.
|
90
|
+
#
|
91
|
+
# Examples
|
92
|
+
#
|
93
|
+
# class KeySet < ResourceSet
|
94
|
+
# map_api add: :post_key
|
95
|
+
# end
|
96
|
+
#
|
97
|
+
# So now, when we call #add on KeySet, api#post_key is executed.
|
67
98
|
def self.map_api(methods)
|
68
99
|
methods.each do |method_name, api_mapping|
|
69
100
|
define_method method_name do |*args|
|
File without changes
|
data/lib/ruroku/version.rb
CHANGED
data/ruroku.gemspec
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
require File.expand_path('../lib/ruroku/version', __FILE__)
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
|
-
gem.authors = [
|
6
|
-
gem.email = [
|
5
|
+
gem.authors = ['Gosha Arinich']
|
6
|
+
gem.email = ['me@goshakkk.name']
|
7
7
|
gem.description = %q{The better Ruby client for the Heroku API}
|
8
8
|
gem.summary = %q{The better Ruby client for the Heroku API}
|
9
|
-
gem.homepage =
|
9
|
+
gem.homepage = ''
|
10
10
|
|
11
11
|
gem.files = `git ls-files`.split($\)
|
12
12
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
13
13
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
|
-
gem.name =
|
15
|
-
gem.require_paths = [
|
14
|
+
gem.name = 'ruroku'
|
15
|
+
gem.require_paths = ['lib']
|
16
16
|
gem.version = Ruroku::VERSION
|
17
17
|
|
18
18
|
gem.add_runtime_dependency 'heroku-api', '~> 0.2'
|
data/spec/helpers/release.rb
CHANGED
data/spec/ruroku/api_spec.rb
CHANGED
@@ -28,6 +28,18 @@ describe Ruroku::API do
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
+
describe '#[]' do
|
32
|
+
it 'gets app from api' do
|
33
|
+
heroku.should_receive(:get_app)
|
34
|
+
api['test-app']
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'returns app' do
|
38
|
+
app = api['test-app']
|
39
|
+
app.instance_of?(Ruroku::App).should be_true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
31
43
|
describe '#keys' do
|
32
44
|
it 'gets keys from api' do
|
33
45
|
heroku.should_receive(:get_keys)
|
data/spec/ruroku/app_spec.rb
CHANGED
@@ -110,4 +110,18 @@ describe Ruroku::App do
|
|
110
110
|
@app.no_maintenance!
|
111
111
|
end
|
112
112
|
end
|
113
|
+
|
114
|
+
describe '#rename' do
|
115
|
+
it 'renames the app' do
|
116
|
+
heroku.should_receive(:put_app).with(@app.name, name: 'new-app')
|
117
|
+
@app.rename 'new-app'
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
describe '#transfer_ownership' do
|
122
|
+
it 'transfers app ownership' do
|
123
|
+
heroku.should_receive(:put_app).with(@app.name, transfer_owner: 'new_owner@me.com')
|
124
|
+
@app.transfer_ownership 'new_owner@me.com'
|
125
|
+
end
|
126
|
+
end
|
113
127
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Ruroku::ConfigVarSet do
|
4
|
+
before do
|
5
|
+
@set = Ruroku::ConfigVarSet.new stubbed_app
|
6
|
+
@set_api = @set.api
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '#add' do
|
10
|
+
it 'maps to post_config_vars api method' do
|
11
|
+
@set_api.should_receive :post_config_vars
|
12
|
+
@set.add 'KEY' => 'value'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#delete' do
|
17
|
+
it 'maps to delete_config_var api method' do
|
18
|
+
@set_api.should_receive :delete_config_var
|
19
|
+
@set.delete 'KEY'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#[]' do
|
24
|
+
it 'finds specified ConfigVar' do
|
25
|
+
config_var = @set['KEY1']
|
26
|
+
config_var.key.should == 'KEY1'
|
27
|
+
config_var.value.should == 'value'
|
28
|
+
config_var.should == @set.first
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Ruroku::Release do
|
4
|
+
before do
|
5
|
+
@release = Ruroku::Release.new stubbed_app, name: 'v2'
|
6
|
+
end
|
7
|
+
|
8
|
+
describe '#rollback' do
|
9
|
+
it 'rollbacks to given release' do
|
10
|
+
@release.api.should_receive(:post_release).with @release.app.name, @release.name
|
11
|
+
@release.rollback
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruroku
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
12
|
+
date: 2012-06-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: heroku-api
|
@@ -77,28 +77,29 @@ files:
|
|
77
77
|
- TODO.md
|
78
78
|
- lib/ruroku.rb
|
79
79
|
- lib/ruroku/addon.rb
|
80
|
-
- lib/ruroku/addon_set.rb
|
81
80
|
- lib/ruroku/api.rb
|
82
81
|
- lib/ruroku/app.rb
|
83
|
-
- lib/ruroku/app_set.rb
|
84
82
|
- lib/ruroku/base.rb
|
85
83
|
- lib/ruroku/collaborator.rb
|
86
|
-
- lib/ruroku/collaborator_set.rb
|
87
84
|
- lib/ruroku/config_var.rb
|
88
|
-
- lib/ruroku/config_var_set.rb
|
89
85
|
- lib/ruroku/domain.rb
|
90
|
-
- lib/ruroku/domain_set.rb
|
91
86
|
- lib/ruroku/key.rb
|
92
|
-
- lib/ruroku/key_set.rb
|
93
87
|
- lib/ruroku/nested_base.rb
|
94
|
-
- lib/ruroku/nested_resource_set.rb
|
95
88
|
- lib/ruroku/process.rb
|
96
|
-
- lib/ruroku/process_set.rb
|
97
89
|
- lib/ruroku/release.rb
|
98
|
-
- lib/ruroku/
|
99
|
-
- lib/ruroku/
|
90
|
+
- lib/ruroku/resource_sets.rb
|
91
|
+
- lib/ruroku/resource_sets/addon_set.rb
|
92
|
+
- lib/ruroku/resource_sets/app_set.rb
|
93
|
+
- lib/ruroku/resource_sets/collaborator_set.rb
|
94
|
+
- lib/ruroku/resource_sets/config_var_set.rb
|
95
|
+
- lib/ruroku/resource_sets/domain_set.rb
|
96
|
+
- lib/ruroku/resource_sets/key_set.rb
|
97
|
+
- lib/ruroku/resource_sets/nested_resource_set.rb
|
98
|
+
- lib/ruroku/resource_sets/process_set.rb
|
99
|
+
- lib/ruroku/resource_sets/release_set.rb
|
100
|
+
- lib/ruroku/resource_sets/resource_set.rb
|
101
|
+
- lib/ruroku/resource_sets/stack_set.rb
|
100
102
|
- lib/ruroku/stack.rb
|
101
|
-
- lib/ruroku/stack_set.rb
|
102
103
|
- lib/ruroku/user.rb
|
103
104
|
- lib/ruroku/version.rb
|
104
105
|
- ruroku.gemspec
|
@@ -117,11 +118,13 @@ files:
|
|
117
118
|
- spec/ruroku/app_set_spec.rb
|
118
119
|
- spec/ruroku/app_spec.rb
|
119
120
|
- spec/ruroku/collaborator_set_spec.rb
|
121
|
+
- spec/ruroku/config_var_set_spec.rb
|
120
122
|
- spec/ruroku/domain_set_spec.rb
|
121
123
|
- spec/ruroku/key_set_spec.rb
|
122
124
|
- spec/ruroku/nested_resource_set_spec.rb
|
123
125
|
- spec/ruroku/process_set_spec.rb
|
124
126
|
- spec/ruroku/release_set_spec.rb
|
127
|
+
- spec/ruroku/release_spec.rb
|
125
128
|
- spec/ruroku/resource_set_spec.rb
|
126
129
|
- spec/ruroku/stack_set_spec.rb
|
127
130
|
- spec/spec_helper.rb
|
@@ -139,7 +142,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
139
142
|
version: '0'
|
140
143
|
segments:
|
141
144
|
- 0
|
142
|
-
hash:
|
145
|
+
hash: 1691846107109911657
|
143
146
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
144
147
|
none: false
|
145
148
|
requirements:
|
@@ -148,7 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
148
151
|
version: '0'
|
149
152
|
segments:
|
150
153
|
- 0
|
151
|
-
hash:
|
154
|
+
hash: 1691846107109911657
|
152
155
|
requirements: []
|
153
156
|
rubyforge_project:
|
154
157
|
rubygems_version: 1.8.23
|
@@ -171,11 +174,13 @@ test_files:
|
|
171
174
|
- spec/ruroku/app_set_spec.rb
|
172
175
|
- spec/ruroku/app_spec.rb
|
173
176
|
- spec/ruroku/collaborator_set_spec.rb
|
177
|
+
- spec/ruroku/config_var_set_spec.rb
|
174
178
|
- spec/ruroku/domain_set_spec.rb
|
175
179
|
- spec/ruroku/key_set_spec.rb
|
176
180
|
- spec/ruroku/nested_resource_set_spec.rb
|
177
181
|
- spec/ruroku/process_set_spec.rb
|
178
182
|
- spec/ruroku/release_set_spec.rb
|
183
|
+
- spec/ruroku/release_spec.rb
|
179
184
|
- spec/ruroku/resource_set_spec.rb
|
180
185
|
- spec/ruroku/stack_set_spec.rb
|
181
186
|
- spec/spec_helper.rb
|
data/lib/ruroku/app_set.rb
DELETED
data/lib/ruroku/process_set.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
module Ruroku
|
2
|
-
class ProcessSet < NestedResourceSet
|
3
|
-
resource_class Process
|
4
|
-
collection_api_selector :get_ps
|
5
|
-
|
6
|
-
# Map API methods to collection methods.
|
7
|
-
#
|
8
|
-
# Examples
|
9
|
-
#
|
10
|
-
# processes.run 'rake task'
|
11
|
-
# processes.restart
|
12
|
-
# processes.scale 'web', 10
|
13
|
-
# processes.stop 'ps' => 'web.1'
|
14
|
-
# processes.stop 'type' => 'web'
|
15
|
-
map_api run: :post_ps,
|
16
|
-
restart: :post_ps_restart,
|
17
|
-
scale: :ps_scale,
|
18
|
-
stop: :post_ps_stop
|
19
|
-
end
|
20
|
-
end
|
data/lib/ruroku/release_set.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
module Ruroku
|
2
|
-
class ReleaseSet < NestedResourceSet
|
3
|
-
resource_class Release
|
4
|
-
collection_api_selector :get_releases
|
5
|
-
|
6
|
-
# Map API methods to collection methods.
|
7
|
-
#
|
8
|
-
# Examples
|
9
|
-
#
|
10
|
-
# releases.rollback 'v1'
|
11
|
-
map_api rollback: :post_release
|
12
|
-
end
|
13
|
-
end
|