module FidoMetadata::Attributes

Public Instance Methods

from_json(hash = {}) click to toggle source
# File lib/fido_metadata/attributes.rb, line 27
def from_json(hash = {})
  instance = new
  hash.each do |k, v|
    method_name = :"#{underscore_name(k)}="
    instance.public_send(method_name, v) if instance.respond_to?(method_name)
  end

  instance
end
json_accessor(name, coercer = nil) click to toggle source
# File lib/fido_metadata/attributes.rb, line 15
def json_accessor(name, coercer = nil)
  underscored_name = underscore_name(name)
  attr_accessor underscored_name

  if coercer
    define_method(:"#{underscored_name}=") do |value|
      coerced_value = coercer.coerce(value)
      instance_variable_set(:"@#{underscored_name}", coerced_value)
    end
  end
end

Private Instance Methods

underscore_name(name) click to toggle source
# File lib/fido_metadata/attributes.rb, line 5
def underscore_name(name)
  name
    .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
    .gsub(/([a-z\d])([A-Z])/, '\1_\2')
    .downcase
    .to_sym
end