activerecord-hackery--ransack/spec/support/schema.rb

191 lines
4.5 KiB
Ruby
Raw Normal View History

2011-03-31 00:31:39 +00:00
require 'active_record'
case ENV['DB']
when "mysql"
ActiveRecord::Base.establish_connection(
adapter: 'mysql2',
database: 'ransack',
encoding: 'utf8'
)
when "postgres"
ActiveRecord::Base.establish_connection(
adapter: 'postgresql',
database: 'ransack',
username: 'postgres',
min_messages: 'warning'
)
else
# Assume SQLite3
ActiveRecord::Base.establish_connection(
adapter: 'sqlite3',
database: ':memory:'
)
end
2011-03-31 00:31:39 +00:00
class Person < ActiveRecord::Base
if ActiveRecord::VERSION::MAJOR == 3
default_scope order('id DESC')
else
default_scope { order(id: :desc) }
end
belongs_to :parent, :class_name => 'Person', :foreign_key => :parent_id
has_many :children, :class_name => 'Person', :foreign_key => :parent_id
2011-03-31 00:31:39 +00:00
has_many :articles
has_many :comments
has_many :authored_article_comments, :through => :articles,
:source => :comments, :foreign_key => :person_id
has_many :notes, :as => :notable
2011-04-11 16:59:26 +00:00
scope :restricted, lambda { where("restricted = 1") }
scope :active, lambda { where("active = 1") }
scope :over_age, lambda { |y| where(["age > ?", y]) }
ransacker :reversed_name, :formatter => proc { |v| v.reverse } do |parent|
2011-04-11 16:59:26 +00:00
parent.table[:name]
end
ransacker :doubled_name do |parent|
2013-12-07 00:51:55 +00:00
Arel::Nodes::InfixOperation.new(
'||', parent.table[:name], parent.table[:name]
)
end
def self.ransackable_attributes(auth_object = nil)
if auth_object == :admin
column_names + _ransackers.keys - ['only_sort']
else
column_names + _ransackers.keys - ['only_sort', 'only_admin']
end
end
def self.ransortable_attributes(auth_object = nil)
if auth_object == :admin
column_names + _ransackers.keys - ['only_search']
else
column_names + _ransackers.keys - ['only_search', 'only_admin']
end
end
def self.ransackable_attributes(auth_object = nil)
if auth_object == :admin
column_names + _ransackers.keys - ['only_sort']
else
column_names + _ransackers.keys - ['only_sort', 'only_admin']
end
end
def self.ransortable_attributes(auth_object = nil)
if auth_object == :admin
column_names + _ransackers.keys - ['only_search']
else
column_names + _ransackers.keys - ['only_search', 'only_admin']
end
end
2011-03-31 00:31:39 +00:00
end
class Article < ActiveRecord::Base
belongs_to :person
has_many :comments
2011-03-31 00:31:39 +00:00
has_and_belongs_to_many :tags
has_many :notes, :as => :notable
if ActiveRecord::VERSION::STRING >= '3.1'
default_scope { where("'default_scope' = 'default_scope'") }
else # Rails 3.0 does not accept a block
default_scope where("'default_scope' = 'default_scope'")
end
2011-03-31 00:31:39 +00:00
end
module Namespace
class Article < ::Article
end
end
module Namespace
class Article < ::Article
end
end
2011-03-31 00:31:39 +00:00
class Comment < ActiveRecord::Base
belongs_to :article
belongs_to :person
end
class Tag < ActiveRecord::Base
has_and_belongs_to_many :articles
end
class Note < ActiveRecord::Base
belongs_to :notable, :polymorphic => true
2011-03-31 00:31:39 +00:00
end
module Schema
def self.create
ActiveRecord::Migration.verbose = false
ActiveRecord::Schema.define do
create_table :people, :force => true do |t|
t.integer :parent_id
t.string :name
t.string :email
2013-12-07 00:51:55 +00:00
t.string :only_search
t.string :only_sort
t.string :only_admin
t.integer :salary
2013-08-04 13:13:41 +00:00
t.boolean :awesome, default: false
t.timestamps
end
2011-03-31 00:31:39 +00:00
create_table :articles, :force => true do |t|
t.integer :person_id
t.string :title
t.text :body
end
2011-03-31 00:31:39 +00:00
create_table :comments, :force => true do |t|
t.integer :article_id
t.integer :person_id
2013-12-10 18:18:17 +00:00
t.text :body
end
2011-03-31 00:31:39 +00:00
create_table :tags, :force => true do |t|
t.string :name
end
2011-03-31 00:31:39 +00:00
create_table :articles_tags, :force => true, :id => false do |t|
t.integer :article_id
t.integer :tag_id
end
2011-03-31 00:31:39 +00:00
create_table :notes, :force => true do |t|
t.integer :notable_id
2013-12-10 18:18:17 +00:00
t.string :notable_type
t.string :note
2011-03-31 00:31:39 +00:00
end
2011-03-31 00:31:39 +00:00
end
10.times do
person = Person.make
Note.make(:notable => person)
2011-03-31 00:31:39 +00:00
3.times do
article = Article.make(:person => person)
2011-03-31 00:31:39 +00:00
3.times do
article.tags = [Tag.make, Tag.make, Tag.make]
end
Note.make(:notable => article)
2011-03-31 00:31:39 +00:00
10.times do
Comment.make(:article => article, :person => person)
2011-03-31 00:31:39 +00:00
end
end
end
2013-12-07 00:51:55 +00:00
Comment.make(
:body => 'First post!',
:article => Article.make(:title => 'Hello, world!')
2013-12-07 00:51:55 +00:00
)
2011-03-31 00:31:39 +00:00
end
end