Sha256: 0161a7d9e69fe30cf4bfb5987fb79fcd780962284ea659df3a466b5bb4cd52b4

Contents?: true

Size: 1.12 KB

Versions: 5

Compression:

Stored size: 1.12 KB

Contents

require 'sequel'

begin
  case $wikore_db
  when :memory
    DB = Sequel.sqlite
  else
    DB_FILE = __DIR__('wikore.db')
    DB = Sequel.connect("sqlite://#{DB_FILE}")
  end
rescue NoMethodError
  raise LoadError, 'Install latest Sequel gem'
end

module Model
  PAGE_SCHEMA = lambda{
    primary_key :id
    boolean :active, :default => true
    text    :text
    integer :version
  }

  class Page < Sequel::Model(:page)
    set_schema do
      instance_eval(&PAGE_SCHEMA)
      text :title, :unique => true, :null => false
    end

    def backup
      hash = @values.dup
      hash.delete :id
      OldPage.create(hash)
    end

    def revert
      backup = OldPage[:title => title].values.dup
      backup.delete :id
      delete
      self.class.create(backup)
    end
  end

  class OldPage < Sequel::Model(:old_page)
    set_schema do
      instance_eval(&PAGE_SCHEMA)
      text :title, :unique => false, :null => false
    end
  end

  [Page, OldPage].each do |klass|
    begin
      klass.create_table
    rescue Sequel::DatabaseError => e
      if e.message !~ /table.*already exists/
        raise e
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
Pistos-ramaze-2009.01 examples/app/wikore/src/model.rb
Pistos-ramaze-2009.02 examples/app/wikore/src/model.rb
Pistos-ramaze-2009.04.08 examples/app/wikore/src/model.rb
ramaze-2009.01 examples/app/wikore/src/model.rb
ramaze-2009.02 examples/app/wikore/src/model.rb