dawn-api 0.9.0 → 0.10.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +2 -0
- data/README.md +49 -0
- data/lib/dawn/api/authenticate.rb +16 -5
- data/lib/dawn/api/base_api.rb +27 -6
- data/lib/dawn/api/hosts.rb +14 -2
- data/lib/dawn/api/models/account.rb +43 -0
- data/lib/dawn/api/{app → models/app}/domains.rb +12 -9
- data/lib/dawn/api/{app → models/app}/drains.rb +10 -7
- data/lib/dawn/api/{app → models/app}/env.rb +3 -7
- data/lib/dawn/api/{app → models/app}/gears.rb +11 -10
- data/lib/dawn/api/models/app/releases.rb +43 -0
- data/lib/dawn/api/models/app.rb +172 -0
- data/lib/dawn/api/models/domain.rb +64 -0
- data/lib/dawn/api/{drain.rb → models/drain.rb} +20 -37
- data/lib/dawn/api/models/gear.rb +79 -0
- data/lib/dawn/api/models/key.rb +63 -0
- data/lib/dawn/api/{login.rb → models/login.rb} +2 -4
- data/lib/dawn/api/models/release.rb +52 -0
- data/lib/dawn/api/models.rb +8 -0
- data/lib/dawn/api/safe/base_api.rb +9 -0
- data/lib/dawn/api/safe/safe_extension.rb +28 -0
- data/lib/dawn/api/safe.rb +2 -0
- data/lib/dawn/api/version.rb +3 -3
- data/lib/dawn/api.rb +2 -6
- metadata +21 -12
- data/lib/dawn/api/app.rb +0 -131
- data/lib/dawn/api/domain.rb +0 -80
- data/lib/dawn/api/gear.rb +0 -101
- data/lib/dawn/api/key.rb +0 -73
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe30248ae573868bf991429cda95c8dfceec4bf7
|
4
|
+
data.tar.gz: 161aa1267f3bbc2d5e4a08b79db80157a411033f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf6133ff0aa98e30f1d1f5b795b411e44aced402bcb524cdb836c01eb8978003b91f67c7038e1e4074761c1b2a1e673f2a5736d861c2b59ec80fb77b04c75309
|
7
|
+
data.tar.gz: 465a63b82801693130763868a26707871adbc88985e953c705d3bf9f54c0f9793cd488122b1c9d06bcc91913bf7215d45802ec47da26b75c6f4aef4852f0f4c3
|
data/CHANGELOG.md
ADDED
data/README.md
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
Dawn-API
|
2
|
+
========
|
3
|
+
[link](https://github.com/dawn/dawn-api)
|
4
|
+
|
5
|
+
[![Dependency Status](https://gemnasium.com/dawn/dawn-api.svg)](https://gemnasium.com/dawn/dawn-api)
|
6
|
+
[![Gem Version](https://badge.fury.io/rb/dawn-api.svg)](http://badge.fury.io/rb/dawn-api)
|
7
|
+
[![Code Climate](https://codeclimate.com/github/dawn/dawn-api.png)](https://codeclimate.com/github/dawn/dawn-api)
|
8
|
+
|
9
|
+
API for [Dawn](https://github.com/dawn/dawn)
|
10
|
+
|
11
|
+
## Installation
|
12
|
+
```shell
|
13
|
+
gem install dawn-api
|
14
|
+
```
|
15
|
+
|
16
|
+
## Building
|
17
|
+
```shell
|
18
|
+
gem pack dawn-api.gem
|
19
|
+
```
|
20
|
+
|
21
|
+
## Documentation:
|
22
|
+
[Rubydoc](http://rubydoc.info/gems/dawn-api)
|
23
|
+
|
24
|
+
[API Reference](http://dawn.github.io/docs/)
|
25
|
+
|
26
|
+
## Influential ENV variable
|
27
|
+
| VAR | API default | Description |
|
28
|
+
| ------------- | ------------- | ---------------------------------------------------------- |
|
29
|
+
| DAWN_HOST | dawn.dev | Main hostname |
|
30
|
+
| DAWN_SCHEME | http | |
|
31
|
+
| DAWN_API_HOST | api.dawn.dev | Dawn API hostname, if not given, api.$DAWN_HOST is used |
|
32
|
+
| DAWN_GIT_HOST | dawn.dev | Target for git push dawn, if not given, $DAWN_HOST is used |
|
33
|
+
| DAWN_LOG_HOST | dawn.dev:8001 | Dawn logs hostname, if not given, $DAWN_HOST:8001 is used |
|
34
|
+
|
35
|
+
## What is this?
|
36
|
+
This is the ruby API interface for [Dawn](https://github.com/dawn/dawn),
|
37
|
+
- It is not a standalone gem.
|
38
|
+
- It requires a dawn server.
|
39
|
+
- It is not a CLI, look at [Dawn-CLI](https://github.com/dawn/dawn-cli) instead
|
40
|
+
|
41
|
+
## Usage
|
42
|
+
One day I'll write this properly, however for now:
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
Dawn.authenticate
|
46
|
+
my_app = Dawn::App.create
|
47
|
+
my_app.update(name: "DawnIsAwesome")
|
48
|
+
my_app.gears.restart
|
49
|
+
```
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'dawn/api/version'
|
2
|
+
require 'base64'
|
2
3
|
require 'excon'
|
3
4
|
require 'netrc'
|
4
5
|
|
@@ -15,21 +16,29 @@ module Dawn
|
|
15
16
|
|
16
17
|
OPTIONS = {
|
17
18
|
headers: {},
|
18
|
-
host: 'api.dawn.dev',
|
19
19
|
nonblock: false,
|
20
|
-
scheme: 'http'
|
21
20
|
}
|
22
21
|
|
23
22
|
class AuthenticationError < RuntimeError
|
24
23
|
end
|
25
24
|
|
25
|
+
class << self
|
26
|
+
attr_accessor :last_response_body
|
27
|
+
end
|
28
|
+
|
26
29
|
def self.request(options)
|
27
30
|
Dawn.authenticate unless @connection
|
28
|
-
|
31
|
+
expects = options.delete(:expects)
|
32
|
+
response = @connection.request(options)
|
33
|
+
self.last_response_body = response.body
|
34
|
+
if expects && response.status != expects
|
35
|
+
raise Excon::Errors.status_error(options.merge(expects: expects), response)
|
36
|
+
end
|
37
|
+
response
|
29
38
|
end
|
30
39
|
|
31
40
|
def self.authenticate(options={})
|
32
|
-
options = OPTIONS.merge options
|
41
|
+
options = OPTIONS.merge(host: dawn_api_host, scheme: dawn_scheme).merge(options)
|
33
42
|
options[:headers] = options[:headers].merge(HEADERS)
|
34
43
|
@api_key = options.delete(:api_key) || ENV['DAWN_API_KEY']
|
35
44
|
|
@@ -59,7 +68,9 @@ module Dawn
|
|
59
68
|
end
|
60
69
|
end
|
61
70
|
end
|
62
|
-
@headers = HEADERS.merge
|
71
|
+
@headers = HEADERS.merge(
|
72
|
+
'Authorization' => "Basic #{::Base64.strict_encode64("#{username}:#{@api_key}")}"
|
73
|
+
)
|
63
74
|
@connection = Excon.new "#{options[:scheme]}://#{options[:host]}", headers: @headers
|
64
75
|
end
|
65
76
|
|
data/lib/dawn/api/base_api.rb
CHANGED
@@ -3,21 +3,42 @@ require 'json'
|
|
3
3
|
|
4
4
|
module Dawn
|
5
5
|
module BaseApi
|
6
|
-
module
|
6
|
+
module RequestExtension
|
7
7
|
def request(options)
|
8
|
-
|
8
|
+
options[:expects] = 200 unless options.key?(:expects)
|
9
|
+
JSON.load Dawn.request(options).body
|
9
10
|
end
|
10
11
|
|
11
|
-
|
12
|
-
|
12
|
+
[:get, :post, :put, :patch, :delete].each do |key|
|
13
|
+
define_method(key) { |options| request options.merge(method: key) }
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
16
|
-
|
17
|
+
module ClassExtension
|
18
|
+
include RequestExtension
|
19
|
+
|
20
|
+
def id_param(options)
|
21
|
+
options.delete(:id)
|
22
|
+
end
|
23
|
+
|
24
|
+
def data_key(key_name, key_path=key_name)
|
25
|
+
route = key_path.to_s.split("/")
|
26
|
+
route_dp = route.dup
|
27
|
+
last_key = route_dp.pop
|
28
|
+
|
29
|
+
define_method(key_name) do
|
30
|
+
route.inject(@data) { |d, key| d[key] }
|
31
|
+
end
|
32
|
+
define_method(key_name.to_s+"=") do |v|
|
33
|
+
route_dp.inject(@data) { |d, key| d[key] }[last_key] = v
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
17
37
|
|
18
38
|
def self.included(mod)
|
19
|
-
mod.extend
|
39
|
+
mod.extend ClassExtension
|
20
40
|
end
|
21
41
|
|
42
|
+
include RequestExtension
|
22
43
|
end
|
23
44
|
end
|
data/lib/dawn/api/hosts.rb
CHANGED
@@ -1,11 +1,23 @@
|
|
1
1
|
module Dawn
|
2
2
|
|
3
|
+
def self.dawn_scheme
|
4
|
+
ENV["DAWN_SCHEME"] || "http"
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.dawn_host
|
8
|
+
ENV["DAWN_HOST"] || "dawn.dev"
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.dawn_api_host
|
12
|
+
ENV["DAWN_API_HOST"] || "api.#{dawn_host}"
|
13
|
+
end
|
14
|
+
|
3
15
|
def self.git_host
|
4
|
-
"
|
16
|
+
ENV["DAWN_GIT_HOST"] || dawn_host
|
5
17
|
end
|
6
18
|
|
7
19
|
def self.log_host
|
8
|
-
"
|
20
|
+
ENV["DAWN_LOG_HOST"] || "#{dawn_host}:8001"
|
9
21
|
end
|
10
22
|
|
11
23
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'dawn/api/base_api'
|
2
|
+
|
3
|
+
module Dawn
|
4
|
+
class Account
|
5
|
+
|
6
|
+
include BaseApi
|
7
|
+
|
8
|
+
def initialize(hsh)
|
9
|
+
@data = hsh
|
10
|
+
end
|
11
|
+
|
12
|
+
data_key :id
|
13
|
+
data_key :created_at
|
14
|
+
data_key :updated_at
|
15
|
+
data_key :username
|
16
|
+
data_key :email
|
17
|
+
data_key :api_key
|
18
|
+
|
19
|
+
def refresh(options={})
|
20
|
+
@data = get(
|
21
|
+
path: "/account",
|
22
|
+
query: options
|
23
|
+
)["account"]
|
24
|
+
end
|
25
|
+
|
26
|
+
def update(options={})
|
27
|
+
options.fetch(:account)
|
28
|
+
|
29
|
+
@data = patch(
|
30
|
+
path: "/account",
|
31
|
+
body: options.to_json
|
32
|
+
)["account"]
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.current(options={})
|
36
|
+
new get(
|
37
|
+
path: "/account",
|
38
|
+
query: options
|
39
|
+
)["account"]
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
@@ -1,11 +1,12 @@
|
|
1
1
|
require 'dawn/api/base_api'
|
2
|
-
require 'dawn/api/domain'
|
2
|
+
require 'dawn/api/models/domain'
|
3
3
|
|
4
4
|
module Dawn
|
5
5
|
class App
|
6
6
|
class Domains
|
7
7
|
|
8
8
|
include BaseApi
|
9
|
+
include Enumerable
|
9
10
|
|
10
11
|
attr_reader :app
|
11
12
|
|
@@ -13,25 +14,27 @@ module Dawn
|
|
13
14
|
@app = app
|
14
15
|
end
|
15
16
|
|
16
|
-
def
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
def each(&block)
|
18
|
+
all.each(&block)
|
19
|
+
end
|
20
|
+
|
21
|
+
def create(options)
|
22
|
+
options.fetch(:domain)
|
23
|
+
|
24
|
+
Domain.new(post(
|
20
25
|
path: "/apps/#{app.id}/domains",
|
21
26
|
body: options.to_json
|
22
27
|
)["domain"]).tap { |d| d.app = @app }
|
23
28
|
end
|
24
29
|
|
25
30
|
def all(options={})
|
26
|
-
|
27
|
-
expects: 200,
|
28
|
-
method: :get,
|
31
|
+
get(
|
29
32
|
path: "/apps/#{app.id}/domains",
|
30
33
|
query: options
|
31
34
|
).map { |hsh| Domain.new(hsh["domain"]).tap { |d| d.app = @app } }
|
32
35
|
end
|
33
36
|
|
34
|
-
def find(options
|
37
|
+
def find(options)
|
35
38
|
Domain.find(options).tap { |d| d.app = @app }
|
36
39
|
end
|
37
40
|
|
@@ -1,11 +1,12 @@
|
|
1
1
|
require 'dawn/api/base_api'
|
2
|
-
require 'dawn/api/drain'
|
2
|
+
require 'dawn/api/models/drain'
|
3
3
|
|
4
4
|
module Dawn
|
5
5
|
class App
|
6
6
|
class Drains
|
7
7
|
|
8
8
|
include BaseApi
|
9
|
+
include Enumerable
|
9
10
|
|
10
11
|
attr_reader :app
|
11
12
|
|
@@ -13,19 +14,21 @@ module Dawn
|
|
13
14
|
@app = app
|
14
15
|
end
|
15
16
|
|
17
|
+
def each(&block)
|
18
|
+
all.each(&block)
|
19
|
+
end
|
20
|
+
|
16
21
|
def create(options={})
|
17
|
-
|
18
|
-
|
19
|
-
|
22
|
+
options.fetch(:drain)
|
23
|
+
|
24
|
+
Drain.new(post(
|
20
25
|
path: "/apps/#{app.id}/drains",
|
21
26
|
body: options.to_json
|
22
27
|
)["drain"]).tap { |d| d.app = @app }
|
23
28
|
end
|
24
29
|
|
25
30
|
def all(options={})
|
26
|
-
|
27
|
-
expects: 200,
|
28
|
-
method: :get,
|
31
|
+
get(
|
29
32
|
path: "/apps/#{app.id}/drains",
|
30
33
|
query: options
|
31
34
|
).map { |hsh| Drain.new(hsh["drain"]).tap { |d| d.app = @app } }
|
@@ -15,20 +15,16 @@ module Dawn
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def refresh(options={})
|
18
|
-
replace
|
19
|
-
expects: 200,
|
20
|
-
method: :get,
|
18
|
+
replace get(
|
21
19
|
path: "/apps/#{app.id}/env",
|
22
20
|
query: options
|
23
21
|
)["env"]
|
24
22
|
end
|
25
23
|
|
26
24
|
def save(options={})
|
27
|
-
replace
|
28
|
-
expects: 200,
|
29
|
-
method: :post,
|
25
|
+
replace post(
|
30
26
|
path: "/apps/#{app.id}/env",
|
31
|
-
body: { env: merge(options) }.to_json
|
27
|
+
body: { app: { env: merge(options) } }.to_json
|
32
28
|
)["env"]
|
33
29
|
end
|
34
30
|
|
@@ -1,11 +1,12 @@
|
|
1
1
|
require 'dawn/api/base_api'
|
2
|
-
require 'dawn/api/gear'
|
2
|
+
require 'dawn/api/models/gear'
|
3
3
|
|
4
4
|
module Dawn
|
5
5
|
class App
|
6
6
|
class Gears
|
7
7
|
|
8
8
|
include BaseApi
|
9
|
+
include Enumerable
|
9
10
|
|
10
11
|
attr_reader :app
|
11
12
|
|
@@ -13,19 +14,21 @@ module Dawn
|
|
13
14
|
@app = app
|
14
15
|
end
|
15
16
|
|
17
|
+
def each(&block)
|
18
|
+
all.each(&block)
|
19
|
+
end
|
20
|
+
|
16
21
|
def create(options={})
|
17
|
-
|
18
|
-
|
19
|
-
|
22
|
+
options.fetch(:gear)
|
23
|
+
|
24
|
+
Gear.new(post(
|
20
25
|
path: "/apps/#{app.id}/gears",
|
21
26
|
body: options.to_json
|
22
27
|
)["gear"]).tap { |d| d.app = @app }
|
23
28
|
end
|
24
29
|
|
25
30
|
def all(options={})
|
26
|
-
|
27
|
-
expects: 200,
|
28
|
-
method: :get,
|
31
|
+
get(
|
29
32
|
path: "/apps/#{app.id}/gears",
|
30
33
|
query: options
|
31
34
|
).map { |hsh| Gear.new(hsh["gear"]).tap { |d| d.app = @app } }
|
@@ -36,9 +39,7 @@ module Dawn
|
|
36
39
|
end
|
37
40
|
|
38
41
|
def restart(options={})
|
39
|
-
|
40
|
-
expects: 200,
|
41
|
-
method: :post,
|
42
|
+
post(
|
42
43
|
path: "/apps/#{app.id}/gears/restart",
|
43
44
|
body: options.to_json
|
44
45
|
)
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'dawn/api/base_api'
|
2
|
+
require 'dawn/api/models/release'
|
3
|
+
|
4
|
+
module Dawn
|
5
|
+
class App
|
6
|
+
class Releases
|
7
|
+
|
8
|
+
include BaseApi
|
9
|
+
include Enumerable
|
10
|
+
|
11
|
+
attr_reader :app
|
12
|
+
|
13
|
+
def initialize(app)
|
14
|
+
@app = app
|
15
|
+
end
|
16
|
+
|
17
|
+
def each(&block)
|
18
|
+
all.each(&block)
|
19
|
+
end
|
20
|
+
|
21
|
+
def create(options={})
|
22
|
+
options.fetch(:release)
|
23
|
+
|
24
|
+
Release.new(post(
|
25
|
+
path: "/apps/#{app.id}/releases",
|
26
|
+
body: options.to_json
|
27
|
+
)["release"]).tap { |d| d.app = @app }
|
28
|
+
end
|
29
|
+
|
30
|
+
def all(options={})
|
31
|
+
get(
|
32
|
+
path: "/apps/#{app.id}/releases",
|
33
|
+
query: options
|
34
|
+
).map { |hsh| Release.new(hsh["release"]).tap { |d| d.app = @app } }
|
35
|
+
end
|
36
|
+
|
37
|
+
def find(options={})
|
38
|
+
Release.find(options).tap { |d| d.app = @app }
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,172 @@
|
|
1
|
+
require 'dawn/api/hosts'
|
2
|
+
require 'dawn/api/base_api'
|
3
|
+
require 'dawn/api/models/app/env'
|
4
|
+
require 'dawn/api/models/app/gears'
|
5
|
+
require 'dawn/api/models/app/drains'
|
6
|
+
require 'dawn/api/models/app/domains'
|
7
|
+
require 'dawn/api/models/app/releases'
|
8
|
+
|
9
|
+
module Dawn
|
10
|
+
class App
|
11
|
+
|
12
|
+
include BaseApi
|
13
|
+
|
14
|
+
attr_reader :data
|
15
|
+
attr_reader :env
|
16
|
+
|
17
|
+
def initialize(hsh)
|
18
|
+
@data = hsh
|
19
|
+
@env = Env.new(self, @data.delete("env"))
|
20
|
+
end
|
21
|
+
|
22
|
+
data_key :id
|
23
|
+
data_key :created_at
|
24
|
+
data_key :updated_at
|
25
|
+
data_key :name
|
26
|
+
data_key :formation
|
27
|
+
data_key :git
|
28
|
+
|
29
|
+
def gears
|
30
|
+
@gears ||= Gears.new self
|
31
|
+
end
|
32
|
+
|
33
|
+
def drains
|
34
|
+
@drains ||= Drains.new self
|
35
|
+
end
|
36
|
+
|
37
|
+
def domains
|
38
|
+
@domains ||= Domains.new self
|
39
|
+
end
|
40
|
+
|
41
|
+
def releases
|
42
|
+
@releases ||= Releases.new self
|
43
|
+
end
|
44
|
+
|
45
|
+
def refresh(options={})
|
46
|
+
@data = get(
|
47
|
+
path: "/apps/#{id}",
|
48
|
+
query: options
|
49
|
+
)["app"]
|
50
|
+
end
|
51
|
+
|
52
|
+
def update(options={})
|
53
|
+
options.fetch(:app)
|
54
|
+
|
55
|
+
@data = patch(
|
56
|
+
path: "/apps/#{id}",
|
57
|
+
body: options.to_json
|
58
|
+
)["app"]
|
59
|
+
end
|
60
|
+
|
61
|
+
def destroy(options={})
|
62
|
+
self.class.destroy(options.merge(id: id))
|
63
|
+
end
|
64
|
+
|
65
|
+
def run(options={})
|
66
|
+
self.class.run(options.merge(id: id))
|
67
|
+
end
|
68
|
+
|
69
|
+
def logs(options={})
|
70
|
+
self.class.logs(options.merge(id: id))
|
71
|
+
end
|
72
|
+
|
73
|
+
def scale(options={})
|
74
|
+
self.class.scale(options.merge(id: id))
|
75
|
+
end
|
76
|
+
|
77
|
+
def restart(options={})
|
78
|
+
self.class.restart(options.merge(id: id))
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.id_param(options)
|
82
|
+
options.delete(:id) ||
|
83
|
+
options.delete(:name) ||
|
84
|
+
raise
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.create(options)
|
88
|
+
options.fetch(:app)
|
89
|
+
|
90
|
+
new post(
|
91
|
+
path: "/apps",
|
92
|
+
body: options.to_json
|
93
|
+
)["app"]
|
94
|
+
end
|
95
|
+
|
96
|
+
def self.all(options={})
|
97
|
+
get(
|
98
|
+
path: "/apps",
|
99
|
+
query: options
|
100
|
+
).map { |d| new d["app"] }
|
101
|
+
end
|
102
|
+
|
103
|
+
def self.find(options)
|
104
|
+
id = id_param(options)
|
105
|
+
|
106
|
+
new get(
|
107
|
+
path: "/apps/#{id}",
|
108
|
+
query: options
|
109
|
+
)["app"]
|
110
|
+
end
|
111
|
+
|
112
|
+
def self.update(options)
|
113
|
+
id = id_param(options)
|
114
|
+
options.fetch(:app)
|
115
|
+
|
116
|
+
new patch(
|
117
|
+
path: "/apps/#{id}",
|
118
|
+
body: options.to_json
|
119
|
+
)["app"]
|
120
|
+
end
|
121
|
+
|
122
|
+
def self.destroy(options={})
|
123
|
+
id = id_param(options)
|
124
|
+
|
125
|
+
delete(
|
126
|
+
path: "/apps/#{id}",
|
127
|
+
query: options
|
128
|
+
)
|
129
|
+
end
|
130
|
+
|
131
|
+
def self.restart(options={})
|
132
|
+
id = id_param(options)
|
133
|
+
|
134
|
+
post(
|
135
|
+
path: "/apps/#{id}/gears/restart",
|
136
|
+
body: options.to_json
|
137
|
+
)
|
138
|
+
end
|
139
|
+
|
140
|
+
def self.logs(options={})
|
141
|
+
id = id_param(options)
|
142
|
+
|
143
|
+
url = get(
|
144
|
+
path: "/apps/#{id}/logs",
|
145
|
+
query: options
|
146
|
+
)["logs"]
|
147
|
+
|
148
|
+
"http://#{Dawn.log_host}#{url}"
|
149
|
+
end
|
150
|
+
|
151
|
+
def self.scale(options={})
|
152
|
+
id = id_param(options)
|
153
|
+
options.fetch(:app).fetch(:formation)
|
154
|
+
|
155
|
+
post(
|
156
|
+
path: "/apps/#{id}/scale",
|
157
|
+
body: options.to_json
|
158
|
+
)
|
159
|
+
end
|
160
|
+
|
161
|
+
def self.run(options={})
|
162
|
+
id = id_param(options)
|
163
|
+
options.fetch(:command)
|
164
|
+
|
165
|
+
post(
|
166
|
+
path: "/apps/#{id}/run",
|
167
|
+
body: options.to_json
|
168
|
+
)
|
169
|
+
end
|
170
|
+
|
171
|
+
end
|
172
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'dawn/api/base_api'
|
2
|
+
|
3
|
+
module Dawn
|
4
|
+
class Domain
|
5
|
+
|
6
|
+
include BaseApi
|
7
|
+
|
8
|
+
attr_reader :data
|
9
|
+
attr_writer :app
|
10
|
+
|
11
|
+
def initialize(data)
|
12
|
+
@app = nil
|
13
|
+
@data = data
|
14
|
+
end
|
15
|
+
|
16
|
+
data_key :id
|
17
|
+
data_key :created_at
|
18
|
+
data_key :updated_at
|
19
|
+
data_key :url
|
20
|
+
data_key :app_id, "app/id"
|
21
|
+
|
22
|
+
def app
|
23
|
+
@app ||= App.find(id: app_id)
|
24
|
+
end
|
25
|
+
|
26
|
+
def refresh
|
27
|
+
@data = get(
|
28
|
+
path: "/domains/#{id}",
|
29
|
+
query: options
|
30
|
+
)["domain"]
|
31
|
+
end
|
32
|
+
|
33
|
+
def destroy(options={})
|
34
|
+
self.class.destroy(options.merge(id: id))
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.id_param(options)
|
38
|
+
id = options.delete(:id) ||
|
39
|
+
options.delete(:name) ||
|
40
|
+
options.delete(:uri) ||
|
41
|
+
options.delete(:url) ||
|
42
|
+
raise
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.find(options)
|
46
|
+
id = id_param(options)
|
47
|
+
|
48
|
+
new get(
|
49
|
+
path: "/domains/#{id}",
|
50
|
+
query: options
|
51
|
+
)["domain"]
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.destroy(options)
|
55
|
+
id = id_param(options)
|
56
|
+
|
57
|
+
delete(
|
58
|
+
path: "/domains/#{id}",
|
59
|
+
query: options
|
60
|
+
)
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|