clue 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: adc1f6e8d6b476ddecc339386015e71bab4d4c0d
4
- data.tar.gz: 2f5bd6a517174c7c8cc43d2e332b19b37810ca16
3
+ metadata.gz: 52b1b3fba7f900b089e9f1a7555a4dc946218df5
4
+ data.tar.gz: dac8a07689cb0a35bf9d22ee4b3fbf3e9fdd9618
5
5
  SHA512:
6
- metadata.gz: 24232473b4740567d10ec39695048b28b4361d5842ecdb31e2228bdca093d51ef184621d2f43f43c2429f93960b5fa585f48aa9d3129d9759964cbe0ed16b239
7
- data.tar.gz: dae14fdd4fe484416e2c5991428ebe8208d24cdcc65bf73b9ab86d333d886003f58493ff926e16c50fb3dbf47b80da5bb86560c72925a5563c81c867a211e5d7
6
+ metadata.gz: f760a74830c914fdea3c57a63674f1664bbd1550d6cf10a806b933dc00dbcfb7d57aecf3d31c39ced1582a07d39f5ce18a07da6e736377bf070bab32835d405e
7
+ data.tar.gz: 413240c4ef79e0ae264461e83daef3208ecb5acd1c37833400e3531786d872d0d4f2766354a2a3b366cf896da1fc7894a3fb12f9c37f13c290d5862fb60120fe
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- clue (1.0.0)
4
+ clue (1.1.0)
5
5
  activesupport
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -6,6 +6,8 @@ The use-case in mind when creating this gem was rake tasks/capistrano recipes in
6
6
 
7
7
  ## Prerequisites
8
8
 
9
+ [![Build Status](https://travis-ci.org/novelys/clue.png?branch=master)](https://travis-ci.org/novelys/clue)
10
+
9
11
  This gem depends only on activesupport. It is tested agains many rubies: 1.8.7, 1.9.3, 2.0.0, jruby-18, jruby-19, rubinius-18, rubinius-19, thanks to travis-ci.
10
12
 
11
13
  While it is tested against Ruby 1.8, we do not garanty support in future releases, as it is approaching end of life.
@@ -35,11 +37,23 @@ clue.call
35
37
  The command name can be supplied when initializing the object, as done above, or at a later point, by setting `command` to some value.
36
38
  Calling `call` will raise an exception if `command` is not present.
37
39
 
40
+ ### Config
41
+
42
+ Not all command line tools expects the same format of options, value, inputs; you can configure those when initialiazing the object, or at a later point using the `config` hash. It recognizes :
43
+
44
+ * `between_arguments`: defaults to `' '`. Used between arguments list
45
+ * `between_options`: defaults to `' '`. Used between options list.
46
+ * `between_streams`: defaults to `' '`. Used between streams list.
47
+ * `option_value_separator`: defaults to `' '`. Used between an option and its value. Will usually be `' '` or `=`.
48
+ * `option_prefix`: defaults to `'--'`. Prepended to an option. Will usually be `-`, or `--`.
49
+ * `option_delimiter`: defaults to `"'"`. Surrounds an option value, in order to prevent escaping issues.
50
+ * `stream_delimiter`: defaults to `"'"`. Surrounds a stream, in order to prevent escaping issues.
51
+
38
52
  ### Options
39
53
 
40
54
  `Clue` accepts options when initializing, as in `clue = Clue.new(options: [:first, :second, {third: :value}])`.
41
55
 
42
- You must supply "singular" (options without value) first, and "valued" options as a trailing hash, as shown above.
56
+ You must supply "singular" (options without value) first, and "valued" options as a trailing hash, as shown above.
43
57
  You can add options at a later point use `add_singular_option`, `add_singular_options`, `add_option`, and `add_options`.
44
58
 
45
59
  ### Arguments
@@ -76,4 +90,5 @@ There is no mecanisme built-in for validating the presence/format of arguments,
76
90
 
77
91
  ## Changelog
78
92
 
93
+ * `1.1.0`: Allow configuration of cli command string defaults.
79
94
  * `1.0.0`: First version.
@@ -12,6 +12,8 @@ class Clue
12
12
  include Options
13
13
  include Streams
14
14
 
15
+ attr_accessor :config
16
+
15
17
  # Store command name, parse & store args
16
18
  def initialize(*args)
17
19
  hsh = args.last.kind_of?(Hash) && args.pop || {}
@@ -23,10 +25,26 @@ class Clue
23
25
  self.verbose = hsh.delete(:verbose)
24
26
  self.dry_run = hsh.delete(:dry_run)
25
27
 
28
+ init_config hsh.delete(:config)
26
29
  init_options hsh[:options]
27
30
  init_arguments hsh[:arguments]
28
31
  init_streams hsh
29
32
 
30
33
  after_initialize(command, hsh) if self.respond_to?(:after_initialize)
31
34
  end
35
+
36
+ # Handles config
37
+ def init_config(config = {})
38
+ @config = {
39
+ :between_arguments => ' ',
40
+ :between_options => ' ',
41
+ :between_streams => ' ',
42
+ :option_value_separator => ' ',
43
+ :option_prefix => '--',
44
+ :option_delimiter => "'",
45
+ :stream_delimiter => "'"
46
+ }
47
+
48
+ @config.merge!(config) if config
49
+ end
32
50
  end
@@ -16,7 +16,7 @@ module Clue::Arguments
16
16
  value = [value]
17
17
  end
18
18
 
19
- @arguments = value
19
+ @arguments = value
20
20
  end
21
21
 
22
22
  # Add one argument
@@ -36,6 +36,6 @@ module Clue::Arguments
36
36
 
37
37
  # Returns a string or arguments suitable for cli use
38
38
  def cli_arguments
39
- @arguments.join(' ')
39
+ @arguments.join self.config[:between_arguments]
40
40
  end
41
41
  end
@@ -17,7 +17,7 @@ module Clue::Options
17
17
  @options = options
18
18
  elsif options.kind_of?(Array)
19
19
  @singular_options = options
20
- @options = @singular_options.pop if @singular_options.last.kind_of?(Hash)
20
+ @options = @singular_options.pop if @singular_options.last.kind_of?(Hash)
21
21
  elsif options.kind_of?(String) || options.kind_of?(Symbol)
22
22
  @singular_options = [options.to_sym]
23
23
  end
@@ -50,19 +50,23 @@ module Clue::Options
50
50
 
51
51
  # Returns the options string
52
52
  def cli_options
53
- options_as_array.join(' ')
53
+ options_as_array.join self.config[:between_options]
54
54
  end
55
55
 
56
56
  # Returns options as an array
57
57
  def options_as_array
58
58
  # Valued options
59
59
  ary = @options.each_with_object([]) do |(key, value), memo|
60
- memo << "--#{key.to_s} '#{value.to_s}'"
60
+ prefix = self.config[:option_prefix]
61
+ separator = self.config[:option_value_separator]
62
+ delimiter = self.config[:option_delimiter]
63
+ memo << "#{prefix}#{key.to_s}#{separator}#{delimiter}#{value.to_s}#{delimiter}"
61
64
  end
62
65
 
63
66
  # Singular options
64
67
  ary = @singular_options.each_with_object(ary) do |opt, memo|
65
- memo << "--#{opt.to_s}"
68
+ prefix = self.config[:option_prefix]
69
+ memo << "#{prefix}#{opt.to_s}"
66
70
  end
67
71
 
68
72
  ary
@@ -32,9 +32,10 @@ module Clue::Streams
32
32
  def cli_streams
33
33
  ary = STREAMS_SYMBOLS.each_with_object([]) do |(key, value), memo|
34
34
  ivar = instance_variable_get "@#{key}"
35
- memo << "#{value} '#{ivar}'" if ivar
35
+ delimiter = self.config[:stream_delimiter]
36
+ memo << "#{value} #{delimiter}#{ivar}#{delimiter}" if ivar
36
37
  end
37
38
 
38
- ary.join(' ')
39
+ ary.join self.config[:between_streams]
39
40
  end
40
41
  end
@@ -1,3 +1,3 @@
1
1
  class Clue
2
- VERSION = '1.0.0'
2
+ VERSION = '1.1.0'
3
3
  end
@@ -1,7 +1,7 @@
1
1
  require 'clue'
2
2
 
3
3
  describe "Arguments" do
4
- subject { Clue.new 'commandname'}
4
+ subject { Clue.new 'commandname', :config => {:between_arguments => "FOO"}}
5
5
  let(:arguments) { subject.instance_variable_get :@arguments }
6
6
 
7
7
  it 'should add one argument' do
@@ -32,7 +32,7 @@ describe "Arguments" do
32
32
 
33
33
  it 'can merge arguments into a string' do
34
34
  subject.add_arguments %w(john jim jones)
35
-
35
+
36
36
  expect(subject.cli_arguments).to include "john"
37
37
  expect(subject.cli_arguments).to include "jim"
38
38
  expect(subject.cli_arguments).to include "jones"
@@ -53,8 +53,10 @@ describe "Arguments" do
53
53
 
54
54
  it 'can merge arguments into a string' do
55
55
  subject.add_arguments %w(john jim)
56
-
56
+ sep = subject.config[:between_arguments]
57
+
57
58
  expect(subject.cli_arguments).to include "john"
58
59
  expect(subject.cli_arguments).to include "jim"
60
+ expect(subject.cli_arguments).to eq "john#{sep}jim"
59
61
  end
60
62
  end
@@ -1,7 +1,14 @@
1
1
  require 'clue'
2
2
 
3
3
  describe "Options" do
4
- subject { Clue.new 'commandname'}
4
+ subject do
5
+ Clue.new 'commandname', :config => {
6
+ :option_prefix => '_',
7
+ :option_value_separator => '==',
8
+ :option_delimiter => '"""'
9
+ }
10
+ end
11
+
5
12
  let(:options) { subject.instance_variable_get :@options }
6
13
  let(:singular) { subject.instance_variable_get :@singular_options }
7
14
 
@@ -52,12 +59,16 @@ describe "Options" do
52
59
  it 'can merge options into a string' do
53
60
  subject.add_options :key1 => 'value1', :key2 => 'value2'
54
61
  subject.add_singular_options %w(john jim jones)
55
-
56
- expect(subject.cli_options).to include "--key1 'value1'"
57
- expect(subject.cli_options).to include "--key2 'value2'"
58
- expect(subject.cli_options).to include "--john"
59
- expect(subject.cli_options).to include "--jim"
60
- expect(subject.cli_options).to include "--jones"
62
+
63
+ prefix = subject.config[:option_prefix]
64
+ sep = subject.config[:option_value_separator]
65
+ delim = subject.config[:option_delimiter]
66
+
67
+ expect(subject.cli_options).to include "#{prefix}key1#{sep}#{delim}value1#{delim}"
68
+ expect(subject.cli_options).to include "#{prefix}key2#{sep}#{delim}value2#{delim}"
69
+ expect(subject.cli_options).to include "#{prefix}john"
70
+ expect(subject.cli_options).to include "#{prefix}jim"
71
+ expect(subject.cli_options).to include "#{prefix}jones"
61
72
  end
62
73
 
63
74
  it 'should recognize options given during initialization' do
@@ -1,7 +1,7 @@
1
1
  require 'clue'
2
2
 
3
3
  describe "Streams" do
4
- subject { Clue.new 'commandname'}
4
+ subject { Clue.new 'commandname', :config => {:stream_delimiter => '<>'}}
5
5
 
6
6
  let(:stdin) { subject.stdin }
7
7
  let(:stdout) { subject.stdout }
@@ -38,9 +38,9 @@ describe "Streams" do
38
38
 
39
39
  it 'can merge streams into a string' do
40
40
  subject.set_streams :stdin => 'value', :stdout => 'value2', :stderr => 'val3'
41
-
42
- expect(subject.cli_streams).to include "> 'value2'"
43
- expect(subject.cli_streams).to include "< 'value'"
44
- expect(subject.cli_streams).to include "2> 'val3'"
41
+ delim = subject.config[:stream_delimiter]
42
+ expect(subject.cli_streams).to include "> #{delim}value2#{delim}"
43
+ expect(subject.cli_streams).to include "< #{delim}value#{delim}"
44
+ expect(subject.cli_streams).to include "2> #{delim}val3#{delim}"
45
45
  end
46
46
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clue
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Soltysiak
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-04-03 00:00:00.000000000 Z
11
+ date: 2013-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport