class ActiveRecordYAMLSerializer

Public Class Methods

new(obj, params) click to toggle source
# File lib/active_record_helpers.rb, line 7
def initialize(obj, params)
  @obj = obj
  @params = params.symbolize_keys!
  @contents = ''
  @indent_level = 0
end

Public Instance Methods

get_yaml() click to toggle source
# File lib/active_record_helpers.rb, line 32
def get_yaml
  YAML::load( @contents )
end
save_as(file_name) click to toggle source
# File lib/active_record_helpers.rb, line 36
def save_as(file_name)
  File.open(file_name, 'w') do |f|
    f.write @contents
  end
end
serialize() click to toggle source
# File lib/active_record_helpers.rb, line 14
def serialize
  @contents = ''
  @contents += serialize_root_values(@params)

  if @obj.is_a? ActiveRecord::Base
    @contents += serialize_record(@obj, false, @params) #asnotarray
  elsif @obj.is_a? Array
    @contents += "items:\n"
    @obj.each do |item|
      reset_indent
      indent
      @contents += serialize_record(item, true, @params)  #asarray
    end
  end


end

Private Instance Methods

indent() click to toggle source
# File lib/active_record_helpers.rb, line 44
def indent
  @indent_level += 1
end
render_indent(first_line) click to toggle source
# File lib/active_record_helpers.rb, line 124
def render_indent(first_line)
  r = ''
  #r += render_indent_first_line(@indent_level) if first_line
  r += '  ' * @indent_level unless first_line
end
render_indent_first_line(as_array) click to toggle source
# File lib/active_record_helpers.rb, line 111
def render_indent_first_line(as_array)
  r = ''
  if @indent_level != 0
    r = '  ' * (@indent_level - 1)
    if (as_array)
      r += '- '
    else
      r += '  '
    end
  end
  r
end
reset_indent(level = 0) click to toggle source
# File lib/active_record_helpers.rb, line 52
def reset_indent(level = 0)
  @indent_level = level
end
serialize_belongs_tos(rec, first_line, params) click to toggle source
# File lib/active_record_helpers.rb, line 130
def serialize_belongs_tos(rec, first_line, params)
  r = ''
  if params[:include_all_belongs_to] == true
    rec.class.reflect_on_all_associations(:belongs_to).collect do |a|
      r += render_indent(first_line)
      r += a.name.to_s + ":\n"
      indent
      r += serialize_record(rec.send(a.name), false,
        {:include_all_belongs_to => params[:include_all_belongs_to]}) if rec.send(a.name)
      unindent
    end
  else
    params[:included_belongs_to] ||= {}
    params[:included_belongs_to].each_pair do |k,v|
      v.symbolize_keys!
      serialization_params = v
      type = v[:type].to_sym || :fields
      master_rec = rec.send(k)
      if type == :fields
        v[:fields].each do |f|
          r += render_indent(first_line)
          val = master_rec ? master_rec.send(f) : nil
          r += serialize_key_value(k.to_s + '_' + f.to_s, val)
          first_line = false
        end
      elsif type == :record
        r += render_indent(first_line)
        r += k.to_s + ":\n"
        indent
        r += serialize_record(master_rec, false, v[:params]) if master_rec #as_not_array
        unindent
      end
    end
  end
  r
end
serialize_has_many(hm, params) click to toggle source
# File lib/active_record_helpers.rb, line 191
def serialize_has_many(hm, params)
  original_indent = @indent_level
  r = ''
  if hm.count == 0
    r += " []\n"
  else
    r += "\n"
    hm.each do |det|
      reset_indent(original_indent)
      indent
      r += serialize_record(det, true, params || {}) #asarray
    end
  end
  r
end
serialize_has_manys(rec, first_line, params) click to toggle source
# File lib/active_record_helpers.rb, line 167
def serialize_has_manys(rec, first_line, params)
  r = ''
  params[:included_has_many] ||= {}
  params[:included_has_many].each_pair do |k,v|
    r += render_indent(first_line)
    r += k.to_s + ":"
    r += serialize_has_many(rec.send(k), v)
    first_line = false
  end
  r
end
serialize_key_value(k, v) click to toggle source
# File lib/active_record_helpers.rb, line 84
def serialize_key_value(k, v)
  k.to_s + ': ' + serialize_value(v)
end
serialize_methods(rec, first_line, params) click to toggle source
# File lib/active_record_helpers.rb, line 179
def serialize_methods(rec, first_line, params)
  r = ''
  params[:included_methods] ||= {}
  params[:included_methods].each do |v|
    r += render_indent(first_line)
    val = rec.send(v)
    r += serialize_key_value(v, val)
    first_line = false
  end
  r
end
serialize_record(rec, as_array, params = {}) click to toggle source
# File lib/active_record_helpers.rb, line 63
def serialize_record(rec, as_array, params = {})
  r = ''
  first_line = true
  to_serialize = (rec.is_a? ActiveRecord::Base) ? rec.attributes : rec

  to_serialize.each_pair do |k, v|
    r += render_indent_first_line(as_array) if first_line
    r += '  ' * @indent_level unless first_line
    r += serialize_key_value(k,v)
    first_line = false
  end

  if rec.is_a? ActiveRecord::Base
    r += serialize_belongs_tos(rec, first_line, params)
    r += serialize_has_manys(rec, first_line, params)
    r += serialize_methods(rec, first_line, params)
  end

  r
end
serialize_root_values(params) click to toggle source
# File lib/active_record_helpers.rb, line 56
def serialize_root_values(params)
  r = ''
  params[:root_values] ||= {}
  params[:root_values].each_pair { |k,v| r += serialize_key_value(k,v) }
  r
end
serialize_string(s) click to toggle source
# File lib/active_record_helpers.rb, line 96
def serialize_string(s)
  s.strip!
  r = ''
  if s.lines.count > 1
    r += "|-\n"
    s.lines.each do |l|
      r += '  ' * (@indent_level + 1)
      r += l
    end
  else
    r += '"' + s.to_s.gsub('"', '\"') + '"'
  end
  r + "\n"
end
serialize_value(v) click to toggle source
# File lib/active_record_helpers.rb, line 88
def serialize_value(v)
  if v.is_a? String
    serialize_string(v)
  else
    v.to_s + "\n"
  end
end
unindent() click to toggle source
# File lib/active_record_helpers.rb, line 48
def unindent
  @indent_level -= 1
end