class MetadataType

Constants

DATATYPES

Public Class Methods

default() click to toggle source
# File lib/metadata/metadata_type.rb, line 22
def self.default
  self.new({
    :tag => :sample,
    :name => "Sample",
    :models => [:any],
    :mandatory => false,
    :multiple => false,
    :default => 'default',
    :datatype => "string",
    :format => nil,
    :values => nil
  })
end

Public Instance Methods

type_cast(value) click to toggle source
# File lib/metadata/metadata_type.rb, line 36
def type_cast(value)
  return value.delete_if(&:blank?).map {|x| type_cast x } if value.is_a? Array
  return nil if value.nil? && datatype != 'boolean'
  return value unless value.is_a?(String) || value.nil?

  case datatype
  when 'date' 
    ActiveRecord::ConnectionAdapters::Column.string_to_date value
  when 'datetime'
    ActiveRecord::ConnectionAdapters::Column.string_to_time value
  when 'number'
    Integer value
  when 'boolean'
    ActiveRecord::ConnectionAdapters::Column.value_to_boolean value
  else
    value
  end rescue nil
end
values=(value) click to toggle source
Calls superclass method
# File lib/metadata/metadata_type.rb, line 55
def values= value
  value = value.invert.to_a if value.is_a?(Hash)
  super
end

Private Instance Methods

drop_metadata_scheme_cache(scope_column=nil, scope_value=nil) click to toggle source
# File lib/metadata/metadata_type.rb, line 61
def drop_metadata_scheme_cache scope_column=nil, scope_value=nil
  Rails.cache.delete("metadata_scheme_#{scope_column}#{scope_value}_data")
  Rails.cache.delete("metadata_scheme_#{scope_column}#{scope_value}_types")
  Rails.cache.delete("metadata_scheme_#{scope_column}#{scope_value}_modeltypes")
end
refresh_metadata() click to toggle source
# File lib/metadata/metadata_type.rb, line 73
def refresh_metadata
  drop_metadata_scheme_cache
  model_classes = models.include?(:any) ? ObjectSpace.each_object(Class).select {|klass| klass < ActiveRecord::Base } : models.map {|model| Kernel.const_get model }
  scope_columns = []
  model_classes.each do |model|
    model
    scope_columns << model.metadata_scope if model.respond_to? :metadata_scope
  end
  scope_columns.uniq.compact.each do |scope_column|
    drop_metadata_scheme_cache scope_column, send(scope_column)
  end
end
set_correct_values() click to toggle source
# File lib/metadata/metadata_type.rb, line 67
def set_correct_values
              self.models = (models || []).map(&:to_sym).uniq.keep_if {|model| Kernel.const_defined?(model.capitalize) || model == :any }
              self.values = (values || []).uniq
  self.default = type_cast default
end