class Nomad::Stanza::Serializer

Public Class Methods

build_proc(obj, key, id = nil) click to toggle source
# File lib/nomad/stanza/serializer.rb, line 13
def build_proc(obj, key, id = nil)
  proc do
    add *[key, id].compact do
      obj.class.schema.each do |key|
        k = key.name
        v = obj.attributes[k]
        if k == :id or v.nil?
          next
        elsif v.is_a? Nomad::Stanza::Base
          if v.class.has_attribute?(:id)
            instance_eval &build_proc(v, k, v.id)
          else
            instance_eval &build_proc(v, k)
          end
        elsif v.is_a? Array
          member = obj.class.schema.key(k).type.type.member
          if member.is_a? Class and member.ancestors.include? Nomad::Stanza::Base
            v.each do |i|
              if i.class.has_attribute?(:id)
                instance_eval &build_proc(i, k, i.id)
              else
                instance_eval &build_proc(i, k)
              end
            end
          else
            add k, v
          end
        else
          add k, v
        end
      end
    end
  end
end
serialize(obj, indent: 2) click to toggle source
# File lib/nomad/stanza/serializer.rb, line 5
def serialize(obj, indent: 2)
  raise ArgumentError, 'Nomad::Stanza::Job is required.' unless obj.is_a? Nomad::Stanza::Job

  builder = Hydrochlorb.build do
    instance_eval &build_proc(obj, 'job', obj.id)
  end.to_hcl(indent: indent)
end