Upgrade to Rails 2.0.2
Upgraded to Rails 2.0.2, except that we maintain vendor/rails/actionpack/lib/action_controller/routing.rb from Rail 1.2.6 (at least for now), so that Routes don't change. We still get to enjoy Rails's many new features. Also fixed a bug in Chunk-handling: disable WikiWord processing in tags (for real this time).
This commit is contained in:
parent
0f6889e09f
commit
6873fc8026
1083 changed files with 52810 additions and 41058 deletions
|
@ -1,87 +0,0 @@
|
|||
require File.dirname(__FILE__) + '/shared_setup'
|
||||
|
||||
logger = Logger.new(STDOUT)
|
||||
|
||||
# Database setup ---------------
|
||||
|
||||
logger.info "\nCreate tables"
|
||||
|
||||
[ "DROP TABLE companies", "DROP TABLE people", "DROP TABLE people_companies",
|
||||
"CREATE TABLE companies (id int(11) auto_increment, client_of int(11), name varchar(255), type varchar(100), PRIMARY KEY (id))",
|
||||
"CREATE TABLE people (id int(11) auto_increment, name varchar(100), PRIMARY KEY (id))",
|
||||
"CREATE TABLE people_companies (person_id int(11), company_id int(11), PRIMARY KEY (person_id, company_id))",
|
||||
].each { |statement|
|
||||
# Tables doesn't necessarily already exist
|
||||
begin; ActiveRecord::Base.connection.execute(statement); rescue ActiveRecord::StatementInvalid; end
|
||||
}
|
||||
|
||||
|
||||
# Class setup ---------------
|
||||
|
||||
class Company < ActiveRecord::Base
|
||||
has_and_belongs_to_many :people, :class_name => "Person", :join_table => "people_companies", :table_name => "people"
|
||||
end
|
||||
|
||||
class Firm < Company
|
||||
has_many :clients, :foreign_key => "client_of"
|
||||
|
||||
def people_with_all_clients
|
||||
clients.inject([]) { |people, client| people + client.people }
|
||||
end
|
||||
end
|
||||
|
||||
class Client < Company
|
||||
belongs_to :firm, :foreign_key => "client_of"
|
||||
end
|
||||
|
||||
class Person < ActiveRecord::Base
|
||||
has_and_belongs_to_many :companies, :join_table => "people_companies"
|
||||
def self.table_name() "people" end
|
||||
end
|
||||
|
||||
|
||||
# Usage ---------------
|
||||
|
||||
logger.info "\nCreate fixtures"
|
||||
|
||||
Firm.new("name" => "Next Angle").save
|
||||
Client.new("name" => "37signals", "client_of" => 1).save
|
||||
Person.new("name" => "David").save
|
||||
|
||||
|
||||
logger.info "\nUsing Finders"
|
||||
|
||||
next_angle = Company.find(1)
|
||||
next_angle = Firm.find(1)
|
||||
next_angle = Company.find_first "name = 'Next Angle'"
|
||||
next_angle = Firm.find_by_sql("SELECT * FROM companies WHERE id = 1").first
|
||||
|
||||
Firm === next_angle
|
||||
|
||||
|
||||
logger.info "\nUsing has_many association"
|
||||
|
||||
next_angle.has_clients?
|
||||
next_angle.clients_count
|
||||
all_clients = next_angle.clients
|
||||
|
||||
thirty_seven_signals = next_angle.find_in_clients(2)
|
||||
|
||||
|
||||
logger.info "\nUsing belongs_to association"
|
||||
|
||||
thirty_seven_signals.has_firm?
|
||||
thirty_seven_signals.firm?(next_angle)
|
||||
|
||||
|
||||
logger.info "\nUsing has_and_belongs_to_many association"
|
||||
|
||||
david = Person.find(1)
|
||||
david.add_companies(thirty_seven_signals, next_angle)
|
||||
david.companies.include?(next_angle)
|
||||
david.companies_count == 2
|
||||
|
||||
david.remove_companies(next_angle)
|
||||
david.companies_count == 1
|
||||
|
||||
thirty_seven_signals.people.include?(david)
|
|
@ -1,15 +0,0 @@
|
|||
# Be sure to change the mysql_connection details and create a database for the example
|
||||
|
||||
$: << File.dirname(__FILE__) + '/../lib'
|
||||
|
||||
require 'active_record'
|
||||
require 'logger'; class Logger; def format_message(severity, timestamp, msg, progname) "#{msg}\n" end; end
|
||||
|
||||
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
||||
ActiveRecord::Base.establish_connection(
|
||||
:adapter => "mysql",
|
||||
:host => "localhost",
|
||||
:username => "root",
|
||||
:password => "",
|
||||
:database => "activerecord_examples"
|
||||
)
|
85
vendor/rails/activerecord/examples/validation.rb
vendored
85
vendor/rails/activerecord/examples/validation.rb
vendored
|
@ -1,85 +0,0 @@
|
|||
require File.dirname(__FILE__) + '/shared_setup'
|
||||
|
||||
logger = Logger.new(STDOUT)
|
||||
|
||||
# Database setup ---------------
|
||||
|
||||
logger.info "\nCreate tables"
|
||||
|
||||
[ "DROP TABLE people",
|
||||
"CREATE TABLE people (id int(11) auto_increment, name varchar(100), pass varchar(100), email varchar(100), PRIMARY KEY (id))"
|
||||
].each { |statement|
|
||||
begin; ActiveRecord::Base.connection.execute(statement); rescue ActiveRecord::StatementInvalid; end # Tables doesn't necessarily already exist
|
||||
}
|
||||
|
||||
|
||||
# Class setup ---------------
|
||||
|
||||
class Person < ActiveRecord::Base
|
||||
# Using
|
||||
def self.authenticate(name, pass)
|
||||
# find_first "name = '#{name}' AND pass = '#{pass}'" would be open to sql-injection (in a web-app scenario)
|
||||
find_first [ "name = '%s' AND pass = '%s'", name, pass ]
|
||||
end
|
||||
|
||||
def self.name_exists?(name, id = nil)
|
||||
if id.nil?
|
||||
condition = [ "name = '%s'", name ]
|
||||
else
|
||||
# Check if anyone else than the person identified by person_id has that user_name
|
||||
condition = [ "name = '%s' AND id <> %d", name, id ]
|
||||
end
|
||||
|
||||
!find_first(condition).nil?
|
||||
end
|
||||
|
||||
def email_address_with_name
|
||||
"\"#{name}\" <#{email}>"
|
||||
end
|
||||
|
||||
protected
|
||||
def validate
|
||||
errors.add_on_empty(%w(name pass email))
|
||||
errors.add("email", "must be valid") unless email_address_valid?
|
||||
end
|
||||
|
||||
def validate_on_create
|
||||
if attribute_present?("name") && Person.name_exists?(name)
|
||||
errors.add("name", "is already taken by another person")
|
||||
end
|
||||
end
|
||||
|
||||
def validate_on_update
|
||||
if attribute_present?("name") && Person.name_exists?(name, id)
|
||||
errors.add("name", "is already taken by another person")
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def email_address_valid?() email =~ /\w[-.\w]*\@[-\w]+[-.\w]*\.\w+/ end
|
||||
end
|
||||
|
||||
# Usage ---------------
|
||||
|
||||
logger.info "\nCreate fixtures"
|
||||
david = Person.new("name" => "David Heinemeier Hansson", "pass" => "", "email" => "")
|
||||
unless david.save
|
||||
puts "There was #{david.errors.count} error(s)"
|
||||
david.errors.each_full { |error| puts error }
|
||||
end
|
||||
|
||||
david.pass = "something"
|
||||
david.email = "invalid_address"
|
||||
unless david.save
|
||||
puts "There was #{david.errors.count} error(s)"
|
||||
puts "It was email with: " + david.errors.on("email")
|
||||
end
|
||||
|
||||
david.email = "david@loudthinking.com"
|
||||
if david.save then puts "David finally made it!" end
|
||||
|
||||
|
||||
another_david = Person.new("name" => "David Heinemeier Hansson", "pass" => "xc", "email" => "david@loudthinking")
|
||||
unless another_david.save
|
||||
puts "Error on name: " + another_david.errors.on("name")
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue