module Class2::Util

Public Class Methods

as_json(klass, *argz) click to toggle source
# File lib/class2.rb, line 365
def self.as_json(klass, *argz)
  hash = {}
  klass.to_h.each do |k, v|
    if v.is_a?(Hash)
      v = as_json(v, *argz)
    elsif v.is_a?(Array)
      v = v.map { |e| as_json(e, *argz) }
    elsif v.respond_to?(:as_json)
      v = v.as_json
    end

    hash[k.to_s.public_send(*argz)] = v
  end

  hash
end
convert_attributes(klass) { |old_name| ... } click to toggle source
# File lib/class2.rb, line 382
    def self.convert_attributes(klass)
      klass.class_eval do
        new_nested = []
        new_attributes = []

        __attributes.map do |old_name|
          new_name = yield(old_name.to_s)
          alias_method new_name, old_name
          alias_method "#{new_name}=", "#{old_name}="

          new_attributes << new_name.to_sym
          new_nested << new_attributes.last if __nested_attributes.include?(old_name)
        end

        class_eval <<-CODE
          def self.__attributes
            #{new_attributes}.freeze
          end

          # We need both styles nere to support proper assignment of nested attributes... :(
          def self.__nested_attributes
            #{new_nested + __nested_attributes}.freeze
          end
        CODE
      end
    end