class Transmutable::Base

Attributes

model[RW]

Public Class Methods

add_to_transmute(*methods) click to toggle source
# File lib/transmutable/base.rb, line 5
def self.add_to_transmute(*methods)
  define_method :transmute_addons do
    methods
  end
end
new(model) click to toggle source
# File lib/transmutable/base.rb, line 23
def initialize(model)
  @model = model
end
remove_from_transmute(*methods) click to toggle source
# File lib/transmutable/base.rb, line 11
def self.remove_from_transmute(*methods)
  define_method :transmute_skips do
    methods
  end
end
serialize_attrs(*methods) click to toggle source
# File lib/transmutable/base.rb, line 17
def self.serialize_attrs(*methods)
  define_method :default_attrs do
    methods
  end
end

Public Instance Methods

transmute() click to toggle source
# File lib/transmutable/base.rb, line 27
def transmute
  Hash[serialize_methods.map { |attribute| [attribute, model.send(attribute)] }]
end

Private Instance Methods

default_attrs() click to toggle source
# File lib/transmutable/base.rb, line 44
def default_attrs
  # Guard clause for Rails-esque models
  return model.attributes.keys.map(&:to_sym) if model.respond_to? :attributes

  model.instance_variables
    .reject { |var| model.instance_variable_get(var).respond_to? :serialize }
    .map { |var| var.to_s.gsub('@', '').to_sym }
end
serialize_methods() click to toggle source
# File lib/transmutable/base.rb, line 32
def serialize_methods
  default_attrs - transmute_skips + transmute_addons
end
transmute_addons() click to toggle source
# File lib/transmutable/base.rb, line 36
def transmute_addons
  []
end
transmute_skips() click to toggle source
# File lib/transmutable/base.rb, line 40
def transmute_skips
  []
end