Module: Sfp::Helper
- Defined in:
- lib/sfp/Sfplib.rb
Class Method Summary collapse
- .deep_clone(value) ⇒ Object
- .expand_object(obj, root) ⇒ Object
- .to_json(sfp) ⇒ Object
- .to_pretty_json(sfp) ⇒ Object
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.(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 |