Sha256: ae2ccc773eea2393f90b8c443de907b626bcd0de18a6f35d0b6adb978e1eec1b

Contents?: true

Size: 1.85 KB

Versions: 7

Compression:

Stored size: 1.85 KB

Contents

require 'nera_database'
require 'nera_simulator'

module NERA

  # This class access the simulator table.
  class SimulatorRecords

    # keys of the simulator table
    ATTRIBUTES = [ [:id, Integer], [:name, String], [:created_at, DateTime], [:updated_at, DateTime] ]

    # NERA::Database object
    @db

    # argument is the path to database file
    def initialize( db_file)
      @db = NERA::Database.new( db_file)
    end

    # if file already exists, returns false
    def self.create_table( db_file)
      NERA::Database.create_table( db_file)
    end

    # return keys of the simulator table
    def keys
      keys = ATTRIBUTES.map do |x|
        x[0]
      end
    end

    # sim_class must be a subclass of NERA::Simulator
    def add( sim_class)
      unless sim_class.superclass == NERA::Simulator
        raise ArgumentError, "must be a subclass of NERA::Simulator"
      end
      name = sim_class.to_s
      found = @db.find_all do |rec|
        rec[:name] == name
      end
      if found
        $stderr.puts "Same simulator already exists."
        return nil
      end
      d = DateTime.now
      h = { :name => name, :created_at => d, :updated_at => d}
      id = @db.add( h)
      return id
    end

    def get_class( id)
      raise ArgumentError unless id.is_a?(Integer)
      rec = @db.find_by_id(id)
      return nil unless rec
      klass = eval(rec[:name])
      return klass
    end

    def list
      l = @db.find_all do |r| true end
      return l.to_a
    end

    def touch( id)
      raise ArgumentError unless id.is_a?( Integer)
      rec = @db.find_by_id( id)
      return nil unless rec
      rec[:updated_at] = DateTime.now
      @db.update( rec)
    end

    def destroy( id)
      raise ArgumentError unless id.is_a?(Integer)
      @db.destroy(id)
    end

    def transaction
      @db.transaction {
        yield
      }
    end
    
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
nera-0.0.2 lib/nera/nera_simulator_records.rb
nera-0.1.0 lib/nera/nera_simulator_records.rb
nera-0.0.1 lib/nera/nera_simulator_records.rb
nera-0.1.1 lib/nera/nera_simulator_records.rb
nera-0.0.3 lib/nera/nera_simulator_records.rb
nera-0.0.4 lib/nera/nera_simulator_records.rb
nera-0.1.2 lib/nera/nera_simulator_records.rb