rcoli 0.5.7 → 0.5.8

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rcoli (0.5.7)
4
+ rcoli (0.5.8)
5
5
  highline (~> 1.6.11)
6
6
 
7
7
  GEM
@@ -7,7 +7,7 @@ def setter(name)
7
7
  define_method("value_of_#{name}") do
8
8
  ivar = "@#{name}"
9
9
  if (instance_variable_get(ivar))
10
- instance_variable_get(ivar).to_s
10
+ instance_variable_get(ivar)
11
11
  else
12
12
  nil
13
13
  end
data/lib/rcoli/model.rb CHANGED
@@ -8,8 +8,12 @@ module RCoLi
8
8
 
9
9
  module CommandContainer
10
10
 
11
+ setter :force
12
+
13
+
11
14
  attr_accessor :parent
12
15
 
16
+
13
17
  def action(&block)
14
18
  @action = block
15
19
  end
@@ -18,8 +22,8 @@ module RCoLi
18
22
  @action
19
23
  end
20
24
 
21
- def command(name, &block)
22
- obj = Command.new(name)
25
+ def command(nam, &block)
26
+ obj = Command.new(nam)
23
27
  obj.parent = self
24
28
  block.call(obj)
25
29
  commands << obj
@@ -66,6 +70,7 @@ module RCoLi
66
70
  result.command = cmd
67
71
  cmd.put_default_values(result)
68
72
  cmd.parse_args(args, result)
73
+ cmd.validate_options(result, :options)
69
74
  elsif (commands.empty?)
70
75
  result.arguments << arg
71
76
  else
@@ -83,7 +88,18 @@ module RCoLi
83
88
  end
84
89
 
85
90
  def find_command(name)
86
- commands.find{|command| command.value_of_name.eql? name}
91
+ result = commands.find{|command| command.value_of_name.to_s.eql? name}
92
+ return result
93
+ end
94
+
95
+ def validate_options(result, target)
96
+ if (result.command.value_of_force == true)
97
+ return
98
+ else
99
+ self.options.find_all{|o| o.is_a? Flag and o.value_of_required}.each do |o|
100
+ raise InvalidCommand, "Required option '#{o.to_s}' is missing" unless o.keys.find{|key| result.send(target)[key]}
101
+ end
102
+ end
87
103
  end
88
104
 
89
105
  private
@@ -111,6 +127,10 @@ module RCoLi
111
127
  [@s_name, @l_name].compact
112
128
  end
113
129
 
130
+ def to_s
131
+ keys.join(', ')
132
+ end
133
+
114
134
  def help_keys
115
135
  result = []
116
136
  result << "-#{@s_name}" if @s_name
@@ -136,6 +156,7 @@ module RCoLi
136
156
 
137
157
  setter :default_value
138
158
  setter :arg_name
159
+ setter :required
139
160
 
140
161
  end
141
162
 
@@ -145,14 +166,8 @@ module RCoLi
145
166
  setter :summary
146
167
  setter :description
147
168
  setter :syntax
148
-
149
- def solitaire
150
- @solitaire = true
151
- end
152
-
153
- def solitaire?
154
- return true == @solitaire
155
- end
169
+ setter :skip_pre
170
+ setter :skip_post
156
171
 
157
172
  def initialize(name)
158
173
  @name = name
@@ -186,11 +201,12 @@ module RCoLi
186
201
  result = ParsedArgs.new
187
202
  put_default_values(result)
188
203
  parse_args(args, result)
204
+ validate_options(result, :global_options)
189
205
  if result.command
190
206
 
191
207
  # command has to have the action block
192
208
  action = result.command.get_action
193
- raise "Invalid configuration. Missing action block." unless action
209
+ raise ApplicationError, "Invalid configuration. Missing action block." unless action
194
210
 
195
211
  # enable/disable logging level DEBUG
196
212
  if (result.global_options['debug'])
@@ -200,11 +216,11 @@ module RCoLi
200
216
  end
201
217
 
202
218
  # execution of the pre block
203
- context.instance_exec(result.global_options, result.options, result.arguments, &@pre_action) if (@pre_action and !result.command.solitaire?)
219
+ context.instance_exec(result.global_options, result.options, result.arguments, &@pre_action) if (@pre_action and !result.command.value_of_skip_pre)
204
220
  # execution of the main block
205
221
  context.instance_exec(result.global_options, result.options, result.arguments, &action)
206
222
  # execution of the post block
207
- context.instance_exec(result.global_options, result.options, result.arguments, &@post_action) if (@post_action and !result.command.solitaire?)
223
+ context.instance_exec(result.global_options, result.options, result.arguments, &@post_action) if (@post_action and !result.command.value_of_skip_post)
208
224
  else
209
225
  say "This feature is comming soon. Now you should execute '#{value_of_name} help'"
210
226
  end
data/lib/rcoli/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module RCoLi
2
2
 
3
- VERSION = '0.5.7'
3
+ VERSION = '0.5.8'
4
4
 
5
5
  end
data/lib/rcoli.rb CHANGED
@@ -16,7 +16,9 @@ def application(id, &block)
16
16
 
17
17
  @program.command(:help) do |c|
18
18
  c.description "Display help documentation"
19
- c.solitaire
19
+ c.skip_pre true
20
+ c.skip_post true
21
+ c.force true
20
22
  c.action do |global_opts, opts, args|
21
23
  @program.help args
22
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rcoli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.7
4
+ version: 0.5.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-15 00:00:00.000000000 Z
12
+ date: 2013-04-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: highline
@@ -78,7 +78,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
78
78
  version: '0'
79
79
  segments:
80
80
  - 0
81
- hash: 2584008343828068554
81
+ hash: 2822556458840030411
82
82
  required_rubygems_version: !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
@@ -87,7 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
87
  version: '0'
88
88
  segments:
89
89
  - 0
90
- hash: 2584008343828068554
90
+ hash: 2822556458840030411
91
91
  requirements: []
92
92
  rubyforge_project:
93
93
  rubygems_version: 1.8.24