Class: Sfp::SasTranslator::VariableCollector
- Defined in:
- lib/sfp/sas_translator.rb
Overview
collecting all variables and put them into @bucket
Instance Method Summary collapse
- #add_value(type, value) ⇒ Object
- #get_type(name, value, parent) ⇒ Object
-
#initialize(main) ⇒ VariableCollector
constructor
A new instance of VariableCollector.
- #is_final(value) ⇒ Object
- #isa?(value) ⇒ Boolean
- #null_value(isa) ⇒ Object
- #visit(name, value, parent) ⇒ Object
Constructor Details
#initialize(main) ⇒ VariableCollector
Returns a new instance of VariableCollector.
1577 1578 1579 1580 |
# File 'lib/sfp/sas_translator.rb', line 1577 def initialize(main) super(main) @init = main.root['initial'] end |
Instance Method Details
#add_value(type, value) ⇒ Object
1637 1638 1639 1640 1641 1642 1643 |
# File 'lib/sfp/sas_translator.rb', line 1637 def add_value(type, value) if not @types.has_key?(type) @types[type] = Array.new @types[type] << Sfp::SasTranslator.null_of(type) if @types[type].length <= 0 end @types[type] << value if not (value.is_a?(Hash) and value.isnull) end |
#get_type(name, value, parent) ⇒ Object
1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 |
# File 'lib/sfp/sas_translator.rb', line 1614 def get_type(name, value, parent) return value.type if value.is_a?(Sfp::Undefined) or value.is_a?(Sfp::Unknown) type = nil if parent.has_key?('_isa') isa = @main.root.at?(parent['_isa']) if not isa.nil? type = isa.type?(name) return type if not type.nil? end end type = self.isa?(value) return "(#{value['_isa']})" if value.is_a?(Hash) and value.isset and value.has_key?('_isa') return nil if type == nil return type if type.is_a?(String) and type.isref parent_class = @root.at?( @vars[parent.ref].type ) return parent_class[name]['_isa'] end |
#is_final(value) ⇒ Object
1653 1654 1655 1656 |
# File 'lib/sfp/sas_translator.rb', line 1653 def is_final(value) return true if value.is_a?(Hash) and not value.isnull and not value.isset return false end |
#isa?(value) ⇒ Boolean
1645 1646 1647 1648 1649 1650 1651 |
# File 'lib/sfp/sas_translator.rb', line 1645 def isa?(value) return '$.Boolean' if value.is_a?(TrueClass) or value.is_a?(FalseClass) return '$.Integer' if value.is_a?(Numeric) return '$.String' if value.is_a?(String) and not value.isref return value['_isa'] if value.is_a?(Hash) and value.isobject return nil end |
#null_value(isa) ⇒ Object
1610 1611 1612 |
# File 'lib/sfp/sas_translator.rb', line 1610 def null_value(isa) return {'_context' => 'null', '_isa' => isa} end |
#visit(name, value, parent) ⇒ Object
1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 |
# File 'lib/sfp/sas_translator.rb', line 1582 def visit(name, value, parent) return false if name[0,1] == '_' return false if (value.is_a?(Hash) and not (value.isobject or value.isnull or value.isset)) # or value.is_a?(Array) var_name = parent.ref.push(name) isfinal = self.is_final(value) isref = (value.is_a?(String) and value.isref) isset = false value = @init.at?(value) if isref type = (isfinal ? self.isa?(value) : self.get_type(name, value, parent)) if type == nil raise Exception, "Unrecognized type of variable: #{var_name}:#{value.class}" else value = null_value(type) if value == nil isset = true if type[0,1] == '(' var = Variable.new(var_name, type, -1, value, nil, isfinal) var.isset = isset @vars[var.name] = var if isfinal and value.is_a?(Hash) value['_classes'].each { |c| add_value(c, value) } elsif not isref add_value(type, value) end end return true end |