command-designer 0.0.1 → 0.8.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 +4 -4
- data/lib/command-designer.rb +2 -2
- data/lib/command-designer/command.rb +56 -0
- data/lib/command-designer/dsl.rb +23 -0
- data/lib/command-designer/version.rb +3 -1
- data/test/command-designer/command_test.rb +29 -0
- data/test/command-designer/dsl_test.rb +53 -0
- data/test/test_helper.rb +33 -0
- metadata +95 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ac766aaf18cfc1096dc731cb63e3b885dc4e60f
|
4
|
+
data.tar.gz: a3626a4a5752ac12a185c4440647e52ea48d03a9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dbe9963b7cfb1c563cccc034ee73beb3a4034b7714491e78d30183f459be733e48a3c890343ad2777b25923747f9b12ed0eba3138823d1a2c3b6fa95ad5a5f20
|
7
|
+
data.tar.gz: d0b61cea7257928d798ee443a0b66b6f74fbc18ea59d509da506004a17e13e1af20f121c9c0294e17cec88e7b9f685eec8b746d55ef514d53ac5926d53671db0
|
data/lib/command-designer.rb
CHANGED
@@ -0,0 +1,56 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright 2014 Michal Papis <mpapis@gmail.com>
|
3
|
+
|
4
|
+
See the file LICENSE for copying permission.
|
5
|
+
=end
|
6
|
+
|
7
|
+
require "shellwords"
|
8
|
+
require "command-designer/version"
|
9
|
+
|
10
|
+
# A concpet of command that can be extended multiple times
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
#
|
14
|
+
# command = CommandDesigner::Command.new("test")
|
15
|
+
# command.change {|command| "env #{command}" }
|
16
|
+
# command.command # => "env test"
|
17
|
+
#
|
18
|
+
class CommandDesigner::Command
|
19
|
+
|
20
|
+
# @return [String] current value of the command
|
21
|
+
attr_reader :command
|
22
|
+
|
23
|
+
# @return [Array] initial value of the command and parameters
|
24
|
+
attr_reader :initial_command
|
25
|
+
|
26
|
+
# initialize +command+ and +initial_command+
|
27
|
+
# @param args [Array<String>] The command name to build upon
|
28
|
+
def initialize(*args)
|
29
|
+
@initial_command = args || []
|
30
|
+
reset
|
31
|
+
end
|
32
|
+
|
33
|
+
# reset command to it's initial state
|
34
|
+
def reset
|
35
|
+
@command = Shellwords.join(@initial_command)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Yields a block to change the command
|
39
|
+
# @yield [command] a block to change the command
|
40
|
+
# @yieldparam command [String] the current command
|
41
|
+
# @return [String] the new command
|
42
|
+
def change(&block)
|
43
|
+
@command = yield @command
|
44
|
+
end
|
45
|
+
|
46
|
+
# @return [String] just the first part of the command: +command_name+
|
47
|
+
def command_name
|
48
|
+
@initial_command.first
|
49
|
+
end
|
50
|
+
|
51
|
+
# @return [Boolean] true if other object equals command_name, false otherwise
|
52
|
+
def ==(other)
|
53
|
+
self.command_name == other
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright 2014 Michal Papis <mpapis@gmail.com>
|
3
|
+
|
4
|
+
See the file LICENSE for copying permission.
|
5
|
+
=end
|
6
|
+
|
7
|
+
require "command-designer/command"
|
8
|
+
require "context-filters"
|
9
|
+
|
10
|
+
# Add support for +command+ in +Context+ using +Filters+
|
11
|
+
class CommandDesigner::Dsl < ContextFilters::Context
|
12
|
+
|
13
|
+
# evaluates the given command_name in current context (applies matching filters)
|
14
|
+
# @param command_name [String] the command name to evaluate
|
15
|
+
# @param args [String] rest of command arguments
|
16
|
+
# @return [String] the evaluated value of command name
|
17
|
+
def command(command_name, *args)
|
18
|
+
cmd = CommandDesigner::Command.new(command_name, *args)
|
19
|
+
evaluate_filters(cmd, :change)
|
20
|
+
cmd.command
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright 2014 Michal Papis <mpapis@gmail.com>
|
3
|
+
|
4
|
+
See the file LICENSE for copying permission.
|
5
|
+
=end
|
6
|
+
|
7
|
+
require "test_helper"
|
8
|
+
require "command-designer/command"
|
9
|
+
|
10
|
+
describe CommandDesigner::Command do
|
11
|
+
subject do
|
12
|
+
CommandDesigner::Command.allocate
|
13
|
+
end
|
14
|
+
|
15
|
+
it "initializes command" do
|
16
|
+
subject.send(:initialize, "true")
|
17
|
+
subject.command.must_equal("true")
|
18
|
+
subject.initial_command.must_equal(["true"])
|
19
|
+
end
|
20
|
+
|
21
|
+
it "builds and resets the command" do
|
22
|
+
subject.send(:initialize, "true")
|
23
|
+
subject.change {|command| "env #{command}"}
|
24
|
+
subject.command.must_equal("env true")
|
25
|
+
subject.reset
|
26
|
+
subject.command.must_equal("true")
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright 2014 Michal Papis <mpapis@gmail.com>
|
3
|
+
|
4
|
+
See the file LICENSE for copying permission.
|
5
|
+
=end
|
6
|
+
|
7
|
+
require "test_helper"
|
8
|
+
require "command-designer/dsl"
|
9
|
+
|
10
|
+
describe CommandDesigner::Dsl do
|
11
|
+
subject do
|
12
|
+
CommandDesigner::Dsl.new
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "top level" do
|
16
|
+
|
17
|
+
it "handles top level commands" do
|
18
|
+
subject.command("true").must_equal("true")
|
19
|
+
end
|
20
|
+
|
21
|
+
it "handles filtered commands" do
|
22
|
+
subject.filter(nil) do |command| "env #{command}" end
|
23
|
+
subject.command("true").must_equal("env true")
|
24
|
+
subject.command("false").must_equal("env false")
|
25
|
+
end
|
26
|
+
|
27
|
+
it "does not filter commands that are not in context" do
|
28
|
+
subject.filter(nil, :commands) do |command| "command #{command}" end
|
29
|
+
subject.command("true").must_equal("true")
|
30
|
+
end
|
31
|
+
|
32
|
+
it "does not call evaluate_command for no filters" do
|
33
|
+
subject.expects(:evaluate_filters).once
|
34
|
+
subject.command("true")
|
35
|
+
end
|
36
|
+
|
37
|
+
it "handles filtered targeted commands" do
|
38
|
+
subject.filter(nil, {:target => "true"}) do |command| "env #{command}" end
|
39
|
+
subject.command("false").must_equal("false")
|
40
|
+
subject.command("true").must_equal("env true")
|
41
|
+
end
|
42
|
+
|
43
|
+
it "handles filtered targeted commands in context" do
|
44
|
+
subject.filter(nil, {:target => "true"}) do |command| "env #{command}" end
|
45
|
+
subject.in_context({:a=>3}) do
|
46
|
+
subject.command("false").must_equal("false")
|
47
|
+
subject.command("true").must_equal("env true")
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
end #"top level"
|
52
|
+
|
53
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
=begin
|
2
|
+
Copyright 2014 Michal Papis <mpapis@gmail.com>
|
3
|
+
|
4
|
+
See the file LICENSE for copying permission.
|
5
|
+
=end
|
6
|
+
|
7
|
+
require "rubygems"
|
8
|
+
|
9
|
+
if
|
10
|
+
RUBY_VERSION == "2.0.0" && # check Gemfile
|
11
|
+
$0 != "-e" # do not do that in guard
|
12
|
+
then
|
13
|
+
require "coveralls"
|
14
|
+
require "simplecov"
|
15
|
+
|
16
|
+
SimpleCov.start do
|
17
|
+
formatter SimpleCov::Formatter::MultiFormatter[
|
18
|
+
SimpleCov::Formatter::HTMLFormatter,
|
19
|
+
Coveralls::SimpleCov::Formatter,
|
20
|
+
]
|
21
|
+
command_name "Unit Tests"
|
22
|
+
add_filter "/test/"
|
23
|
+
end
|
24
|
+
|
25
|
+
Coveralls.noisy = true unless ENV["CI"]
|
26
|
+
end
|
27
|
+
|
28
|
+
# Autoload all lib/**/*.rb files so simplecov does not misses anything
|
29
|
+
Dir[File.expand_path("../../lib/**/*.rb", __FILE__)].each{|f| require f }
|
30
|
+
|
31
|
+
require "minitest/autorun" unless $0=="-e" # skip in guard
|
32
|
+
require "minitest/unit"
|
33
|
+
require "mocha/setup"
|
metadata
CHANGED
@@ -1,41 +1,117 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: command-designer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michal Papis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: context-filters
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.9'
|
20
|
+
- - '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.9.2
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.9'
|
30
|
+
- - '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.9.2
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: guard
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ~>
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '2.6'
|
40
|
+
type: :development
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '2.6'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: guard-minitest
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '2.3'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ~>
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '2.3'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: guard-yard
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ~>
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '2.1'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ~>
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '2.1'
|
13
75
|
- !ruby/object:Gem::Dependency
|
14
76
|
name: minitest
|
15
77
|
requirement: !ruby/object:Gem::Requirement
|
16
78
|
requirements:
|
17
|
-
- -
|
79
|
+
- - ~>
|
18
80
|
- !ruby/object:Gem::Version
|
19
81
|
version: '5.4'
|
20
82
|
type: :development
|
21
83
|
prerelease: false
|
22
84
|
version_requirements: !ruby/object:Gem::Requirement
|
23
85
|
requirements:
|
24
|
-
- -
|
86
|
+
- - ~>
|
25
87
|
- !ruby/object:Gem::Version
|
26
88
|
version: '5.4'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: mocha
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ~>
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '1.1'
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ~>
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '1.1'
|
27
103
|
- !ruby/object:Gem::Dependency
|
28
104
|
name: rake
|
29
105
|
requirement: !ruby/object:Gem::Requirement
|
30
106
|
requirements:
|
31
|
-
- -
|
107
|
+
- - ~>
|
32
108
|
- !ruby/object:Gem::Version
|
33
109
|
version: '10.3'
|
34
110
|
type: :development
|
35
111
|
prerelease: false
|
36
112
|
version_requirements: !ruby/object:Gem::Requirement
|
37
113
|
requirements:
|
38
|
-
- -
|
114
|
+
- - ~>
|
39
115
|
- !ruby/object:Gem::Version
|
40
116
|
version: '10.3'
|
41
117
|
description:
|
@@ -46,7 +122,12 @@ extensions: []
|
|
46
122
|
extra_rdoc_files: []
|
47
123
|
files:
|
48
124
|
- lib/command-designer.rb
|
125
|
+
- lib/command-designer/command.rb
|
126
|
+
- lib/command-designer/dsl.rb
|
49
127
|
- lib/command-designer/version.rb
|
128
|
+
- test/command-designer/command_test.rb
|
129
|
+
- test/command-designer/dsl_test.rb
|
130
|
+
- test/test_helper.rb
|
50
131
|
homepage: https://github.com/remote-exec/command-designer
|
51
132
|
licenses:
|
52
133
|
- MIT
|
@@ -57,18 +138,22 @@ require_paths:
|
|
57
138
|
- lib
|
58
139
|
required_ruby_version: !ruby/object:Gem::Requirement
|
59
140
|
requirements:
|
60
|
-
- -
|
141
|
+
- - '>='
|
61
142
|
- !ruby/object:Gem::Version
|
62
143
|
version: 1.9.3
|
63
144
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
145
|
requirements:
|
65
|
-
- -
|
146
|
+
- - '>='
|
66
147
|
- !ruby/object:Gem::Version
|
67
148
|
version: '0'
|
68
149
|
requirements: []
|
69
150
|
rubyforge_project:
|
70
|
-
rubygems_version: 2.
|
151
|
+
rubygems_version: 2.2.2
|
71
152
|
signing_key:
|
72
153
|
specification_version: 4
|
73
154
|
summary: Build command text based on multiple filters
|
74
|
-
test_files:
|
155
|
+
test_files:
|
156
|
+
- test/command-designer/command_test.rb
|
157
|
+
- test/command-designer/dsl_test.rb
|
158
|
+
- test/test_helper.rb
|
159
|
+
has_rdoc:
|