Class: Build::Rule::Parameter

Inherits:
Object
  • Object
show all
Defined in:
lib/build/rule.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(direction, name, options = {}, &block) ⇒ Parameter

Returns a new instance of Parameter.



33
34
35
36
37
38
39
40
# File 'lib/build/rule.rb', line 33

def initialize(direction, name, options = {}, &block)
  @direction = direction
  @name = name
  
  @options = options
  
  @dynamic = block_given? ? Proc.new(&block) : nil
end

Instance Attribute Details

#directionObject (readonly)

Returns the value of attribute direction.



42
43
44
# File 'lib/build/rule.rb', line 42

def direction
  @direction
end

#dynamicObject (readonly)

Returns the value of attribute dynamic.



46
47
48
# File 'lib/build/rule.rb', line 46

def dynamic
  @dynamic
end

#nameObject (readonly)

Returns the value of attribute name.



43
44
45
# File 'lib/build/rule.rb', line 43

def name
  @name
end

#optionsObject (readonly)

Returns the value of attribute options.



45
46
47
# File 'lib/build/rule.rb', line 45

def options
  @options
end

Instance Method Details

#applicable?(arguments) ⇒ Boolean

Returns:

  • (Boolean)


74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/build/rule.rb', line 74

def applicable? arguments
  value = arguments.fetch(@name) do
    # Value couldn't be found, if it wasn't optional, this parameter didn't apply:
    return optional?
  end
  
  # If a pattern is provided, we must match it.
  if pattern = @options[:pattern]
    return Array(value).all? {|item| pattern.match(item)}
  end
  
  return true
end

#compute(arguments, scope) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/build/rule.rb', line 88

def compute(arguments, scope)
  if implicit?
    # Can be replaced if supplied:
    arguments[@name] || scope.instance_exec(arguments, &@dynamic) || @options[:default]
  elsif dynamic?
    # Argument is optional:
    scope.instance_exec(arguments[@name], arguments, &@dynamic) || @options[:default]
  elsif arguments.key?(@name)
    arguments[@name]
  else
    @options[:default]
  end
end

#default?Boolean

Do we have a default value for this parameter?

Returns:

  • (Boolean)


61
62
63
# File 'lib/build/rule.rb', line 61

def default?
  @options.key?(:default)
end

#dynamic?Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/build/rule.rb', line 56

def dynamic?
  @dynamic != nil
end

#eql?(other) ⇒ Boolean

TODO fix implementation

Returns:

  • (Boolean)


107
108
109
# File 'lib/build/rule.rb', line 107

def eql? other
  other.kind_of?(self.class) and @direction.eql?(other.direction) and @name.eql?(other.name) and @options.eql?(other.options) # and @dynamic == other.dynamic
end

#hashObject



102
103
104
# File 'lib/build/rule.rb', line 102

def hash
  [self.class, @direction, @name, @options].hash
end

#implicit?Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/build/rule.rb', line 65

def implicit?
  dynamic? and @options[:implicit]
end

#input?Boolean

Returns:

  • (Boolean)


48
49
50
# File 'lib/build/rule.rb', line 48

def input?
  @direction == :input
end

#inspectObject



111
112
113
# File 'lib/build/rule.rb', line 111

def inspect
  "#{direction}:#{@name} (#{options.inspect})"
end

#optional?Boolean

Optional parameters are those that are either defined as optional or implicit.

Returns:

  • (Boolean)


70
71
72
# File 'lib/build/rule.rb', line 70

def optional?
  @options[:optional] || implicit? || default?
end

#output?Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/build/rule.rb', line 52

def output?
  @direction == :output
end