xploy 0.1.0.beta
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/.coveralls.yml +1 -0
- data/.gitignore +17 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/Gemfile +4 -0
- data/Guardfile +9 -0
- data/LICENSE.txt +22 -0
- data/README.md +67 -0
- data/Rakefile +6 -0
- data/appway-example/.xploy +3 -0
- data/appway-example/appway-example.json +21 -0
- data/bin/xploy +4 -0
- data/lib/xploy/api/endpoints.rb +76 -0
- data/lib/xploy/api/http.rb +17 -0
- data/lib/xploy/api/request/body.rb +41 -0
- data/lib/xploy/api/request.rb +37 -0
- data/lib/xploy/api.rb +25 -0
- data/lib/xploy/cli.rb +21 -0
- data/lib/xploy/error.rb +11 -0
- data/lib/xploy/parameter.rb +66 -0
- data/lib/xploy/version.rb +3 -0
- data/lib/xploy.rb +11 -0
- data/spec/assets/appway-example.json +21 -0
- data/spec/assets/custom.xway +1 -0
- data/spec/integration/bin/xploy_binary_spec.rb +18 -0
- data/spec/integration/lib/xploy/cli_spec.rb +9 -0
- data/spec/lib/xploy/api/endpoints_spec.rb +125 -0
- data/spec/lib/xploy/api/http_spec.rb +35 -0
- data/spec/lib/xploy/api/request/body_spec.rb +42 -0
- data/spec/lib/xploy/api/request_spec.rb +22 -0
- data/spec/lib/xploy/api_spec.rb +90 -0
- data/spec/lib/xploy/cli_spec.rb +34 -0
- data/spec/lib/xploy/error_spec.rb +6 -0
- data/spec/lib/xploy/parameter_spec.rb +120 -0
- data/spec/lib/xploy_spec.rb +6 -0
- data/spec/spec_helper.rb +28 -0
- data/xploy.gemspec +30 -0
- metadata +242 -0
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
service_name: travis-ci
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Jens Bissinger
|
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.
|
data/README.md
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# xploy
|
2
|
+
|
3
|
+
[appway](http://github.com/threez/appway) client written in ruby
|
4
|
+
|
5
|
+
[](https://rubygems.org/gems/xploy)
|
6
|
+
[](https://travis-ci.org/dpree/xploy)
|
7
|
+
[](https://coveralls.io/r/dpree/xploy)
|
8
|
+
[](https://gemnasium.com/dpree/xploy)
|
9
|
+
[](https://codeclimate.com/github/dpree/xploy)
|
10
|
+
|
11
|
+
## Installation
|
12
|
+
|
13
|
+
Add this line to your application's Gemfile:
|
14
|
+
|
15
|
+
gem 'xploy'
|
16
|
+
|
17
|
+
And then execute:
|
18
|
+
|
19
|
+
$ bundle
|
20
|
+
|
21
|
+
Or install it yourself as:
|
22
|
+
|
23
|
+
$ gem install xploy
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
$ xploy
|
28
|
+
|
29
|
+
### Recommended config settings
|
30
|
+
|
31
|
+
You can store default parameters like `app.name` and `app.manifest` in a file named `.xploy` located in your current working dir.
|
32
|
+
|
33
|
+
For an example just have a look at the `appway-example` folder.
|
34
|
+
|
35
|
+
$ cd appway-example
|
36
|
+
|
37
|
+
Here you can just redeploy the preconfigured app like so:
|
38
|
+
|
39
|
+
$ xploy redeploy
|
40
|
+
|
41
|
+
## Development
|
42
|
+
|
43
|
+
To run the binary from the repository use the following command with ruby libray path:
|
44
|
+
|
45
|
+
RUBYLIB=lib bin/xploy
|
46
|
+
|
47
|
+
### Coding guide
|
48
|
+
|
49
|
+
* Using global methods like `Xploy.parameter`
|
50
|
+
* is allowed for classes / modules defined on the same or a higher level to the `Xploy` namespace
|
51
|
+
* is allowed for classes / modules defined excactly one level below the `Xploy` namespace
|
52
|
+
* e.g. `Xploy::Api`
|
53
|
+
* is not allowed for classes / modules defined more than one level below the `Xploy` namespace
|
54
|
+
* e.g. `Xploy::Api::Request`
|
55
|
+
* these classes should use dependency injection instead
|
56
|
+
|
57
|
+
### Contributing
|
58
|
+
|
59
|
+
1. Fork it
|
60
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
61
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
62
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
63
|
+
5. Create new Pull Request
|
64
|
+
|
65
|
+
# License
|
66
|
+
|
67
|
+
Copyright (c) 2013 Jens Bissinger. See [LICENSE.txt](LICENSE.txt)
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
{
|
2
|
+
"name": "example",
|
3
|
+
"repo": {
|
4
|
+
"url": "git://github.com/threez/appway-example.git",
|
5
|
+
"branch": "master"
|
6
|
+
},
|
7
|
+
"packages": {
|
8
|
+
},
|
9
|
+
"user": "www-data",
|
10
|
+
"group": "www-data",
|
11
|
+
"domain": [
|
12
|
+
"^example.*",
|
13
|
+
"^example.local$"
|
14
|
+
],
|
15
|
+
"install": [
|
16
|
+
"npm install"
|
17
|
+
],
|
18
|
+
"scale": {
|
19
|
+
"web": 2
|
20
|
+
}
|
21
|
+
}
|
data/bin/xploy
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
module Xploy
|
2
|
+
class Api
|
3
|
+
class Endpoints
|
4
|
+
def list options={}
|
5
|
+
Request.new 'get', '/applications'
|
6
|
+
end
|
7
|
+
|
8
|
+
def create options={}
|
9
|
+
Request.new 'post', '/applications', options
|
10
|
+
end
|
11
|
+
|
12
|
+
def find options={}
|
13
|
+
require_options options, :name
|
14
|
+
options[:name] ||= ':name'
|
15
|
+
Request.new 'get', "/applications/#{options[:name]}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def update options={}
|
19
|
+
require_options options, :name
|
20
|
+
options[:name] ||= ':name'
|
21
|
+
Request.new 'put', "/applications/#{options[:name]}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def delete options={}
|
25
|
+
require_options options, :name
|
26
|
+
options[:name] ||= ':name'
|
27
|
+
Request.new 'delete', "/applications/#{options[:name]}"
|
28
|
+
end
|
29
|
+
|
30
|
+
def log options={}
|
31
|
+
require_options options, :name
|
32
|
+
options[:name] ||= ':name'
|
33
|
+
Request.new 'get', "/applications/#{options[:name]}/log"
|
34
|
+
end
|
35
|
+
|
36
|
+
def start options={}
|
37
|
+
require_options options, :name
|
38
|
+
options[:name] ||= ':name'
|
39
|
+
Request.new 'post', "/applications/#{options[:name]}/start"
|
40
|
+
end
|
41
|
+
|
42
|
+
def stop options={}
|
43
|
+
require_options options, :name
|
44
|
+
options[:name] ||= ':name'
|
45
|
+
Request.new 'post', "/applications/#{options[:name]}/stop"
|
46
|
+
end
|
47
|
+
|
48
|
+
def restart options={}
|
49
|
+
require_options options, :name
|
50
|
+
options[:name] ||= ':name'
|
51
|
+
Request.new 'post', "/applications/#{options[:name]}/restart"
|
52
|
+
end
|
53
|
+
|
54
|
+
def redeploy options={}
|
55
|
+
require_options options, :name
|
56
|
+
options[:name] ||= ':name'
|
57
|
+
Request.new 'post', "/applications/#{options[:name]}/redeploy"
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def require_options options, *keys
|
63
|
+
missing_keys = []
|
64
|
+
keys.each do |key|
|
65
|
+
if !options.is_a?(Hash) || options[key] == nil || options[key] == ''
|
66
|
+
missing_keys << key
|
67
|
+
end
|
68
|
+
end
|
69
|
+
unless missing_keys.empty?
|
70
|
+
raise MissingParameter, "Missing app parameter(s): "\
|
71
|
+
"#{missing_keys.map(&:to_s).join(', ')}"
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
module Xploy
|
4
|
+
class Api
|
5
|
+
class Http
|
6
|
+
def request server, request, debug=false
|
7
|
+
uri = File.join(server, request.path)
|
8
|
+
http_options = request.http_options.tap do |http_options|
|
9
|
+
http_options[:debug_output] = STDOUT if debug
|
10
|
+
end
|
11
|
+
HTTParty.send(request.method_name, uri, http_options)
|
12
|
+
rescue => e
|
13
|
+
raise ConnectionError, ["#{server} appears offline", e]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Xploy
|
2
|
+
class Api
|
3
|
+
class Request
|
4
|
+
class Body
|
5
|
+
attr_reader :path
|
6
|
+
|
7
|
+
def initialize path
|
8
|
+
@path = path
|
9
|
+
end
|
10
|
+
|
11
|
+
def read
|
12
|
+
check_type do |extname|
|
13
|
+
if File.exists?(path)
|
14
|
+
File.read(path)
|
15
|
+
else
|
16
|
+
raise ManifestFileNotFound, "could not find file #{path}"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def mime_type
|
22
|
+
check_type do |extname|
|
23
|
+
'application/json'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def check_type
|
30
|
+
extname = File.extname(path)
|
31
|
+
if extname == '.json'
|
32
|
+
yield extname
|
33
|
+
else
|
34
|
+
raise ManifestFileTypeUnsupported, \
|
35
|
+
"unsupported extension #{extname} for #{path}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'xploy/api/request/body'
|
2
|
+
|
3
|
+
module Xploy
|
4
|
+
class Api
|
5
|
+
class Request
|
6
|
+
attr_reader :method_name, :path, :headers, :body
|
7
|
+
|
8
|
+
def initialize method_name, path, options={}
|
9
|
+
@method_name = method_name
|
10
|
+
@path = path
|
11
|
+
@options = options
|
12
|
+
@body = build_body
|
13
|
+
@headers = build_headers
|
14
|
+
end
|
15
|
+
|
16
|
+
def build_headers
|
17
|
+
{'X-App' => 'appway'}.tap do |headers|
|
18
|
+
headers['Content-Type'] = body.mime_type if body
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def build_body
|
23
|
+
if path = @options[:manifest]
|
24
|
+
@body = Body.new path
|
25
|
+
else
|
26
|
+
@body = nil
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def http_options
|
31
|
+
http_options = {headers: headers}.tap do |http_options|
|
32
|
+
http_options[:body] = body.read if body
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/xploy/api.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'xploy/api/request'
|
2
|
+
require 'xploy/api/endpoints'
|
3
|
+
require 'xploy/api/http'
|
4
|
+
|
5
|
+
module Xploy
|
6
|
+
class Api
|
7
|
+
def request method_name, *args, &block
|
8
|
+
http = Http.new
|
9
|
+
request = build_request method_name
|
10
|
+
parameter[:servers].map do |server|
|
11
|
+
http.request server, request, parameter[:debug]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def parameter
|
18
|
+
Xploy.parameter
|
19
|
+
end
|
20
|
+
|
21
|
+
def build_request method_name
|
22
|
+
Endpoints.new.send(method_name, parameter[:app] || {})
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/xploy/cli.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Xploy
|
2
|
+
class Cli
|
3
|
+
def initialize api=Api.new, out=STDOUT
|
4
|
+
@api = api
|
5
|
+
@out = out
|
6
|
+
end
|
7
|
+
|
8
|
+
def start
|
9
|
+
commands = Xploy.parameter.rest
|
10
|
+
if Xploy.parameter[:version]
|
11
|
+
@out.puts "xploy #{VERSION}"
|
12
|
+
elsif commands.empty?
|
13
|
+
Xploy.parameter.print_help!
|
14
|
+
else
|
15
|
+
@out.puts @api.request(*commands)
|
16
|
+
end
|
17
|
+
rescue MissingParameter => e
|
18
|
+
@out.puts e.message
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/xploy/error.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'configliere'
|
2
|
+
|
3
|
+
module Xploy
|
4
|
+
class Parameter
|
5
|
+
def reload!
|
6
|
+
@param = Configliere::Param.new
|
7
|
+
@param.define :servers, type: Array,
|
8
|
+
flag: 's',
|
9
|
+
description: 'all appway servers',
|
10
|
+
default: ['http://localhost:8000']
|
11
|
+
@param.define 'app.name', flag: 'a',
|
12
|
+
description: 'name of your app'
|
13
|
+
@param.define 'app.manifest', flag: 'm',
|
14
|
+
description: 'path to your app.way file'
|
15
|
+
@param.define :debug, flag: 'd',
|
16
|
+
description: 'print debug info to stdout',
|
17
|
+
default: false
|
18
|
+
@param.define :version, flag: 'v',
|
19
|
+
description: 'print version info'
|
20
|
+
@param.read global_config if File.exists? global_config
|
21
|
+
@param.read local_config if File.exists? local_config
|
22
|
+
@param.use(:commandline)
|
23
|
+
@param.resolve!
|
24
|
+
self
|
25
|
+
end
|
26
|
+
|
27
|
+
def print_help!
|
28
|
+
reload!
|
29
|
+
@param[:help] = true
|
30
|
+
@param.resolve!
|
31
|
+
self
|
32
|
+
end
|
33
|
+
|
34
|
+
def [] key
|
35
|
+
if @param
|
36
|
+
@param[key]
|
37
|
+
else
|
38
|
+
nil
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def rest
|
43
|
+
if @param
|
44
|
+
@param.rest
|
45
|
+
else
|
46
|
+
[]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def to_hash
|
51
|
+
if @param
|
52
|
+
@param.to_hash
|
53
|
+
else
|
54
|
+
{}
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def global_config
|
59
|
+
ENV['XPLOY_CONFIG'] || File.join(ENV['HOME'], '.xploy')
|
60
|
+
end
|
61
|
+
|
62
|
+
def local_config
|
63
|
+
File.join(Dir.pwd, '.xploy')
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/lib/xploy.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
{
|
2
|
+
"name": "example",
|
3
|
+
"repo": {
|
4
|
+
"url": "git://github.com/threez/appway-example.git",
|
5
|
+
"branch": "master"
|
6
|
+
},
|
7
|
+
"packages": {
|
8
|
+
},
|
9
|
+
"user": "www-data",
|
10
|
+
"group": "www-data",
|
11
|
+
"domain": [
|
12
|
+
"^example.*",
|
13
|
+
"^example.local$"
|
14
|
+
],
|
15
|
+
"install": [
|
16
|
+
"npm install"
|
17
|
+
],
|
18
|
+
"scale": {
|
19
|
+
"web": 2
|
20
|
+
}
|
21
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
foo: bar
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'open3'
|
3
|
+
require 'xploy/version'
|
4
|
+
|
5
|
+
class XployBinary
|
6
|
+
attr_reader :stdin, :stdout, :stderr
|
7
|
+
def run
|
8
|
+
exe = File.expand_path('../../../bin/xploy', File.dirname(__FILE__))
|
9
|
+
ENV['RUBYLIB'] = File.join(File.dirname(__FILE__), '../../../lib')
|
10
|
+
@stdin, @stdout, @stderr = Open3.popen3("#{exe} --version")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe XployBinary do
|
15
|
+
before { subject.run }
|
16
|
+
its('stderr.readlines.to_s') { should_not include('xploy') }
|
17
|
+
its('stdout.readlines.to_s') { should include(Xploy::VERSION) }
|
18
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'xploy/error'
|
3
|
+
require 'xploy/api/endpoints'
|
4
|
+
require 'xploy/api/request'
|
5
|
+
|
6
|
+
describe Xploy::Api::Endpoints do
|
7
|
+
subject('endpoints') { described_class.new }
|
8
|
+
|
9
|
+
specify 'list doesnt require_options' do
|
10
|
+
expect{ subject.list }.not_to raise_error(Xploy::MissingParameter)
|
11
|
+
end
|
12
|
+
specify 'create doesnt require_options' do
|
13
|
+
expect{ subject.create }.not_to raise_error(Xploy::MissingParameter)
|
14
|
+
end
|
15
|
+
specify 'find does require_options' do
|
16
|
+
expect{ subject.find }.to raise_error(Xploy::MissingParameter)
|
17
|
+
end
|
18
|
+
specify 'update does require_options' do
|
19
|
+
expect{ subject.update }.to raise_error(Xploy::MissingParameter)
|
20
|
+
end
|
21
|
+
specify 'delete does require_options' do
|
22
|
+
expect{ subject.delete }.to raise_error(Xploy::MissingParameter)
|
23
|
+
end
|
24
|
+
specify 'log does require_options' do
|
25
|
+
expect{ subject.log }.to raise_error(Xploy::MissingParameter)
|
26
|
+
end
|
27
|
+
specify 'start does require_options' do
|
28
|
+
expect{ subject.start }.to raise_error(Xploy::MissingParameter)
|
29
|
+
end
|
30
|
+
specify 'stop does require_options' do
|
31
|
+
expect{ subject.stop }.to raise_error(Xploy::MissingParameter)
|
32
|
+
end
|
33
|
+
specify 'restart does require_options' do
|
34
|
+
expect{ subject.restart }.to raise_error(Xploy::MissingParameter)
|
35
|
+
end
|
36
|
+
specify 'redeploy does require_options' do
|
37
|
+
expect{ subject.redeploy }.to raise_error(Xploy::MissingParameter)
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'mock require_options' do
|
41
|
+
before { endpoints.stub('require_options') }
|
42
|
+
|
43
|
+
describe 'list' do
|
44
|
+
subject { endpoints.list({}) }
|
45
|
+
its('method_name') { should eq 'get' }
|
46
|
+
its('path') { should eq '/applications' }
|
47
|
+
its('headers') { should eq('X-App' => 'appway') }
|
48
|
+
its('body') { should eq(nil) }
|
49
|
+
end
|
50
|
+
|
51
|
+
describe 'create' do
|
52
|
+
let('manifest') { File.join(ASSETS_PATH, 'appway-example.json') }
|
53
|
+
subject { endpoints.create manifest: manifest }
|
54
|
+
its('method_name') { should eq 'post' }
|
55
|
+
its('path') { should eq '/applications' }
|
56
|
+
its('headers') { should eq('X-App' => 'appway',
|
57
|
+
'Content-Type' => 'application/json') }
|
58
|
+
its('body') { should be_kind_of(Xploy::Api::Request::Body) }
|
59
|
+
end
|
60
|
+
|
61
|
+
describe 'find' do
|
62
|
+
subject { endpoints.find name: 'foo' }
|
63
|
+
its('method_name') { should eq 'get' }
|
64
|
+
its('path') { should eq '/applications/foo' }
|
65
|
+
its('headers') { should eq('X-App' => 'appway') }
|
66
|
+
its('body') { should eq(nil) }
|
67
|
+
end
|
68
|
+
|
69
|
+
describe 'update' do
|
70
|
+
subject { endpoints.update name: 'foo' }
|
71
|
+
its('method_name') { should eq 'put' }
|
72
|
+
its('path') { should eq '/applications/foo' }
|
73
|
+
its('headers') { should eq('X-App' => 'appway') }
|
74
|
+
its('body') { should eq(nil) }
|
75
|
+
end
|
76
|
+
|
77
|
+
describe 'delete' do
|
78
|
+
subject { endpoints.delete name: 'foo' }
|
79
|
+
its('method_name') { should eq 'delete' }
|
80
|
+
its('path') { should eq '/applications/foo' }
|
81
|
+
its('headers') { should eq('X-App' => 'appway') }
|
82
|
+
its('body') { should eq(nil) }
|
83
|
+
end
|
84
|
+
|
85
|
+
describe 'log' do
|
86
|
+
subject { endpoints.log name: 'foo' }
|
87
|
+
its('method_name') { should eq 'get' }
|
88
|
+
its('path') { should eq '/applications/foo/log' }
|
89
|
+
its('headers') { should eq('X-App' => 'appway') }
|
90
|
+
its('body') { should eq(nil) }
|
91
|
+
end
|
92
|
+
|
93
|
+
describe 'start' do
|
94
|
+
subject { endpoints.start name: 'foo' }
|
95
|
+
its('method_name') { should eq 'post' }
|
96
|
+
its('path') { should eq '/applications/foo/start' }
|
97
|
+
its('headers') { should eq('X-App' => 'appway') }
|
98
|
+
its('body') { should eq(nil) }
|
99
|
+
end
|
100
|
+
|
101
|
+
describe 'stop' do
|
102
|
+
subject { endpoints.stop name: 'foo' }
|
103
|
+
its('method_name') { should eq 'post' }
|
104
|
+
its('path') { should eq '/applications/foo/stop' }
|
105
|
+
its('headers') { should eq('X-App' => 'appway') }
|
106
|
+
its('body') { should eq(nil) }
|
107
|
+
end
|
108
|
+
|
109
|
+
describe 'restart' do
|
110
|
+
subject { endpoints.restart name: 'foo' }
|
111
|
+
its('method_name') { should eq 'post' }
|
112
|
+
its('path') { should eq '/applications/foo/restart' }
|
113
|
+
its('headers') { should eq('X-App' => 'appway') }
|
114
|
+
its('body') { should eq(nil) }
|
115
|
+
end
|
116
|
+
|
117
|
+
describe 'redeploy' do
|
118
|
+
subject { endpoints.redeploy name: 'foo' }
|
119
|
+
its('method_name') { should eq 'post' }
|
120
|
+
its('path') { should eq '/applications/foo/redeploy' }
|
121
|
+
its('headers') { should eq('X-App' => 'appway') }
|
122
|
+
its('body') { should eq(nil) }
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|