Class: RequestLogAnalyzer::Database

Inherits:
Object
  • Object
show all
Includes:
Connection
Defined in:
lib/request_log_analyzer/database.rb

Defined Under Namespace

Modules: Connection Classes: Base, Request, Source, Warning

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Connection

#connect, #connection, #disconnect, from_string

Constructor Details

#initialize(connection_identifier = nil) ⇒ Database

Returns a new instance of Database.



15
16
17
18
19
# File 'lib/request_log_analyzer/database.rb', line 15

def initialize(connection_identifier = nil)
  @line_classes = []
  RequestLogAnalyzer::Database::Base.database = self
  connect(connection_identifier)
end

Instance Attribute Details

#file_formatObject

Returns the value of attribute file_format.



12
13
14
# File 'lib/request_log_analyzer/database.rb', line 12

def file_format
  @file_format
end

#line_classesObject (readonly)

Returns the value of attribute line_classes.



13
14
15
# File 'lib/request_log_analyzer/database.rb', line 13

def line_classes
  @line_classes
end

Class Method Details

.const_missing(const) ⇒ Object

:nodoc:



6
7
8
# File 'lib/request_log_analyzer/database.rb', line 6

def self.const_missing(const) # :nodoc:
  RequestLogAnalyzer::load_default_class_file(self, const)
end

Instance Method Details

#create_database_schema!Object

Creates the database schema and related ActiveRecord::Base subclasses that correspond to the file format definition. These ORM classes will later be used to create records in the database.



75
76
77
# File 'lib/request_log_analyzer/database.rb', line 75

def create_database_schema!
  fileformat_classes.each { |klass| klass.create_table! }
end

#default_classesObject



27
28
29
# File 'lib/request_log_analyzer/database.rb', line 27

def default_classes
  [RequestLogAnalyzer::Database::Request, RequestLogAnalyzer::Database::Source, RequestLogAnalyzer::Database::Warning]
end

#drop_database_schema!Object

Drops the table of all the ORM classes, and unregisters the classes



80
81
82
83
# File 'lib/request_log_analyzer/database.rb', line 80

def drop_database_schema!
  file_format ? fileformat_classes.map(&:drop_table!) : orm_classes.map(&:drop_table!)
  remove_orm_classes!
end

#fileformat_classesObject



67
68
69
70
71
# File 'lib/request_log_analyzer/database.rb', line 67

def fileformat_classes
  raise "No file_format provided!" unless file_format
  line_classes    = file_format.line_definitions.map { |(name, definition)| load_activerecord_class(definition) }
  return default_classes + line_classes
end

#get_class(line_type) ⇒ Object

Returns the ORM class for the provided line type



22
23
24
25
# File 'lib/request_log_analyzer/database.rb', line 22

def get_class(line_type)
  line_type = line_type.name if line_type.respond_to?(:name)
  Object.const_get("#{line_type}_line".camelize)
end

#load_activerecord_class(linedefinition_or_table) ⇒ Object

Loads an ActiveRecord-based class that correspond to the given parameter, which can either be a table name or a LineDefinition instance.



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/request_log_analyzer/database.rb', line 50

def load_activerecord_class(linedefinition_or_table)
  
  case linedefinition_or_table
  when String, Symbol
    klass_name = linedefinition_or_table.to_s.singularize.camelize
    klass      = RequestLogAnalyzer::Database::Base.subclass_from_table(linedefinition_or_table)
  when RequestLogAnalyzer::LineDefinition
    klass_name = "#{linedefinition_or_table.name}_line".camelize
    klass      = RequestLogAnalyzer::Database::Base.subclass_from_line_definition(linedefinition_or_table)
  end
  
  Object.const_set(klass_name, klass)
  klass = Object.const_get(klass_name)
  @line_classes << klass
  return klass
end

#load_database_schema!Object

Loads the ORM classes by inspecting the tables in the current database



32
33
34
35
36
37
38
39
40
41
# File 'lib/request_log_analyzer/database.rb', line 32

def load_database_schema!
  connection.tables.map do |table|
    case table.to_sym
    when :warnings then RequestLogAnalyzer::Database::Warning
    when :sources  then RequestLogAnalyzer::Database::Source
    when :requests then RequestLogAnalyzer::Database::Request
    else load_activerecord_class(table)
    end
  end
end

#orm_classesObject

Returns an array of all the ActiveRecord-bases ORM classes for this database



44
45
46
# File 'lib/request_log_analyzer/database.rb', line 44

def orm_classes
  default_classes + line_classes
end

#register_default_orm_classes!Object

Registers the default ORM classes in the default namespace



86
87
88
89
90
# File 'lib/request_log_analyzer/database.rb', line 86

def register_default_orm_classes!
  Object.const_set('Request', RequestLogAnalyzer::Database::Request)
  Object.const_set('Source',  RequestLogAnalyzer::Database::Source)
  Object.const_set('Warning', RequestLogAnalyzer::Database::Warning)
end

#remove_orm_classes!Object

Unregisters every ORM class constant



93
94
95
96
97
98
99
100
# File 'lib/request_log_analyzer/database.rb', line 93

def remove_orm_classes!
  orm_classes.each do |klass|
    if klass.respond_to?(:name) && !klass.name.blank?
      klass_name = klass.name.split('::').last
      Object.send(:remove_const, klass_name) if Object.const_defined?(klass_name)
    end
  end
end