nuker-client 1.0.0
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.
- checksums.yaml +7 -0
- data/README.md +18 -0
- data/bin/nuker-client +50 -0
- data/lib/nuker/client/config.rb +15 -0
- data/lib/nuker/client/version.rb +7 -0
- data/lib/nuker/client_error.rb +5 -0
- data/lib/nuker/commands.rb +21 -0
- data/lib/nuker/commands/add_project.rb +19 -0
- data/lib/nuker/commands/base.rb +18 -0
- data/lib/nuker/commands/push.rb +36 -0
- data/lib/nuker/commands/remove_project.rb +17 -0
- data/lib/nuker/rest_resource.rb +41 -0
- data/lib/nuker/tar_gz_util.rb +23 -0
- data/spec/spec_helper.rb +5 -0
- metadata +129 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f06d8c5cdd29f56d46031a8b1429993978df2fd5
|
4
|
+
data.tar.gz: e79d79806c51e5e0e28d18388321941571882105
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 20ee2df879a9b2532006638276026852d80811a1a8ec695ebae6ff603c74d047640e9304dca09a4ad859e1961829c10574042739ac5aeae587942a686764c09e
|
7
|
+
data.tar.gz: a395e694a9b1854a65cf07e8023130f0063792b9c25768d01e89a79758762277157cfd4764bbf3e5ab4017469c48e0b7e958034183bf8592c33ec34d7d575d3d
|
data/README.md
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# Nuker client
|
2
|
+
|
3
|
+
## Installation
|
4
|
+
|
5
|
+
* ```gem install nuker-client```
|
6
|
+
* Create a nuker.yml file in the directory you will be running nuker-client from.
|
7
|
+
|
8
|
+
e.g.
|
9
|
+
# url of nuker server
|
10
|
+
url: http://localhost:4567
|
11
|
+
|
12
|
+
## Usage
|
13
|
+
|
14
|
+
Tasks:
|
15
|
+
nuker-client add_project NAME # Add project
|
16
|
+
nuker-client help [TASK] # Describe available tasks or one specifi...
|
17
|
+
nuker-client push PROJECT DIR # Push features from DIR to PROJECT
|
18
|
+
nuker-client remove_project NAME # Remove project
|
data/bin/nuker-client
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems' # ruby1.9 doesn't "require" it though
|
4
|
+
require 'bundler'
|
5
|
+
Bundler.setup
|
6
|
+
require 'thor'
|
7
|
+
require 'nuker/commands'
|
8
|
+
|
9
|
+
require 'yaml'
|
10
|
+
require 'nuker/client/config'
|
11
|
+
|
12
|
+
config_file = File.expand_path('./nuker.yml')
|
13
|
+
|
14
|
+
unless File.exists?(config_file)
|
15
|
+
warn "Error: #{config_file} not found"
|
16
|
+
example_file = File.join(File.dirname(__FILE__), 'nuker.yml.example')
|
17
|
+
warn "See example nuker.yml file below:\n\n#{File.read(example_file)}"
|
18
|
+
exit(1)
|
19
|
+
end
|
20
|
+
|
21
|
+
puts "using config file #{config_file}"
|
22
|
+
Nuker::Client::Config.configure(YAML.load(File.read(config_file)))
|
23
|
+
|
24
|
+
class NukerClientCommand < Thor
|
25
|
+
desc 'add_project NAME ', 'Add project'
|
26
|
+
def add_project(project)
|
27
|
+
execute { Nuker::Commands.add_project(project) }
|
28
|
+
end
|
29
|
+
|
30
|
+
desc 'remove_project NAME', 'Remove project'
|
31
|
+
def remove_project(project)
|
32
|
+
execute { Nuker::Commands.remove_project(project) }
|
33
|
+
end
|
34
|
+
|
35
|
+
desc 'push PROJECT DIR', 'Push features from DIR to PROJECT'
|
36
|
+
def push(project, dir)
|
37
|
+
execute { Nuker::Commands.push(project, dir, options) }
|
38
|
+
end
|
39
|
+
|
40
|
+
no_tasks do
|
41
|
+
def execute(&blk)
|
42
|
+
yield
|
43
|
+
rescue Nuker::ClientError => e
|
44
|
+
warn e.message
|
45
|
+
exit(1)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
NukerClientCommand.start
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'nuker/commands/push'
|
2
|
+
require 'nuker/commands/add_project'
|
3
|
+
require 'nuker/commands/remove_project'
|
4
|
+
|
5
|
+
module Nuker
|
6
|
+
module Commands
|
7
|
+
class << self
|
8
|
+
def add_project(project)
|
9
|
+
AddProject.new(project).execute
|
10
|
+
end
|
11
|
+
|
12
|
+
def push(project, dir, options = {})
|
13
|
+
Push.new(project, dir, options).execute
|
14
|
+
end
|
15
|
+
|
16
|
+
def remove_project(project)
|
17
|
+
RemoveProject.new(project).execute
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'nuker/commands/base'
|
2
|
+
|
3
|
+
module Nuker
|
4
|
+
module Commands
|
5
|
+
class AddProject < Base
|
6
|
+
attr_accessor :project
|
7
|
+
|
8
|
+
def initialize(project)
|
9
|
+
@project = project
|
10
|
+
end
|
11
|
+
|
12
|
+
def execute
|
13
|
+
response = resource.post("/projects/#{project}")
|
14
|
+
rescue RestClient::Conflict
|
15
|
+
raise ClientError, "Project \"#{project}\" already exists"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'nuker/client/config'
|
2
|
+
require 'nuker/rest_resource'
|
3
|
+
require 'nuker/client_error'
|
4
|
+
|
5
|
+
module Nuker
|
6
|
+
module Commands
|
7
|
+
class Base
|
8
|
+
def resource(options = {})
|
9
|
+
options[:headers] = { :client_version => Nuker::Client::Version::STRING }
|
10
|
+
Nuker::RestResource.new(url, options)
|
11
|
+
end
|
12
|
+
|
13
|
+
def url
|
14
|
+
Nuker::Client::Config.url
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'nuker/commands/base'
|
2
|
+
require 'nuker/tar_gz_util'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
module Nuker
|
6
|
+
module Commands
|
7
|
+
class Push < Base
|
8
|
+
attr_accessor :project, :dir
|
9
|
+
|
10
|
+
def initialize(project, dir, options = {})
|
11
|
+
@project = project
|
12
|
+
@dir = dir
|
13
|
+
end
|
14
|
+
|
15
|
+
def execute
|
16
|
+
FileUtils.chdir(dir) do
|
17
|
+
content = targz_util.pack(files)
|
18
|
+
resource.post_tar_gz("projects/#{project}/pushes", content)
|
19
|
+
end
|
20
|
+
|
21
|
+
rescue RestClient::ResourceNotFound
|
22
|
+
raise Nuker::ClientError, "Unknown project \"#{project}\""
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def targz_util
|
28
|
+
Nuker::TarGzUtil
|
29
|
+
end
|
30
|
+
|
31
|
+
def files
|
32
|
+
Dir[File.join('**', '*{feature,md,markdown}')] + Dir['.nav']
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'nuker/commands/base'
|
2
|
+
|
3
|
+
module Nuker
|
4
|
+
module Commands
|
5
|
+
class RemoveProject < Base
|
6
|
+
attr_accessor :project
|
7
|
+
|
8
|
+
def initialize(project)
|
9
|
+
@project = project
|
10
|
+
end
|
11
|
+
|
12
|
+
def execute
|
13
|
+
resource.delete("projects/#{project}")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'rest_client'
|
2
|
+
|
3
|
+
module Nuker
|
4
|
+
class RestResource
|
5
|
+
extend Forwardable
|
6
|
+
|
7
|
+
def_delegators :@resource, :[]
|
8
|
+
|
9
|
+
def initialize(url, options)
|
10
|
+
@resource = RestClient::Resource.new(url, options)
|
11
|
+
end
|
12
|
+
|
13
|
+
def post_tar_gz(path, tar_gz_data)
|
14
|
+
post(path, tar_gz_data, :content_type => 'application/x-gzip')
|
15
|
+
end
|
16
|
+
|
17
|
+
def post(path, *args)
|
18
|
+
if args.empty?
|
19
|
+
with_rescue { resource[path].post({}) }
|
20
|
+
else
|
21
|
+
with_rescue { resource[path].post(*args) }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def delete(path)
|
26
|
+
with_rescue { resource[path].delete }
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def with_rescue
|
32
|
+
yield
|
33
|
+
rescue Errno::ECONNREFUSED => e
|
34
|
+
raise "failed to connect to #{resource}"
|
35
|
+
end
|
36
|
+
|
37
|
+
def resource
|
38
|
+
@resource
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'zlib'
|
2
|
+
require 'archive/tar/minitar'
|
3
|
+
require 'stringio'
|
4
|
+
|
5
|
+
module Nuker
|
6
|
+
class TarGzUtil
|
7
|
+
class << self
|
8
|
+
def pack(files)
|
9
|
+
stream = StringIO.new
|
10
|
+
begin
|
11
|
+
tgz = Zlib::GzipWriter.new(stream)
|
12
|
+
tar = Archive::Tar::Minitar::Output.new(tgz)
|
13
|
+
files.each do |entry|
|
14
|
+
Archive::Tar::Minitar.pack_file(entry, tar)
|
15
|
+
end
|
16
|
+
ensure
|
17
|
+
tar.close if tar # Closes both tar and tgz.
|
18
|
+
end
|
19
|
+
stream.string
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nuker-client
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Marc Bluemner
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-08-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: thor
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rest-client
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: archive-tar-minitar
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: Client gem for the Nuker Cucumber feature viewer and navigator
|
84
|
+
email:
|
85
|
+
- marc.bluemner@gmail.com
|
86
|
+
executables:
|
87
|
+
- nuker-client
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- README.md
|
92
|
+
- bin/nuker-client
|
93
|
+
- lib/nuker/client/config.rb
|
94
|
+
- lib/nuker/client/version.rb
|
95
|
+
- lib/nuker/client_error.rb
|
96
|
+
- lib/nuker/commands.rb
|
97
|
+
- lib/nuker/commands/add_project.rb
|
98
|
+
- lib/nuker/commands/base.rb
|
99
|
+
- lib/nuker/commands/push.rb
|
100
|
+
- lib/nuker/commands/remove_project.rb
|
101
|
+
- lib/nuker/rest_resource.rb
|
102
|
+
- lib/nuker/tar_gz_util.rb
|
103
|
+
- spec/spec_helper.rb
|
104
|
+
homepage: https://github.com/rocknrollmarc/nuker-client
|
105
|
+
licenses: []
|
106
|
+
metadata: {}
|
107
|
+
post_install_message:
|
108
|
+
rdoc_options: []
|
109
|
+
require_paths:
|
110
|
+
- lib
|
111
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
116
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
requirements: []
|
122
|
+
rubyforge_project:
|
123
|
+
rubygems_version: 2.2.2
|
124
|
+
signing_key:
|
125
|
+
specification_version: 4
|
126
|
+
summary: Client gem for the Nuker Cucumber feature viewer and navigator
|
127
|
+
test_files:
|
128
|
+
- spec/spec_helper.rb
|
129
|
+
has_rdoc:
|