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