vzcdn 0.1.4 → 0.1.5

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: ec9cdba53621f9be97fde6eb72d0e923aa06db61
4
- data.tar.gz: 0931da14e4d50284cf5daa83cc269c0bf308ca37
3
+ metadata.gz: ea3992e358c4d3ae986c6034772689c8f179bed3
4
+ data.tar.gz: 5ae5616ae6c38ba917b5385a2e886c5932743d4a
5
5
  SHA512:
6
- metadata.gz: b9f20a06c369095c0cea23437d3321b936a0f6b72799f618bc1c1a699bc7a8aeeb224a0bb29eb4547488fc582054aea3e5751504a19783603294ba999fa96621
7
- data.tar.gz: 05a60fe2606d87fea0d542647e8c4b518d3f4f90fdcb23f0872b27c9ecf50e40cdf1bdc09b9190976aa22f0af596ae80824d498d93c0a995d370a9a131eb6ad4
6
+ metadata.gz: 7dbc5bef2dfd8f9f36008e5e39af44822168a68d22e8ec79faf247a5247fdf2b9640237a78f7771b61b4171c626661c839aa115f197f343e84d852b0cbb37b05
7
+ data.tar.gz: 2420c36df9dec21484824c3097dcf44ea5ea3a8a43f46d7f1305101e8faa4306018c97d5d52a509b6b30c8d93b70a2622b40cc8f1c779262c5219264fb36bc7e
data/README.md CHANGED
@@ -3,9 +3,22 @@
3
3
  Commandline UI for Edgecast API
4
4
 
5
5
  ##RELEASE NOTES
6
+
7
+ 2014/04/09 0.1.5
8
+ * Default action - print
9
+ * Presentation changes for zone display ( <object> to "...", array elements to [num] etc)
10
+ * Column customization in display
11
+ * directory structure changes
12
+ * improved help
13
+
6
14
  2014/04/09 0.1.4
7
- 1. Bug fix for "ec zone <id> pull"
15
+ * Bug fix for "ec zone <id> pull"
8
16
 
17
+ 2014/04/08 0.1.3
18
+ * Enabled command "ec zone <id> pull"
19
+ * Supported command "ec zone <id> push"
20
+ * Abbreviation support for "ec zone <id> print"
21
+ * Support for option '-j' for "ec zone <id> print"
9
22
 
10
23
  ## Installation
11
24
 
data/bin/ec CHANGED
@@ -1,31 +1,28 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'vzcdn'
4
- require 'vzcdn/version'
5
4
 
6
- $debug = false
7
-
8
- if ARGV[0] == "-v"
9
- puts "vzcdn version:" + Vzcdn::VERSION
10
- exit
5
+ def add_prefix(prefix, text)
6
+ result = ""
7
+ text.each_line { |line|
8
+ result = result + prefix + line
9
+ }
10
+ result
11
11
  end
12
12
 
13
- if ARGV[0] == "-d"
14
- $debug = true
15
- ARGV.shift
13
+ def dputs(*args)
14
+ if $debug
15
+ puts *args
16
+ end
16
17
  end
17
18
 
18
- args = []
19
- ARGV.each { |arg|
20
- args << arg
21
- }
22
-
23
19
  begin
24
- VzcdnApp.invoke(args)
20
+ VzcdnApp.new("vzcdn", "vzcdn").run(ARGV)
21
+
25
22
  exit 0
26
23
  rescue Exception => e
27
24
  if e.class != SystemExit
28
- puts "ERROR:" + e.message
25
+ puts add_prefix("ERROR:", e.message)
29
26
  if $debug
30
27
  raise e
31
28
  else
data/bin/vzcdn CHANGED
@@ -1,31 +1,28 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'vzcdn'
4
- require 'vzcdn/version'
5
4
 
6
- $debug = false
7
-
8
- if ARGV[0] == "-v"
9
- puts "vzcdn version:" + Vzcdn::VERSION
10
- exit
5
+ def add_prefix(prefix, text)
6
+ result = ""
7
+ text.each_line { |line|
8
+ result = result + prefix + line
9
+ }
10
+ result
11
11
  end
12
12
 
13
- if ARGV[0] == "-d"
14
- $debug = true
15
- ARGV.shift
13
+ def dputs(*args)
14
+ if $debug
15
+ puts *args
16
+ end
16
17
  end
17
18
 
18
- args = []
19
- ARGV.each { |arg|
20
- args << arg
21
- }
22
-
23
19
  begin
24
- VzcdnApp.invoke(args)
20
+ VzcdnApp.new("vzcdn", "vzcdn").run(ARGV)
21
+
25
22
  exit 0
26
23
  rescue Exception => e
27
24
  if e.class != SystemExit
28
- puts "ERROR:" + e.message
25
+ puts add_prefix("ERROR:", e.message)
29
26
  if $debug
30
27
  raise e
31
28
  else
data/lib/args.rb CHANGED
@@ -1,17 +1,38 @@
1
1
  require_relative 'route'
2
2
 
3
3
  class Arg
4
- attr_accessor :desc, :required, :default, :validator, :name, :next_node, :value
4
+ attr_accessor :desc, :required, :default, :validator, :name, :next_node, :repeatable
5
+ attr_reader :value
5
6
 
6
7
  def initialize(name, hash={ })
7
8
  @name = name
8
9
  hash.each {|k,v| instance_variable_set("@#{k}",v)}
10
+ if @repeatable
11
+ @full = false
12
+ end
13
+ end
14
+
15
+ def full?
16
+ if @repeatable
17
+ @full
18
+ else
19
+ ! @value.nil?
20
+ end
21
+ end
22
+
23
+ def value=(value)
24
+ if @repeatable
25
+ @value = [ ] if @value.nil?
26
+ @value << value
27
+ else
28
+ @value = value
29
+ end
9
30
  end
10
31
 
11
32
  # return true on success
12
33
  # error message on failure
13
34
 
14
- def validate?(value)
35
+ def validate?(value, obj)
15
36
  vclass = @validator.class
16
37
  if vclass == Regexp
17
38
  test = (value =~ @validator)
@@ -28,68 +49,34 @@ class Arg
28
49
  result[hash["Name"]] = hash["Id"]
29
50
  }
30
51
  @validator = result
31
- test = validate? value
52
+ test = validate?(value, obj)
32
53
  if (test.class == String)
33
54
  on_error = test
34
55
  test = false
35
56
  end
57
+ elsif vclass == Symbol
58
+ on_error, test = obj.send(@validator, value)
36
59
  else
37
60
  test = false
38
61
  on_error = "unknown type of validator:" + @validator.to_s + ", class=" + @validator.class.to_s
39
62
  end
63
+ if not test && @repeatable
64
+ @full = true
65
+ end
40
66
  if test
41
- true
67
+ nil
42
68
  else
43
69
  on_error
44
70
  end
45
71
  end
46
72
  end
47
73
 
48
- class Decision
49
- attr_accessor :flow
50
-
51
- def initialize(decider, *symbols)
52
- @decider = decider
53
- @tree = { }
54
- symbols.each { |symbol|
55
- @tree[symbol] = Flow.new(nil)
56
- }
57
- end
58
-
59
- def chosen
60
- vars = @flow.find(self)
61
- arr = @decider.decide(vars, @tree.keys).map { |symbol|
62
- @tree[symbol].root
63
- }
64
- arr
65
- end
66
-
67
- def children
68
- @tree.values
69
- end
70
-
71
- def add(child, arg)
72
- @tree[child].add arg
73
- end
74
-
75
- def to_s
76
- result = "branch names:"
77
- @tree.keys.each { |child|
78
- result = result + child.to_s + " "
79
- }
80
- result += "\nbranches are of classes:"
81
- @tree.keys.each { |child|
82
- result = result + @tree[child].class.to_s + " "
83
- }
84
- result
85
- end
86
- end
87
-
88
74
  class Flow
89
- attr_reader :root
75
+ attr_reader :root, :command
90
76
 
91
- def initialize(root)
92
- @root = root
77
+ def initialize(*args)
78
+ @root = nil
79
+ add(*args)
93
80
  end
94
81
 
95
82
  def iargs(node, args)
@@ -103,85 +90,71 @@ class Flow
103
90
  args = new_args
104
91
  end
105
92
  iargs(node.next_node, args)
106
- elsif (node.class == Decision)
107
- node.chosen.each { |child|
108
- return iargs(child, args)
109
- }
93
+ elsif node.is_a? Command
94
+ args["command"] = node
95
+ return args
110
96
  end
111
97
  end
112
98
 
113
- def ifind(elt, node, args)
99
+ def args
100
+ iargs(@root, {})
101
+ end
102
+
103
+ def validate_and_set(value, node)
104
+ response = node.validate?(value, @target)
105
+ if response.nil?
106
+ node.value = value
107
+ end
108
+ response
109
+ end
110
+
111
+ def isetvalue(value, node)
114
112
  if node.nil?
115
- return nil
113
+ return nil, :finished
116
114
  end
117
- if (node == elt)
118
- return args
119
- elsif (node.class == Arg)
120
- if node.value
121
- new_args = args.clone
122
- new_args[node.name] = node.value
123
- args = new_args
115
+ if node.full?
116
+ return isetvalue(value, node.next_node)
117
+ end
118
+ if node.class == Arg
119
+ error = validate_and_set(value, node)
120
+ if error && node.repeatable
121
+ return isetvalue(value, node.next_node)
122
+ else
123
+ return error, nil
124
+ end
125
+ elsif node.is_a? Command
126
+ if value == node.name.to_s
127
+ node.setfull
128
+ return nil, nil
129
+ else
130
+ return "incorrect command name", nil
124
131
  end
125
- ifind(elt, node.next_node, args)
126
- elsif (node.class == Decision)
127
- found = false
128
- node.children.each { |child|
129
- result = ifind(elt, child, args)
130
- if (result)
131
- return result
132
- end
133
- }
134
- return nil
135
132
  end
136
133
  end
137
-
138
134
 
139
- def find(elt)
140
- return ifind(elt, @root, {})
135
+ def setvalue(value)
136
+ isetvalue(value, @root)
141
137
  end
142
138
 
143
- # return true for success
144
- # false for unable to find arg name
145
- # String for invalid arg
146
-
147
139
  def iset(name, value, node)
148
140
  if node.nil?
149
- return false
141
+ return "could not find argument with name #{name}", :finished
150
142
  end
151
143
  if (node.class == Arg )
152
144
  if (node.name == name)
153
- response = node.validate?(value)
154
- if (response.class == String)
155
- return response
156
- else
157
- node.value = value
158
- return true
159
- end
145
+ error = validate_and_set(value, node)
146
+ return error, nil
160
147
  else
161
- iset(name, value, node.next_node)
148
+ return iset(name, value, node.next_node)
162
149
  end
163
- elsif (node.class == Decision)
164
- result = false
165
- node.children.each { |flow|
166
- response = iset(name, value, flow.root)
167
- if (response == true)
168
- result = true
169
- elsif (response.class == String)
170
- return response
171
- end
172
- }
173
- result
174
- end
150
+ end
175
151
  end
176
152
 
153
+ # return true for success
154
+ # false for unable to find arg name
155
+ # String for invalid arg
177
156
  def set(name, value)
178
- response = iset(name, value, @root)
179
- if (response == false)
180
- puts "ERROR: could not find argument with name " + name
181
- elsif (response.class == String)
182
- puts "ERROR: " + response
183
- end
184
- response
157
+ iset(name, value, @root)
185
158
  end
186
159
 
187
160
  def iadd(arg, node)
@@ -192,19 +165,24 @@ class Flow
192
165
  end
193
166
  end
194
167
 
195
- def add(arg)
168
+ def add(*args)
169
+ return if args.length == 0
196
170
  if @root.nil?
197
- @root = arg
198
- else
199
- iadd(arg, @root)
171
+ @root = args.shift
200
172
  end
173
+ args.each { |arg|
174
+ iadd(arg, @root)
175
+ }
176
+ self
201
177
  end
202
178
 
203
179
  def to_s
180
+ result = ""
204
181
  args = iargs(@root, {})
205
182
  args.each { |name, value|
206
- puts name + ":" + value
183
+ result = result + "\n#{name}:#{value}"
207
184
  }
185
+ result
208
186
  end
209
187
 
210
188
  def print_flow(node)
@@ -219,20 +197,73 @@ class Flow
219
197
  print_flow(node.next_node)
220
198
  end
221
199
 
222
- def parse_line(line)
223
- idx = line.index('=')
224
- if (idx)
225
- return line[0...idx], line[idx+1..-1]
200
+ def iusage(node, names, desc)
201
+ return names, desc if node.nil?
202
+ if node.class == Arg || node.is_a?(Command)
203
+ names << (node.class == Arg ? "<#{node.name}>" : node.name)
204
+ desc << node.desc
205
+ iusage node.next_node, names, desc
206
+ end
207
+ return names, desc
208
+ end
209
+
210
+ def usage
211
+ names, desc = iusage root, [ ], [ ]
212
+ end
213
+
214
+ def ivalidate(node, missing)
215
+ return missing if node.nil?
216
+ if node.class == Arg
217
+ if (node.required) && (node.value.nil?)
218
+ missing << node.name
219
+ end
220
+ ivalidate node.next_node, missing
221
+ elsif node.is_a? Command
222
+ if node.required? && (not node.full?)
223
+ missing << node.name
224
+ end
225
+ end
226
+ missing
227
+ end
228
+
229
+ def validate
230
+ ivalidate root, [ ]
231
+ end
232
+
233
+ def add_errline(str, error)
234
+ if str
235
+ str + "\n" + error
226
236
  else
227
- line
237
+ error
228
238
  end
229
239
  end
230
240
 
231
- def parse(args)
232
- args.each { |arg|
233
- name, value = parse_line(arg)
234
- set(name, value)
241
+ def parse(args, obj = nil)
242
+ result = nil
243
+ rest = [ ]
244
+ @target = obj
245
+ args.each_with_index { |arg, index|
246
+ name, value = Util.parse_line(arg)
247
+ if value.nil?
248
+ value = name
249
+ error, finished = setvalue(value)
250
+ else
251
+ error, finished = set(name, value)
252
+ end
253
+
254
+ if error
255
+ result = add_errline(result, error)
256
+ finished = :finished
257
+ end
258
+ if finished
259
+ rest = args[index...args.length]
260
+ break
261
+ end
235
262
  }
263
+ missing = validate
264
+ if ! missing.empty?
265
+ result = add_errline(result, "missing args:" + missing.to_s)
266
+ end
267
+ return result, rest
236
268
  end
237
-
238
269
  end