Class: MetadataType

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
lib/metadata/metadata_type.rb

Constant Summary collapse

DATATYPES =
{
  :string => "string",
  :text => "text",
  :date => "date",
  :datetime => "datetime",
  :number => "number",
  :boolean => "boolean",
  :array => 'array'
}

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.defaultObject



21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/metadata/metadata_type.rb', line 21

def self.default
  self.new({
    :tag => :sample,
    :name => "Sample",
    :models => [:any],
    :mandatory => false,
    :multiple => false,
    :default => 'default',
    :datatype => "string",
    :format => nil,
    :values => nil
  })
end

.drop_cache(scope = nil) ⇒ Object



104
105
106
107
108
# File 'lib/metadata/metadata_type.rb', line 104

def self.drop_cache(scope=nil)
  Rails.cache.delete("metadata_scheme_#{@@metadata_scope}#{scope}_data")
  Rails.cache.delete("metadata_scheme_#{@@metadata_scope}#{scope}_types")
  Rails.cache.delete("metadata_scheme_#{@@metadata_scope}#{scope}_modeltypes")
end

.model_types(model, scope = nil) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/metadata/metadata_type.rb', line 86

def self.model_types(model, scope=nil)
  types = Rails.cache.fetch("metadata_scheme_#{@@metadata_scope}#{scope}_modeltypes", :expires_in => 60.minutes) do
     res = { :any => [] }
     self.scheme(scope).each do |tag, type|
       type.models.each do |model| 
    	   res[model] = [] if res[model].blank?
    	   res[model] << tag
   	   end if type.models
   	 end
   	 res
  end
  types[model] ? (types[model] | types[:any]).uniq : types[:any]
end

.scheme(scope = nil) ⇒ Object



76
77
78
79
80
81
82
83
84
# File 'lib/metadata/metadata_type.rb', line 76

def self.scheme(scope=nil)
  Rails.cache.fetch("metadata_scheme_#{@@metadata_scope}#{scope}_types", :expires_in => 60.minutes) do
    res = {}
    self.scheme_data(scope).each do |type|
      res[type.tag] = type
    end
    res
  end
end

.scheme_data(scope = nil) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/metadata/metadata_type.rb', line 63

def self.scheme_data(scope=nil)
  Rails.cache.fetch("metadata_scheme_#{@@metadata_scope}#{scope}_data", :expires_in => 60.minutes) do
  uncached do
      scheme_data = scope.blank? ? self.all : self.where(@@metadata_scope => scope).all
      if scheme_data.count > 0
        scheme_data
      else
        []
      end
    end
end
end

.type(name, scope = nil) ⇒ Object



100
101
102
# File 'lib/metadata/metadata_type.rb', line 100

def self.type(name, scope=nil)
  self.scheme(scope)[name]
end

Instance Method Details

#defaultObject



59
60
61
# File 'lib/metadata/metadata_type.rb', line 59

def default
  type_cast(attributes['default'])
end

#type_cast(value) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/metadata/metadata_type.rb', line 35

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) ⇒ Object



54
55
56
57
# File 'lib/metadata/metadata_type.rb', line 54

def values= value
  value =  value.invert.to_a if value.is_a?(Hash)
  super
end