Module: Sfp::Helper

Defined in:
lib/sfp/Sfplib.rb

Class Method Summary collapse

Class Method Details

.deep_clone(value) ⇒ Object



114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# 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) ⇒ Object



145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# 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) ⇒ Object



133
134
135
136
137
# 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) ⇒ Object



139
140
141
142
143
# 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