Class: Contraction::Parser::TypedLine

Inherits:
Object
  • Object
show all
Defined in:
lib/parser/lines.rb

Direct Known Subclasses

ParamLine, ReturnLine

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args = {}) ⇒ TypedLine

Returns a new instance of TypedLine.



10
11
12
13
14
15
# File 'lib/parser/lines.rb', line 10

def initialize(args={})
  @type     = args[:type]
  @contract = args[:contract]
  @message  = args[:message]
  parse_type
end

Instance Attribute Details

#contractObject

Returns the value of attribute contract.



7
8
9
# File 'lib/parser/lines.rb', line 7

def contract
  @contract
end

#messageObject (readonly)

Returns the value of attribute message.



7
8
9
# File 'lib/parser/lines.rb', line 7

def message
  @message
end

#typeObject (readonly)

Returns the value of attribute type.



7
8
9
# File 'lib/parser/lines.rb', line 7

def type
  @type
end

#typesObject (readonly)

Returns the value of attribute types.



7
8
9
# File 'lib/parser/lines.rb', line 7

def types
  @types
end

Instance Method Details

#contract_message(value = nil, method_name = nil) ⇒ Object



36
37
38
# File 'lib/parser/lines.rb', line 36

def contract_message(value=nil, method_name=nil)
  raise 'Not Implemented'
end

#evaluate_in_context(context, method_name, value) ⇒ Object



31
32
33
34
# File 'lib/parser/lines.rb', line 31

def evaluate_in_context(context, method_name, value)
  return if !contract || contract.to_s.strip == ''
  raise contract_message(value, method_name) unless eval(contract, context)
end

#parse_typeObject



17
18
19
20
21
22
23
# File 'lib/parser/lines.rb', line 17

def parse_type
  parts = type.split(/(\>|\}|\)),/)
  @types = []
  parts.each do |part|
    @types << Type.new(part)
  end
end

#valid?(*value) ⇒ Boolean

Returns:

  • (Boolean)


25
26
27
28
29
# File 'lib/parser/lines.rb', line 25

def valid?(*value)
  @types.each_with_index.all? do |t, i|
    t.check(value[i])
  end
end