Class: MetadataType
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- MetadataType
- 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
- .default ⇒ Object
- .drop_cache(scope = nil) ⇒ Object
- .model_types(model, scope = nil) ⇒ Object
- .scheme(scope = nil) ⇒ Object
- .scheme_data(scope = nil) ⇒ Object
- .type(name, scope = nil) ⇒ Object
Instance Method Summary collapse
Class Method Details
.default ⇒ Object
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
#default ⇒ Object
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 |