lib/request_log_analyzer/database/base.rb in request-log-analyzer-1.3.7 vs lib/request_log_analyzer/database/base.rb in request-log-analyzer-1.4.0

- old
+ new

@@ -1,7 +1,7 @@ class RequestLogAnalyzer::Database::Base < ActiveRecord::Base - + self.abstract_class = true def <=>(other) if (source_id.nil? && other.source_id.nil?) || (source_comparison = source_id <=> other.source_id) == 0 lineno <=> other.lineno @@ -11,24 +11,24 @@ end def line_type self.class.name.underscore.gsub(/_line$/, '').to_sym end - + class_inheritable_accessor :line_definition cattr_accessor :database def self.subclass_from_line_definition(definition) klass = Class.new(RequestLogAnalyzer::Database::Base) klass.set_table_name("#{definition.name}_lines") - + klass.line_definition = definition - + # Set relations with requests and sources table klass.belongs_to :request klass.belongs_to :source - + # Serialize complex fields into the database definition.captures.select { |c| c.has_key?(:provides) }.each do |capture| klass.send(:serialize, capture[:name], Hash) end @@ -46,52 +46,52 @@ if klass.column_names.include?('request_id') klass.belongs_to :request RequestLogAnalyzer::Database::Request.has_many table.to_sym end - + if klass.column_names.include?('source_id') klass.belongs_to :source RequestLogAnalyzer::Database::Source.has_many table.to_sym end - + return klass end - + def self.drop_table! database.connection.remove_index(self.table_name, [:source_id]) rescue nil database.connection.remove_index(self.table_name, [:request_id]) rescue nil database.connection.drop_table(self.table_name) if database.connection.table_exists?(self.table_name) end - + def self.create_table! raise "No line_definition available to base table schema on!" unless self.line_definition - + unless table_exists? database.connection.create_table(table_name.to_sym) do |t| - + # Default fields t.column :request_id, :integer t.column :source_id, :integer t.column :lineno, :integer - + line_definition.captures.each do |capture| # Add a field for every capture t.column(capture[:name], column_type(capture[:type])) # If the capture provides other field as well, create columns for them, too capture[:provides].each { |field, field_type| t.column(field, column_type(field_type)) } if capture[:provides].kind_of?(Hash) end end end - + # Add indices to table for more speedy querying database.connection.add_index(self.table_name.to_sym, [:request_id]) # rescue database.connection.add_index(self.table_name.to_sym, [:source_id]) # rescue end - - + + # Function to determine the column type for a field # TODO: make more robust / include in file-format definition def self.column_type(type_indicator) case type_indicator when :eval; :text @@ -108,8 +108,8 @@ when :timestamp; :datetime when :datetime; :datetime when :date; :date else :string end - end - + end + end \ No newline at end of file