Class: Cri::ArgumentList
- Inherits:
-
Object
show all
- Includes:
- Enumerable
- Defined in:
- lib/cri/argument_list.rb
Overview
A list of arguments, which can be indexed using either a number or a symbol.
Defined Under Namespace
Classes: ArgumentCountMismatchError
Instance Method Summary
collapse
Constructor Details
#initialize(raw_arguments, explicitly_no_params, param_defns) ⇒ ArgumentList
Returns a new instance of ArgumentList.
15
16
17
18
19
20
21
|
# File 'lib/cri/argument_list.rb', line 15
def initialize(raw_arguments, explicitly_no_params, param_defns)
@raw_arguments = raw_arguments
@explicitly_no_params = explicitly_no_params
@param_defns = param_defns
load
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(sym, *args, &block) ⇒ Object
41
42
43
44
45
46
47
|
# File 'lib/cri/argument_list.rb', line 41
def method_missing(sym, *args, &block)
if @arguments_array.respond_to?(sym)
@arguments_array.send(sym, *args, &block)
else
super
end
end
|
Instance Method Details
#[](key) ⇒ Object
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/cri/argument_list.rb', line 23
def [](key)
case key
when Symbol
@arguments_hash[key]
when Integer
@arguments_array[key]
else
raise ArgumentError, "argument lists can be indexed using a Symbol or an Integer, but not a #{key.class}"
end
end
|
#each ⇒ Object
34
35
36
37
38
39
|
# File 'lib/cri/argument_list.rb', line 34
def each
return to_enum(__method__) unless block_given?
@arguments_array.each { |e| yield(e) }
self
end
|
#load ⇒ Object
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/cri/argument_list.rb', line 53
def load
@arguments_array = []
@arguments_hash = {}
arguments_array = @raw_arguments.reject { |a| a == '--' }.freeze
if !@explicitly_no_params && @param_defns.empty?
@arguments_array = arguments_array
return
end
if arguments_array.size != @param_defns.size
raise ArgumentCountMismatchError.new(@param_defns.size, arguments_array.size)
end
arguments_array.zip(@param_defns).each do |(arg, param_defn)|
arg = param_defn.transform ? param_defn.transform.call(arg) : arg
@arguments_hash[param_defn.name.to_sym] = arg
@arguments_array << arg
end
end
|
#respond_to_missing?(sym, include_private = false) ⇒ Boolean
49
50
51
|
# File 'lib/cri/argument_list.rb', line 49
def respond_to_missing?(sym, include_private = false)
@arguments_array.respond_to?(sym) || super
end
|