Class: Dataset::Record::Meta

Inherits:
Object
  • Object
show all
Defined in:
lib/dataset/record/meta.rb

Overview

A mechanism to cache information about an ActiveRecord class to speed things up a bit for insertions, finds, and method generation.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(record_class) ⇒ Meta

Returns a new instance of Meta.



13
14
15
16
17
18
# File 'lib/dataset/record/meta.rb', line 13

def initialize(record_class)
  @record_class     = record_class
  @class_name       = record_class.name
  @table_name       = record_class.table_name
  @columns          = record_class.columns
end

Instance Attribute Details

#class_nameObject (readonly)

:nodoc:



7
8
9
# File 'lib/dataset/record/meta.rb', line 7

def class_name
  @class_name
end

#columnsObject (readonly)

:nodoc:



7
8
9
# File 'lib/dataset/record/meta.rb', line 7

def columns
  @columns
end

#record_classObject (readonly)

:nodoc:



7
8
9
# File 'lib/dataset/record/meta.rb', line 7

def record_class
  @record_class
end

#table_nameObject (readonly)

:nodoc:



7
8
9
# File 'lib/dataset/record/meta.rb', line 7

def table_name
  @table_name
end

Instance Method Details

#descendantsObject



52
53
54
55
56
57
58
# File 'lib/dataset/record/meta.rb', line 52

def descendants
  if record_class.respond_to?(:self_and_descendents_from_active_record)
    record_class.self_and_descendents_from_active_record
  else
    record_class.self_and_descendants_from_active_record
  end
end

#finder_name(klass) ⇒ Object



60
61
62
# File 'lib/dataset/record/meta.rb', line 60

def finder_name(klass)
  klass.name.underscore.gsub('/', '_').sub(/^(\w)_/, '\1').gsub(/_(\w)_/, '_\1')
end

#id_cache_keyObject



20
21
22
# File 'lib/dataset/record/meta.rb', line 20

def id_cache_key
  @id_cache_key ||= table_name
end

#id_finder_namesObject



37
38
39
40
41
42
# File 'lib/dataset/record/meta.rb', line 37

def id_finder_names
  @id_finder_names ||= begin
    names = descendants.collect {|c| finder_name c}
    names.uniq.collect {|n| "#{n}_id".to_sym}
  end
end

#inheriting_record?Boolean

Returns:

  • (Boolean)


24
25
26
# File 'lib/dataset/record/meta.rb', line 24

def inheriting_record?
  !record_class.descends_from_active_record?
end

#model_finder_namesObject



44
45
46
# File 'lib/dataset/record/meta.rb', line 44

def model_finder_names
  @record_finder_names ||= descendants.collect {|c| finder_name(c).pluralize.to_sym}.uniq
end

#timestamp_columnsObject



28
29
30
31
32
33
34
35
# File 'lib/dataset/record/meta.rb', line 28

def timestamp_columns
  @timestamp_columns ||= begin
    timestamps = %w(created_at created_on updated_at updated_on)
    columns.select do |column|
      timestamps.include?(column.name)
    end
  end
end

#to_sObject



48
49
50
# File 'lib/dataset/record/meta.rb', line 48

def to_s
  "#<RecordMeta: #{table_name}>"
end