Class: Sfp::SasTranslator::ValueCollector
- Inherits:
-
Object
- Object
- Sfp::SasTranslator::ValueCollector
- Defined in:
- lib/sfp/sas_translator.rb
Overview
Collects all values (primitive or non-primitive)
Instance Method Summary collapse
- #get_type(value) ⇒ Object
-
#initialize(sas) ⇒ ValueCollector
constructor
A new instance of ValueCollector.
- #visit(name, value, obj) ⇒ Object
Constructor Details
#initialize(sas) ⇒ ValueCollector
Returns a new instance of ValueCollector.
1649 1650 1651 1652 |
# File 'lib/sfp/sas_translator.rb', line 1649 def initialize(sas) @bucket = sas.types @sas = sas end |
Instance Method Details
#get_type(value) ⇒ Object
1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 |
# File 'lib/sfp/sas_translator.rb', line 1689 def get_type(value) if value.is_a?(String) and not value.isref '$.String' elsif value.is_a?(Numeric) '$.Integer' elsif value.is_a?(TrueClass) or value.is_a?(FalseClass) '$.Boolean' else nil end end |
#visit(name, value, obj) ⇒ Object
1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 |
# File 'lib/sfp/sas_translator.rb', line 1654 def visit(name, value, obj) return true if name[0,1] == '_' and name != '_value' type = get_type(value) if type != nil @bucket[type] << value elsif value.is_a?(Hash) if value.isobject value['_classes'].each { |c| @bucket[c] << value } elsif value.isset raise TranslationException, 'not implemented -- set: ' + value['_isa'] end elsif value.is_a?(Array) if value.length > 0 type = get_type(value[0]) if type != nil type = "(#{type})" # an array #raise Exception, "type not found: #{type}" if not @bucket.has_key?(type) @bucket[type] = [] if not @bucket.has_key?(type) @bucket["#{type}"] << value elsif value[0].is_a?(String) and value[0].isref val = @sas.root['initial'].at?(value[0]) return true if val == nil type = get_type(val) if type != nil @bucket["(#{type})"] << value elsif val.is_a?(Hash) and val.isobject val['_classes'].each { |c| @bucket["(#{c})"] << value if @bucket.has_key?("(#{c})") } end end end else end return true end |