module Sfp::Helper

Public Class Methods

deep_clone(value) click to toggle source
# File lib/sfp/Sfplib.rb, line 114
def self.deep_clone(value)
        if value.is_a?(Hash)
                result = value.clone
                value.each { |k,v|
                        if k != '_parent'
                                result[k] = deep_clone(v)
                                result[k]['_parent'] = result if result[k].is_a?(Hash) and result[k].has_key?('_parent')
                        end
                }
                result
        elsif value.is_a?(Array)
                result = Array.new
                value.each { |v| result << deep_clone(v) }
                result
        else
                value
        end
end
expand_object(obj, root) click to toggle source
# File lib/sfp/Sfplib.rb, line 145
def self.expand_object(obj, root)
        return false if obj == nil or root == nil or
                        not obj.has_key?('_isa') or obj['_isa'] == nil
        objclass = root.at?(obj['_isa'])
        if objclass.nil? or objclass.is_a?(Sfp::Unknown) or objclass.is_a?(Sfp::Undefined)
                raise Exception, "Schema #{obj['_isa']} of object #{obj['_self']} is not found!"
        end
        obj.inherits( objclass )
        obj['_classes'] = (objclass.has_key?('_super') ? objclass['_super'].clone : Array.new)
        obj['_classes'] << obj['_isa']

        if objclass['_finals'].is_a?(Array)
                if obj['_finals'].is_a?(Array)
                        obj['_finals'].concat(objclass['_finals'])
                else
                        obj['_finals'] = objclass['_finals']
                end
        end

        return true
end
to_json(sfp) click to toggle source
# File lib/sfp/Sfplib.rb, line 133
def self.to_json(sfp)
        root = Sfp::Helper.deep_clone(sfp)
        root.accept(Sfp::Visitor::ParentEliminator.new)
        return JSON.generate(root)
end
to_pretty_json(sfp) click to toggle source
# File lib/sfp/Sfplib.rb, line 139
def self.to_pretty_json(sfp)
        root = Sfp::Helper.deep_clone(sfp)
        root.accept(Sfp::Visitor::ParentEliminator.new)
        return JSON.pretty_generate(root)
end