Sha256: 9da60e9b6b83d89a69519a340f9414168ea8aef4b83435f716d8d07708eba598

Contents?: true

Size: 1.99 KB

Versions: 1

Compression:

Stored size: 1.99 KB

Contents

require 'database_helper'
require 'active_record/acts_as'

class Product < ActiveRecord::Base
  actable
  belongs_to :store
  has_many :buyers
  validates_presence_of :name, :price
  store :settings, accessors: [:global_option]

  def present
    "#{name} - $#{price}"
  end

  def raise_error
    specific.non_existant_method
  end
end

class Pen < ActiveRecord::Base
  acts_as :product
  store_accessor :settings, :option1

  has_many :pen_caps

  validates_presence_of :color
end

class Buyer < ActiveRecord::Base
  belongs_to :product
end

class PenCap < ActiveRecord::Base
  belongs_to :pen
end

class IsolatedPen < ActiveRecord::Base
  self.table_name = :pens
  acts_as :product, validates_actable: false
  store_accessor :settings, :option2

  validates_presence_of :color
end

class Store < ActiveRecord::Base
  has_many :products
end

module Inventory
  class ProductFeature < ActiveRecord::Base
    self.table_name = 'inventory_product_features'
    actable
    validates_presence_of :name, :price

    def present
      "#{name} - $#{price}"
    end
  end

  class PenLid < ActiveRecord::Base
    self.table_name = 'inventory_pen_lids'
    acts_as :product_feature, class_name: 'Inventory::ProductFeature'

    validates_presence_of :color
  end
end

def initialize_schema
  initialize_database do
    create_table :pens do |t|
      t.string :color
    end

    create_table :products do |t|
      t.string :name
      t.float :price
      t.integer :store_id
      t.text :settings
      t.timestamps null: true
      t.actable
    end

    create_table :stores do |t|
      t.string :name
    end

    create_table :buyers do |t|
      t.integer :product_id
    end

    create_table :pen_caps do |t|
      t.integer :buyer_id
    end

    create_table :inventory_pen_lids do |t|
      t.string :color
    end

    create_table :inventory_product_features do |t|
      t.string :name
      t.float :price
      t.actable index: { name: 'index_inventory_product_features_on_actable' }
    end
  end
end
initialize_schema

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
active_record-acts_as-2.0.3 spec/models.rb