class DataStore::Base

Base class will be redefined during configure In order to assign Sequel::Model behaviour to it with the correctly defined (or configured) database connector

Public Instance Methods

after_create() click to toggle source
# File lib/data_store/base.rb, line 15
def after_create
  drop_tables!
  create_tables!
end
before_destroy() click to toggle source
# File lib/data_store/base.rb, line 20
def before_destroy
  drop_tables!
end
before_save() click to toggle source

Set the default values with the globally defined values

* :compression_schema
* :frequency
* :maximum_datapoints
* :data_type

See {Configuration}

# File lib/data_store/base.rb, line 11
def before_save
  set_default_values  
end
compression_schema() click to toggle source

Convert serialized compression schema as a string back into the array object itself. For example: “(5,4,3)” => [5,4,3]

# File lib/data_store/base.rb, line 26
def compression_schema
 value = self.values[:compression_schema]
 if value.nil?
   value = []
 else
   value = value.gsub(/\[|\]|\(|\)/,'').split(',').map(&:to_i) unless value.is_a?(Array)
 end
 value
end
table_names() click to toggle source
# File lib/data_store/base.rb, line 36
def table_names
  names  = [table_name]
  factor = 1
  compression_schema.each do |compression|
    factor = (factor * compression)
    names << (table_name.to_s + '_' + factor.to_s).to_sym
  end
  names
end
time_borders() click to toggle source
# File lib/data_store/base.rb, line 46
def time_borders
  width = time_width
  borders = [width]
  compression_schema.each do |compression|
    width =  width * compression
    borders << width
  end
  borders
end
time_width() click to toggle source
# File lib/data_store/base.rb, line 56
def time_width
  frequency * maximum_datapoints
end

Private Instance Methods

create_tables!() click to toggle source

Create the database tables which are used for storing the datapoints

# File lib/data_store/base.rb, line 74
def create_tables!
  migrate(:up)
end
default_values() click to toggle source
# File lib/data_store/base.rb, line 62
def default_values
  ['compression_schema', 'frequency', 'maximum_datapoints', 'data_type']
end
drop_tables!() click to toggle source

Drop the database tables which are used for storing the datapoints

# File lib/data_store/base.rb, line 79
def drop_tables!
  migrate(:down)
end
migrate(direction = :up) click to toggle source
# File lib/data_store/base.rb, line 83
def migrate(direction = :up)
  # Establish new connection to prevent mix up with associated db connection of the Base object
  # Unless connected to a sqlite db, otherwise it is too time consuming
  database = sqlite_db? ? db : DataStore::Connector.new.database
  table_names.each do |name|
    begin
      settings = {name: name, data_type: data_type}
      settings[:original_value] = type == 'counter'
      DataStore.create_table(settings).apply(database, direction)
    rescue Sequel::DatabaseError => e
      raise e if e.message.include?('FATAL')
    end
  end
  database.disconnect unless sqlite_db?
end
prefix() click to toggle source
# File lib/data_store/base.rb, line 103
def prefix
  DataStore.configuration.prefix
end
set_default_values() click to toggle source
# File lib/data_store/base.rb, line 66
def set_default_values
  default_values.each do |variable|
    value = DataStore.configuration.send(variable)
    self.send(variable+ '=', value) if self.send(variable).nil?
  end
end
sqlite_db?() click to toggle source
# File lib/data_store/base.rb, line 107
def sqlite_db?
  DataStore.configuration.database.to_s == 'sqlite'
end
table_name() click to toggle source
# File lib/data_store/base.rb, line 99
def table_name
  (prefix + identifier.to_s).to_sym
end