real_fk 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5 @@
1
+ 0.2:
2
+ Properly packaged as a Gem
3
+ Fixed compatibility problems with SQLite
4
+ 0.1:
5
+ Project started (2008-03-12)
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2008 Gunnar Wolf <gwolf@gwolf.org>
2
+
3
+ This is the MIT license, the license Ruby on Rails itself is licensed under.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,33 @@
1
+ ./Manifest.txt
2
+ ./LICENSE
3
+ ./init.rb
4
+ ./lib/real_fk.rb
5
+ ./doc/fr_class_index.html
6
+ ./doc/index.html
7
+ ./doc/files/README.html
8
+ ./doc/files/lib/real_fk_rb.html
9
+ ./doc/fr_file_index.html
10
+ ./doc/fr_method_index.html
11
+ ./doc/rdoc-style.css
12
+ ./doc/created.rid
13
+ ./README
14
+ ./Rakefile
15
+ ./test/rails_root/script/console
16
+ ./test/rails_root/config/boot.rb
17
+ ./test/rails_root/config/database.yml
18
+ ./test/rails_root/config/environments/postgresql.rb
19
+ ./test/rails_root/config/environments/sqlite3.rb
20
+ ./test/rails_root/config/environments/mysql.rb
21
+ ./test/rails_root/config/environments/sqlite.rb
22
+ ./test/rails_root/config/routes.rb
23
+ ./test/rails_root/config/environment.rb
24
+ ./test/rails_root/README
25
+ ./test/rails_root/db/migrate/001_create_people_conf.rb
26
+ ./test/rails_root/vendor/plugins/real_fk/init.rb
27
+ ./test/rails_root/app/models/person.rb
28
+ ./test/rails_root/app/models/conference.rb
29
+ ./test/rails_root/app/models/person_type.rb
30
+ ./test/rails_root/app/controllers/application.rb
31
+ ./test/test_helper.rb
32
+ ./test/unit/real_fk_test.rb
33
+ ./META.yml
data/README ADDED
@@ -0,0 +1,141 @@
1
+ = real_fk
2
+
3
+ This plugin extends the base <tt>Rails ActiveRecord::Migration</tt>
4
+ with some commonly used functionality, aiming at keeping your
5
+ migrations short, easy to understand and meaningful.
6
+
7
+ = Installing the plugin
8
+
9
+ The easiest way is through Rails' own +scripts/plugins+ utility. The
10
+ first thing you should do is to tell Rails where the plugin's tree is
11
+ located.
12
+
13
+ If you want to follow the latest changes, you will probably prefer
14
+ following the project's trunk, however, for production, I strongly
15
+ suggest you to stick to a stable release. Depending on what you
16
+ prefer, from your project's base directory, type:
17
+
18
+ $ ./script/plugin source http://realfk.rubyforge.org/svn/trunk/
19
+
20
+ Or, to follow a given release (say, 0.1 - Of course, check on the
21
+ latest stable release before doing this):
22
+
23
+ $ ./script/plugin source http://realfk.rubyforge.org/svn/tags/0.1/
24
+
25
+ Then, ask Rails to install the plugin:
26
+
27
+ $ ./script/plugin install real_fk
28
+
29
+ If you use Subversion for tracking your project's development, you
30
+ will probably want to mark the plugin as an <i>external</i>
31
+ repository. To do so, add the -x switch:
32
+
33
+ $ ./script/plugin install -x real_fk
34
+
35
+ = Using the plugin
36
+
37
+ == References
38
+
39
+ Rails is built upon a "dumb database" concept. Rails assumes the database
40
+ will not force restrictions upon the user - i.e. that the model validators
41
+ are all there is. But I disagree ;-)
42
+
43
+ So, if you want to create a relation field, properly acting as a foreign
44
+ key and refering to another table, instead of doing it via the
45
+ <tt>ActiveRecord::ConnectionAdapters::TableDefinition#column</tt> (or even
46
+ <tt>ActiveRecord::ConnectionAdapters::TableDefinition#references</tt>)
47
+ methods, declare them with +add_refrence+:
48
+
49
+ def self.up
50
+ create_table :proposals do |t|
51
+ (...)
52
+ end
53
+ create_table :proposal_types do |t|
54
+ (...)
55
+ end
56
+ create_table :proposal_statuses do |t|
57
+ (...)
58
+ end
59
+ add_reference :proposals, :proposal_types
60
+ add_reference :proposals, :proposal_statuses, :null => false, :default => 1
61
+ end
62
+
63
+ The corresponding fields (+proposal_type_id+ and +proposal_status_id+,
64
+ respectively) will be created in +proposals+, and the RDBMS will
65
+ impose a Foreign Key constraint.
66
+
67
+ The references can be removed via +remove_reference+, i.e., for inclusion in
68
+ +down+ migrations:
69
+
70
+ def self.down
71
+ remove_reference :proposals, :proposal_types
72
+ remove_reference :proposals, :proposal_statuses
73
+ drop_table :proposal_statuses
74
+ drop_table :proposal_types
75
+ drop_table :proposals
76
+ end
77
+
78
+ Of course, in this case the +remove_reference+ call is not really needed - But
79
+ if you are dropping a table that is referred to from a table that will
80
+ remain existing, you will have to remove the foreign key constraints (that
81
+ is, the referring columns).
82
+
83
+ == Join (HABTM) tables
84
+
85
+ When you define a simple +has_and_belongs_to_many+ (HABTM) relation in your
86
+ model, you are expected to create an extra table representing this relation.
87
+ This is a very simple table (i.e. it has only a row for each of the related
88
+ table's IDs), and it carries foreign key constraints (see the +References+
89
+ section).
90
+
91
+ Please note that join tables <i>are not supposed to carry any extra
92
+ columns</i> - If you need to add information to join tables, think twice and
93
+ better use a <tt>has_many :elements, :through => :othermodel</tt>
94
+ declaration, and create the +othermodel+ table manually.
95
+
96
+ To create a HABTM table representing that each person can attend many
97
+ conferences and each conference can be attended by many people:
98
+
99
+ def self.up
100
+ create_table :people do |t|
101
+ (...)
102
+ end
103
+ create_table :conferences do |t|
104
+ (...)
105
+ end
106
+ create_habtm :people, :conferences
107
+ end
108
+ def self.down
109
+ drop_habtm :people, :conferences
110
+ drop_table :people
111
+ drop_table :conferences
112
+ end
113
+
114
+ The last call will create a +conferences_people+ table (according to Rails'
115
+ conventions, table names are sorted alphabetically to get the join table's
116
+ name).
117
+
118
+ Note that in the +down+ migration, the +drop_habtm+ call <i>must appear
119
+ before</i> the +drop_table+ calls, as it carries foreign key constraints.
120
+
121
+ = Author
122
+
123
+ This plugin is Copyright (c) 2008 Gunnar Wolf <gwolf@gwolf.org>
124
+
125
+ == Licensing information
126
+
127
+ This plugin is under a MIT license. For further information, please
128
+ check the LICENSE file.
129
+
130
+ = Getting the code
131
+
132
+ The plugin project's home page can be found at
133
+ http://realfk.rubyforge.org/
134
+
135
+ The Rubyforge project page is http://rubyforge.org/projects/realfk/
136
+
137
+ The development branch of the SVN tree can be pulled anonymously from
138
+ http://realfk.rubyforge.org/svn/trunk/
139
+
140
+ Released versions can be found along the 'tags' directory of the SVN
141
+ tree, at http://realfk.rubyforge.org/svn/tags/
@@ -0,0 +1,83 @@
1
+ module GWolf #:nodoc:
2
+ module UNAM #:nodoc:
3
+ module RealFkMigrations #:nodoc:
4
+
5
+ def self.append_features(base)
6
+ super
7
+
8
+ # Adds a belongs_to relation from the first table to the second one, creating
9
+ # the foreign key, and creating the fields in the first table corresponding
10
+ # to what Rails expects them to be called.
11
+ #
12
+ # The received options will be passed on to the add_column call.
13
+ def add_reference(from, dest, options = {})
14
+ fieldname = fldname(dest)
15
+
16
+ add_column(from, fieldname, :integer, options)
17
+ add_constraint(from, dest)
18
+ end
19
+
20
+ def remove_reference(from, dest)
21
+ remove_column from, fldname(dest)
22
+ end
23
+
24
+ # Creates a HABTM join-table between two given tables, so they can be
25
+ # linked with a has_and_belongs_to_many declaration in the model.
26
+ #
27
+ # Three indexes will be created for the table: A unique index, ensuring
28
+ # only one relation is created between any two given records, and two
29
+ # regular indexes, to ensure speedy lookups.
30
+ def create_habtm(first, second)
31
+ first, second = sort_tables(first, second)
32
+ first_fld = fldname(first)
33
+ second_fld = fldname(second)
34
+ join_tbl = "#{first}_#{second}"
35
+
36
+ # It is sad we cannot use our own tricks here, isn't it? :-/
37
+ # Some RDBMSs (notably, SQLite) won't allow for the creation of a
38
+ # table with no columns - So we create the table with a reference
39
+ # to the first table by hand... And just add cleanly the second
40
+ # table afterwards
41
+ create_table(join_tbl, :id => false) do |t|
42
+ t.integer fldname(first)
43
+ end
44
+ add_constraint join_tbl, first
45
+ add_reference join_tbl, second
46
+
47
+ add_index join_tbl, first_fld
48
+ add_index join_tbl, second_fld
49
+ add_index join_tbl, [first_fld, second_fld], :unique => true
50
+ end
51
+
52
+ # Drops a HABTM join-table between the two given tables.
53
+ def drop_habtm(first, second)
54
+ first, second = sort_tables(first, second)
55
+ drop_table "#{first}_#{second}"
56
+ end
57
+
58
+ private
59
+ def fldname(tbl) #:nodoc:
60
+ "#{tbl.to_s.singularize}_id"
61
+ end
62
+
63
+ def sort_tables(first, second) #:nodoc:
64
+ first, second = second, first if first.to_s > second.to_s
65
+ return first, second
66
+ end
67
+
68
+ def add_constraint(from, to)
69
+ fld = fldname(to)
70
+ if ActiveRecord::Base.connection.adapter_name == 'PostgreSQL'
71
+ execute "ALTER TABLE #{from} ADD CONSTRAINT " <<
72
+ "#{from}_#{fld}_fkey FOREIGN KEY (#{fld}) " <<
73
+ "REFERENCES #{to}(id) ON DELETE RESTRICT"
74
+ else
75
+ warn "Reference rquested from #{from} to #{to} - References " <<
76
+ "are not yet supported in " <<
77
+ ActiveRecord::Base.connection.adapter_name
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,4 @@
1
+ This mini-Rails directory was created following the recipe at:
2
+
3
+ http://www.pluginaweek.org/2006/11/24/plugin-tip-of-the-week-testing-your-plugins-the-right-way/
4
+
@@ -0,0 +1,10 @@
1
+ # Filters added to this controller apply to all controllers in the application.
2
+ # Likewise, all the methods added will be available for all controllers.
3
+
4
+ class ApplicationController < ActionController::Base
5
+ helper :all # include all helpers, all the time
6
+
7
+ # See ActionController::RequestForgeryProtection for details
8
+ # Uncomment the :secret if you're not using the cookie session store
9
+ protect_from_forgery # :secret => 'ec8a7a583ea1cce8b10146acadcad842'
10
+ end
@@ -0,0 +1,3 @@
1
+ class Conference < ActiveRecord::Base
2
+ has_and_belongs_to_many :people
3
+ end
@@ -0,0 +1,4 @@
1
+ class Person < ActiveRecord::Base
2
+ has_and_belongs_to_many :conferences
3
+ belongs_to :person_type
4
+ end
@@ -0,0 +1,3 @@
1
+ class PersonType < ActiveRecord::Base
2
+ has_many :people
3
+ end
@@ -0,0 +1,109 @@
1
+ # Don't change this file!
2
+ # Configure your app in config/environment.rb and config/environments/*.rb
3
+
4
+ RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
5
+
6
+ module Rails
7
+ class << self
8
+ def boot!
9
+ unless booted?
10
+ preinitialize
11
+ pick_boot.run
12
+ end
13
+ end
14
+
15
+ def booted?
16
+ defined? Rails::Initializer
17
+ end
18
+
19
+ def pick_boot
20
+ (vendor_rails? ? VendorBoot : GemBoot).new
21
+ end
22
+
23
+ def vendor_rails?
24
+ File.exist?("#{RAILS_ROOT}/vendor/rails")
25
+ end
26
+
27
+ # FIXME : Ruby 1.9
28
+ def preinitialize
29
+ load(preinitializer_path) if File.exists?(preinitializer_path)
30
+ end
31
+
32
+ def preinitializer_path
33
+ "#{RAILS_ROOT}/config/preinitializer.rb"
34
+ end
35
+ end
36
+
37
+ class Boot
38
+ def run
39
+ load_initializer
40
+ Rails::Initializer.run(:set_load_path)
41
+ end
42
+ end
43
+
44
+ class VendorBoot < Boot
45
+ def load_initializer
46
+ require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
47
+ end
48
+ end
49
+
50
+ class GemBoot < Boot
51
+ def load_initializer
52
+ self.class.load_rubygems
53
+ load_rails_gem
54
+ require 'initializer'
55
+ end
56
+
57
+ def load_rails_gem
58
+ if version = self.class.gem_version
59
+ gem 'rails', version
60
+ else
61
+ gem 'rails'
62
+ end
63
+ rescue Gem::LoadError => load_error
64
+ $stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.)
65
+ exit 1
66
+ end
67
+
68
+ class << self
69
+ def rubygems_version
70
+ Gem::RubyGemsVersion if defined? Gem::RubyGemsVersion
71
+ end
72
+
73
+ def gem_version
74
+ if defined? RAILS_GEM_VERSION
75
+ RAILS_GEM_VERSION
76
+ elsif ENV.include?('RAILS_GEM_VERSION')
77
+ ENV['RAILS_GEM_VERSION']
78
+ else
79
+ parse_gem_version(read_environment_rb)
80
+ end
81
+ end
82
+
83
+ def load_rubygems
84
+ require 'rubygems'
85
+
86
+ unless rubygems_version >= '0.9.4'
87
+ $stderr.puts %(Rails requires RubyGems >= 0.9.4 (you have #{rubygems_version}). Please `gem update --system` and try again.)
88
+ exit 1
89
+ end
90
+
91
+ rescue LoadError
92
+ $stderr.puts %(Rails requires RubyGems >= 0.9.4. Please install RubyGems and try again: http://rubygems.rubyforge.org)
93
+ exit 1
94
+ end
95
+
96
+ def parse_gem_version(text)
97
+ $1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/
98
+ end
99
+
100
+ private
101
+ def read_environment_rb
102
+ File.read("#{RAILS_ROOT}/config/environment.rb")
103
+ end
104
+ end
105
+ end
106
+ end
107
+
108
+ # All that for this:
109
+ Rails.boot!
@@ -0,0 +1,21 @@
1
+ postgresql:
2
+ :adapter: postgresql
3
+ :username: gwolf
4
+ # :password: postgres
5
+ :database: real_fk_test
6
+ :min_messages: ERROR
7
+ # There is really not much point in testing this plugin with "lesser"
8
+ # RDBMS-like systems, such as SQLite or MySQL. It's not impossible, though...
9
+ #
10
+ # mysql:
11
+ # :adapter: mysql
12
+ # :host: localhost
13
+ # :username: root
14
+ # :password:
15
+ # :database: real_fk_test
16
+ # sqlite:
17
+ # :adapter: sqlite
18
+ # :dbfile: real_fk_test.sqlite.db
19
+ # sqlite3:
20
+ # :adapter: sqlite3
21
+ # :dbfile: real_fk_test.sqlite3.db
@@ -0,0 +1,13 @@
1
+ # Specifies gem version of Rails to use when vendor/rails is not present
2
+ #RAILS_GEM_VERSION = '2.0.2'
3
+
4
+ require File.join(File.dirname(__FILE__), 'boot')
5
+
6
+ Rails::Initializer.run do |config|
7
+ config.log_level = :debug
8
+ config.cache_classes = false
9
+ config.whiny_nils = true
10
+ config.load_paths << "#{File.dirname(__FILE__)}/../../../lib/"
11
+ end
12
+
13
+ Dependencies.log_activity = true
@@ -0,0 +1,35 @@
1
+ ActionController::Routing::Routes.draw do |map|
2
+ # The priority is based upon order of creation: first created -> highest priority.
3
+
4
+ # Sample of regular route:
5
+ # map.connect 'products/:id', :controller => 'catalog', :action => 'view'
6
+ # Keep in mind you can assign values other than :controller and :action
7
+
8
+ # Sample of named route:
9
+ # map.purchase 'products/:id/purchase', :controller => 'catalog', :action => 'purchase'
10
+ # This route can be invoked with purchase_url(:id => product.id)
11
+
12
+ # Sample resource route (maps HTTP verbs to controller actions automatically):
13
+ # map.resources :products
14
+
15
+ # Sample resource route with options:
16
+ # map.resources :products, :member => { :short => :get, :toggle => :post }, :collection => { :sold => :get }
17
+
18
+ # Sample resource route with sub-resources:
19
+ # map.resources :products, :has_many => [ :comments, :sales ], :has_one => :seller
20
+
21
+ # Sample resource route within a namespace:
22
+ # map.namespace :admin do |admin|
23
+ # # Directs /admin/products/* to Admin::ProductsController (app/controllers/admin/products_controller.rb)
24
+ # admin.resources :products
25
+ # end
26
+
27
+ # You can have the root of your site routed with map.root -- just remember to delete public/index.html.
28
+ # map.root :controller => "welcome"
29
+
30
+ # See how all your routes lay out with "rake routes"
31
+
32
+ # Install the default routes as the lowest priority.
33
+ map.connect ':controller/:action/:id'
34
+ map.connect ':controller/:action/:id.:format'
35
+ end
@@ -0,0 +1,36 @@
1
+ class CreatePeopleConf < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :person_types, :force => true do |t|
4
+ t.column :name, :string
5
+ end
6
+ create_table :people, :force => true do |t|
7
+ t.column :name, :string
8
+ end
9
+ create_table :conferences, :force => true do |t|
10
+ t.column :name, :string
11
+ end
12
+
13
+ add_reference :people, :person_types, :null => false
14
+ create_habtm :people, :conferences
15
+
16
+ ['Attendee', 'Organizer', 'Speaker'].map do |item|
17
+ PersonType.new(:name => item).save!
18
+ end
19
+ ['Some Body', 'Some Buddy', 'Sum baddy'].map do |pers|
20
+ Person.new(:name => pers,
21
+ :person_type => PersonType.find(:all).rand).save!
22
+ end
23
+ ['Boring', 'Interesting', 'Mediocre', 'Fun'].map do |conf|
24
+ Conference.new(:name => conf).save!
25
+ end
26
+ end
27
+
28
+ def self.down
29
+ drop_habtm :people, :conferences
30
+ drop_reference :people, :person_types
31
+
32
+ drop_table :people
33
+ drop_table :conferences
34
+ end
35
+ end
36
+
@@ -0,0 +1,403 @@
1
+ # Logfile created on Tue Nov 25 12:15:40 -0600 2008Dependencies: called new_constants_in(Object)
2
+ Dependencies: called require_or_load("/home/gwolf/cvs/realfk/test/rails_root/app/controllers/application.rb", nil)
3
+ Dependencies: called new_constants_in(Object)
4
+ Dependencies: called new_constants_in(Object)
5
+ Dependencies: called new_constants_in(Object)
6
+ Dependencies: called new_constants_in(Object)
7
+ Dependencies: New constants:
8
+ Dependencies: called new_constants_in(Object)
9
+ Dependencies: New constants:
10
+ Dependencies: New constants:
11
+ Dependencies: called new_constants_in(Object)
12
+ Dependencies: New constants:
13
+ Dependencies: called new_constants_in(Object)
14
+ Dependencies: New constants:
15
+ Dependencies: called new_constants_in(Object)
16
+ Dependencies: New constants:
17
+ Dependencies: called new_constants_in(Object)
18
+ Dependencies: New constants:
19
+ Dependencies: called new_constants_in(Object)
20
+ Dependencies: New constants:
21
+ Dependencies: New constants:
22
+ Dependencies: called new_constants_in(Object)
23
+ Dependencies: called new_constants_in(Object)
24
+ Dependencies: New constants:
25
+ Dependencies: called new_constants_in(Object)
26
+ Dependencies: New constants:
27
+ Dependencies: called new_constants_in(Object)
28
+ Dependencies: New constants: OptionParser
29
+ Dependencies: New constants:
30
+ Dependencies: New constants:
31
+ Dependencies: called new_constants_in(Object)
32
+ Dependencies: called new_constants_in(Object)
33
+ Dependencies: New constants:
34
+ Dependencies: called new_constants_in(Object)
35
+ Dependencies: New constants:
36
+ Dependencies: called new_constants_in(Object)
37
+ Dependencies: New constants:
38
+ Dependencies: called new_constants_in(Object)
39
+ Dependencies: called new_constants_in(Object)
40
+ Dependencies: called new_constants_in(Object)
41
+ Dependencies: called new_constants_in(Object)
42
+ Dependencies: called new_constants_in(Object)
43
+ Dependencies: called new_constants_in(Object)
44
+ Dependencies: called new_constants_in(Object)
45
+ Dependencies: New constants:
46
+ Dependencies: New constants:
47
+ Dependencies: New constants:
48
+ Dependencies: called new_constants_in(Object)
49
+ Dependencies: called new_constants_in(Object)
50
+ Dependencies: New constants:
51
+ Dependencies: New constants:
52
+ Dependencies: called new_constants_in(Object)
53
+ Dependencies: called new_constants_in(Object)
54
+ Dependencies: New constants:
55
+ Dependencies: New constants:
56
+ Dependencies: called new_constants_in(Object)
57
+ Dependencies: called new_constants_in(Object)
58
+ Dependencies: New constants:
59
+ Dependencies: New constants:
60
+ Dependencies: called new_constants_in(Object)
61
+ Dependencies: called new_constants_in(Object)
62
+ Dependencies: New constants:
63
+ Dependencies: New constants:
64
+ Dependencies: called new_constants_in(Object)
65
+ Dependencies: New constants:
66
+ Dependencies: called new_constants_in(Object)
67
+ Dependencies: called new_constants_in(Object)
68
+ Dependencies: New constants:
69
+ Dependencies: New constants:
70
+ Dependencies: called new_constants_in(Object)
71
+ Dependencies: called new_constants_in(Object)
72
+ Dependencies: New constants:
73
+ Dependencies: called new_constants_in(Object)
74
+ Dependencies: New constants:
75
+ Dependencies: called new_constants_in(Object)
76
+ Dependencies: New constants:
77
+ Dependencies: New constants:
78
+ Dependencies: called new_constants_in(Object)
79
+ Dependencies: called new_constants_in(Object)
80
+ Dependencies: New constants:
81
+ Dependencies: New constants:
82
+ Dependencies: called new_constants_in(Object)
83
+ Dependencies: called new_constants_in(Object)
84
+ Dependencies: New constants:
85
+ Dependencies: New constants:
86
+ Dependencies: called new_constants_in(Object)
87
+ Dependencies: called new_constants_in(Object)
88
+ Dependencies: New constants:
89
+ Dependencies: New constants:
90
+ Dependencies: called new_constants_in(Object)
91
+ Dependencies: called new_constants_in(Object)
92
+ Dependencies: New constants:
93
+ Dependencies: New constants:
94
+ Dependencies: called new_constants_in(Object)
95
+ Dependencies: called new_constants_in(Object)
96
+ Dependencies: New constants:
97
+ Dependencies: New constants:
98
+ Dependencies: called new_constants_in(Object)
99
+ Dependencies: called new_constants_in(Object)
100
+ Dependencies: New constants:
101
+ Dependencies: New constants:
102
+ Dependencies: called new_constants_in(Object)
103
+ Dependencies: called new_constants_in(Object)
104
+ Dependencies: New constants:
105
+ Dependencies: New constants:
106
+ Dependencies: called new_constants_in(Object)
107
+ Dependencies: New constants:
108
+ Dependencies: called new_constants_in(Object)
109
+ Dependencies: called new_constants_in(Object)
110
+ Dependencies: New constants:
111
+ Dependencies: New constants:
112
+ Dependencies: called new_constants_in(Object)
113
+ Dependencies: called new_constants_in(Object)
114
+ Dependencies: New constants:
115
+ Dependencies: called new_constants_in(Object)
116
+ Dependencies: New constants:
117
+ Dependencies: New constants:
118
+ Dependencies: New constants: Mocha
119
+ Dependencies: called new_constants_in(Object)
120
+ Dependencies: called new_constants_in(Object)
121
+ Dependencies: New constants:
122
+ Dependencies: called new_constants_in(Object)
123
+ Dependencies: called new_constants_in(Object)
124
+ Dependencies: called new_constants_in(Object)
125
+ Dependencies: New constants:
126
+ Dependencies: called new_constants_in(Object)
127
+ Dependencies: called new_constants_in(Object)
128
+ Dependencies: called new_constants_in(Object)
129
+ Dependencies: New constants:
130
+ Dependencies: New constants:
131
+ Dependencies: called new_constants_in(Object)
132
+ Dependencies: New constants:
133
+ Dependencies: New constants:
134
+ Dependencies: called new_constants_in(Object)
135
+ Dependencies: called new_constants_in(Object)
136
+ Dependencies: New constants:
137
+ Dependencies: New constants:
138
+ Dependencies: called new_constants_in(Object)
139
+ Dependencies: called new_constants_in(Object)
140
+ Dependencies: called new_constants_in(Object)
141
+ Dependencies: New constants:
142
+ Dependencies: New constants:
143
+ Dependencies: New constants:
144
+ Dependencies: called new_constants_in(Object)
145
+ Dependencies: New constants:
146
+ Dependencies: called new_constants_in(Object)
147
+ Dependencies: called new_constants_in(Object)
148
+ Dependencies: New constants:
149
+ Dependencies: called new_constants_in(Object)
150
+ Dependencies: New constants:
151
+ Dependencies: called new_constants_in(Object)
152
+ Dependencies: New constants:
153
+ Dependencies: New constants:
154
+ Dependencies: called new_constants_in(Object)
155
+ Dependencies: New constants:
156
+ Dependencies: called new_constants_in(Object)
157
+ Dependencies: New constants:
158
+ Dependencies: called new_constants_in(Object)
159
+ Dependencies: New constants:
160
+ Dependencies: called new_constants_in(Object)
161
+ Dependencies: New constants:
162
+ Dependencies: New constants:
163
+ Dependencies: called new_constants_in(Object)
164
+ Dependencies: New constants:
165
+ Dependencies: called new_constants_in(Object)
166
+ Dependencies: New constants:
167
+ Dependencies: called new_constants_in(Object)
168
+ Dependencies: New constants:
169
+ Dependencies: called new_constants_in(Object)
170
+ Dependencies: New constants:
171
+ Dependencies: called new_constants_in(Object)
172
+ Dependencies: New constants:
173
+ Dependencies: called new_constants_in(Object)
174
+ Dependencies: New constants:
175
+ Dependencies: New constants:
176
+ Dependencies: called new_constants_in(Object)
177
+ Dependencies: New constants:
178
+ Dependencies: called new_constants_in(Object)
179
+ Dependencies: New constants:
180
+ Dependencies: called new_constants_in(Object)
181
+ Dependencies: New constants:
182
+ Dependencies: called new_constants_in(Object)
183
+ Dependencies: New constants:
184
+ Dependencies: called new_constants_in(Object)
185
+ Dependencies: called new_constants_in(Object)
186
+ Dependencies: New constants:
187
+ Dependencies: New constants:
188
+ Dependencies: New constants:
189
+ Dependencies: called new_constants_in(Object)
190
+ Dependencies: New constants:
191
+ Dependencies: New constants:
192
+ Dependencies: called new_constants_in(Object)
193
+ Dependencies: called new_constants_in(Object)
194
+ Dependencies: New constants:
195
+ Dependencies: called new_constants_in(Object)
196
+ Dependencies: called new_constants_in(Object)
197
+ Dependencies: called new_constants_in(Object)
198
+ Dependencies: New constants:
199
+ Dependencies: New constants:
200
+ Dependencies: New constants:
201
+ Dependencies: called new_constants_in(Object)
202
+ Dependencies: New constants:
203
+ Dependencies: called new_constants_in(Object)
204
+ Dependencies: called new_constants_in(Object)
205
+ Dependencies: New constants:
206
+ Dependencies: New constants:
207
+ Dependencies: called new_constants_in(Object)
208
+ Dependencies: called new_constants_in(Object)
209
+ Dependencies: New constants:
210
+ Dependencies: New constants:
211
+ Dependencies: New constants:
212
+ Dependencies: New constants:
213
+ Dependencies: called new_constants_in(Object)
214
+ Dependencies: called new_constants_in(Object)
215
+ Dependencies: New constants:
216
+ Dependencies: New constants:
217
+ Dependencies: called new_constants_in(Object)
218
+ Dependencies: New constants:
219
+ Dependencies: called new_constants_in(Object)
220
+ Dependencies: New constants:
221
+ Dependencies: New constants:
222
+ Dependencies: New constants:
223
+ Dependencies: called new_constants_in(Object)
224
+ Dependencies: called new_constants_in(Object)
225
+ Dependencies: New constants:
226
+ Dependencies: called new_constants_in(Object)
227
+ Dependencies: New constants:
228
+ Dependencies: called new_constants_in(Object)
229
+ Dependencies: New constants: CSV
230
+ Dependencies: called new_constants_in(Object)
231
+ Dependencies: New constants:
232
+ Dependencies: New constants: Fixtures, FixtureClassNotFound, Fixture
233
+ Dependencies: called new_constants_in(Object)
234
+ Dependencies: called new_constants_in(Object)
235
+ Dependencies: New constants:
236
+ Dependencies: New constants:
237
+ Dependencies: called new_constants_in(Object)
238
+ Dependencies: called new_constants_in(Object)
239
+ Dependencies: called new_constants_in(Object)
240
+ Dependencies: New constants:
241
+ Dependencies: called new_constants_in(Object)
242
+ Dependencies: called new_constants_in(Object)
243
+ Dependencies: New constants:
244
+ Dependencies: called new_constants_in(Object)
245
+ Dependencies: New constants:
246
+ Dependencies: New constants:
247
+ Dependencies: called new_constants_in(Object)
248
+ Dependencies: called new_constants_in(Object)
249
+ Dependencies: New constants:
250
+ Dependencies: called new_constants_in(Object)
251
+ Dependencies: New constants:
252
+ Dependencies: New constants:
253
+ Dependencies: called new_constants_in(Object)
254
+ Dependencies: called new_constants_in(Object)
255
+ Dependencies: New constants:
256
+ Dependencies: called new_constants_in(Object)
257
+ Dependencies: New constants:
258
+ Dependencies: New constants:
259
+ Dependencies: called new_constants_in(Object)
260
+ Dependencies: New constants:
261
+ Dependencies: called new_constants_in(Object)
262
+ Dependencies: New constants:
263
+ Dependencies: called new_constants_in(Object)
264
+ Dependencies: New constants:
265
+ Dependencies: New constants:
266
+ Dependencies: called new_constants_in(Object)
267
+ Dependencies: New constants:
268
+ Dependencies: called new_constants_in(Object)
269
+ Dependencies: New constants:
270
+ Dependencies: New constants:
271
+ Dependencies: called new_constants_in(Object)
272
+ Dependencies: called new_constants_in(Object)
273
+ Dependencies: New constants:
274
+ Dependencies: called new_constants_in(Object)
275
+ Dependencies: New constants:
276
+ Dependencies: called new_constants_in(Object)
277
+ Dependencies: New constants:
278
+ Dependencies: called new_constants_in(Object)
279
+ Dependencies: New constants:
280
+ Dependencies: called new_constants_in(Object)
281
+ Dependencies: New constants:
282
+ Dependencies: called new_constants_in(Object)
283
+ Dependencies: New constants:
284
+ Dependencies: called new_constants_in(Object)
285
+ Dependencies: New constants:
286
+ Dependencies: called new_constants_in(Object)
287
+ Dependencies: New constants:
288
+ Dependencies: called new_constants_in(Object)
289
+ Dependencies: New constants:
290
+ Dependencies: called new_constants_in(Object)
291
+ Dependencies: New constants:
292
+ Dependencies: New constants:
293
+ Dependencies: called new_constants_in(Object)
294
+ Dependencies: called new_constants_in(Object)
295
+ Dependencies: New constants:
296
+ Dependencies: New constants:
297
+ Dependencies: called new_constants_in(Object)
298
+ Dependencies: New constants:
299
+ Dependencies: Error during loading, removing partially loaded constants
300
+ Dependencies: called new_constants_in(Object)
301
+ Dependencies: New constants:
302
+ Dependencies: called new_constants_in(Object)
303
+ Dependencies: New constants:
304
+ Dependencies: Error during loading, removing partially loaded constants
305
+ Dependencies: New constants:
306
+ SQL (0.000132) SET client_min_messages TO 'panic'
307
+ SQL (0.000083) SET client_min_messages TO 'notice'
308
+ SQL (0.000089) SET client_min_messages TO 'ERROR'
309
+ Dependencies: called new_constants_in(Object)
310
+ Dependencies: New constants: CreatePeopleConf
311
+ SQL (0.000488) SELECT version FROM schema_migrations
312
+ Migrating to CreatePeopleConf (1)
313
+ SQL (0.000127) SELECT version FROM schema_migrations
314
+ Dependencies: called new_constants_in(Object)
315
+ Dependencies: called new_constants_in(Object)
316
+ Dependencies: New constants:
317
+ Dependencies: New constants:
318
+ Dependencies: called new_constants_in(Object)
319
+ Dependencies: called new_constants_in(Object)
320
+ Dependencies: called new_constants_in(Object)
321
+ Dependencies: New constants:
322
+ Dependencies: called new_constants_in(Object)
323
+ Dependencies: called new_constants_in(Object)
324
+ Dependencies: New constants:
325
+ Dependencies: New constants:
326
+ Dependencies: called new_constants_in(Object)
327
+ Dependencies: called new_constants_in(Object)
328
+ Dependencies: New constants:
329
+ Dependencies: New constants:
330
+ Dependencies: New constants:
331
+ Dependencies: called new_constants_in(Object)
332
+ Dependencies: New constants:
333
+ Dependencies: New constants:
334
+ SQL (0.000141) BEGIN
335
+ Dependencies: called load_missing_constant(RealFkTest, :PersonType)
336
+ Dependencies: called load_missing_constant(Object, :PersonType)
337
+ Dependencies: called require_or_load("/home/gwolf/cvs/realfk/test/rails_root/app/models/person_type.rb", nil)
338
+ Dependencies: loading /home/gwolf/cvs/realfk/test/rails_root/app/models/person_type
339
+ Dependencies: called load_file("/home/gwolf/cvs/realfk/test/rails_root/app/models/person_type.rb", ["Models::PersonType", "PersonType"])
340
+ Dependencies: called new_constants_in("Models", :Object)
341
+ Dependencies: New constants: PersonType
342
+ Dependencies: loading /home/gwolf/cvs/realfk/test/rails_root/app/models/person_type.rb defined PersonType
343
+ PersonType Load (0.000614) SELECT * FROM "person_types" 
344
+ Dependencies: called load_missing_constant(RealFkTest, :Person)
345
+ Dependencies: called load_missing_constant(Object, :Person)
346
+ Dependencies: called require_or_load("/home/gwolf/cvs/realfk/test/rails_root/app/models/person.rb", nil)
347
+ Dependencies: loading /home/gwolf/cvs/realfk/test/rails_root/app/models/person
348
+ Dependencies: called load_file("/home/gwolf/cvs/realfk/test/rails_root/app/models/person.rb", ["Models::Person", "Person"])
349
+ Dependencies: called new_constants_in("Models", :Object)
350
+ Dependencies: New constants: Person
351
+ Dependencies: loading /home/gwolf/cvs/realfk/test/rails_root/app/models/person.rb defined Person
352
+ Person Load (0.000627) SELECT * FROM "people" LIMIT 1
353
+ Person Update (0.000000) PGError: ERROR: null value in column "person_type_id" violates not-null constraint
354
+ : UPDATE "people" SET "person_type_id" = NULL WHERE "id" = 2
355
+ SQL (0.000182) SET client_min_messages TO 'ERROR'
356
+ Person Update (0.000000) PGError: ERROR: insert or update on table "people" violates foreign key constraint "people_person_type_id_fkey"
357
+ DETAIL: Key (person_type_id)=(4) is not present in table "person_types".
358
+ : UPDATE "people" SET "person_type_id" = 4 WHERE "id" = 2
359
+ SQL (0.000185) SET client_min_messages TO 'ERROR'
360
+ Person Update (0.002232) UPDATE "people" SET "person_type_id" = 3 WHERE "id" = 2
361
+ Person Load (0.000336) SELECT * FROM "people" WHERE ("people"."id" = 2) 
362
+ Person Exists (0.000360) SELECT "people".id FROM "people" WHERE ("people"."id" = 2) AND ("people".person_type_id = 3) LIMIT 1
363
+ PersonType Load (0.000433) SELECT * FROM "person_types" WHERE ("person_types"."id" = 3) 
364
+ SQL (0.000223) ROLLBACK
365
+ SQL (0.000060) BEGIN
366
+ Dependencies: called load_missing_constant(RealFkTest, :Conference)
367
+ Dependencies: called load_missing_constant(Object, :Conference)
368
+ Dependencies: called require_or_load("/home/gwolf/cvs/realfk/test/rails_root/app/models/conference.rb", nil)
369
+ Dependencies: loading /home/gwolf/cvs/realfk/test/rails_root/app/models/conference
370
+ Dependencies: called load_file("/home/gwolf/cvs/realfk/test/rails_root/app/models/conference.rb", ["Models::Conference", "Conference"])
371
+ Dependencies: called new_constants_in("Models", :Object)
372
+ Dependencies: New constants: Conference
373
+ Dependencies: loading /home/gwolf/cvs/realfk/test/rails_root/app/models/conference.rb defined Conference
374
+ Conference Load (0.000496) SELECT * FROM "conferences" 
375
+ Person Load (0.000146) SELECT * FROM "people" 
376
+ Person Load (0.000740) SELECT * FROM "people" INNER JOIN "conferences_people" ON "people".id = "conferences_people".person_id WHERE ("conferences_people".conference_id = 3 ) 
377
+ SQL (0.000684) INSERT INTO "conferences_people" ("person_id", "conference_id") VALUES (3, 3)
378
+ SQL (0.000232) INSERT INTO "conferences_people" ("person_id", "conference_id") VALUES (1, 3)
379
+ SQL (0.000234) INSERT INTO "conferences_people" ("person_id", "conference_id") VALUES (2, 3)
380
+ Person Load (0.000151) SELECT * FROM "people" 
381
+ Conference Exists (0.000419) SELECT "conferences".id FROM "conferences" INNER JOIN "conferences_people" ON "conferences".id = "conferences_people".conference_id WHERE ("conferences"."id" = 3) AND ("conferences_people".person_id = 3 ) LIMIT 1
382
+ Conference Exists (0.000331) SELECT "conferences".id FROM "conferences" INNER JOIN "conferences_people" ON "conferences".id = "conferences_people".conference_id WHERE ("conferences"."id" = 3) AND ("conferences_people".person_id = 1 ) LIMIT 1
383
+ Conference Exists (0.000322) SELECT "conferences".id FROM "conferences" INNER JOIN "conferences_people" ON "conferences".id = "conferences_people".conference_id WHERE ("conferences"."id" = 3) AND ("conferences_people".person_id = 2 ) LIMIT 1
384
+ Person Load (0.000138) SELECT * FROM "people" 
385
+ Conference Load (0.000372) SELECT * FROM "conferences" INNER JOIN "conferences_people" ON "conferences".id = "conferences_people".conference_id WHERE ("conferences_people".person_id = 3 ) 
386
+ SQL (0.000260) DELETE FROM "conferences_people" WHERE person_id = 3 AND conference_id IN (3)
387
+ SQL (0.000235) INSERT INTO "conferences_people" ("person_id", "conference_id") VALUES (3, 4)
388
+ Conference Load (0.000196) SELECT * FROM "conferences" WHERE ("conferences"."id" = 3) 
389
+ Conference Load (0.000163) SELECT * FROM "conferences" WHERE ("conferences"."id" = 4) 
390
+ Person Exists (0.000361) SELECT "people".id FROM "people" INNER JOIN "conferences_people" ON "people".id = "conferences_people".person_id WHERE ("people"."id" = 3) AND ("conferences_people".conference_id = 4 ) LIMIT 1
391
+ Person Exists (0.000327) SELECT "people".id FROM "people" INNER JOIN "conferences_people" ON "people".id = "conferences_people".person_id WHERE ("people"."id" = 3) AND ("conferences_people".conference_id = 3 ) LIMIT 1
392
+ Conference Load (0.000134) SELECT * FROM "conferences" 
393
+ Conference Load (0.000366) SELECT * FROM "conferences" INNER JOIN "conferences_people" ON "conferences".id = "conferences_people".conference_id WHERE ("conferences_people".person_id = 1 ) 
394
+ SQL (0.000234) INSERT INTO "conferences_people" ("person_id", "conference_id") VALUES (1, 1)
395
+ SQL (0.000228) INSERT INTO "conferences_people" ("person_id", "conference_id") VALUES (1, 2)
396
+ SQL (0.000227) INSERT INTO "conferences_people" ("person_id", "conference_id") VALUES (1, 4)
397
+ Conference Load (0.000197) SELECT * FROM "conferences" WHERE ("conferences"."id" = 3) 
398
+ Conference Load (0.000162) SELECT * FROM "conferences" WHERE ("conferences"."id" = 4) 
399
+ Person Exists (0.000361) SELECT "people".id FROM "people" INNER JOIN "conferences_people" ON "people".id = "conferences_people".person_id WHERE ("people"."id" = 1) AND ("conferences_people".conference_id = 3 ) LIMIT 1
400
+ Person Exists (0.000332) SELECT "people".id FROM "people" INNER JOIN "conferences_people" ON "people".id = "conferences_people".person_id WHERE ("people"."id" = 1) AND ("conferences_people".conference_id = 4 ) LIMIT 1
401
+ SQL (0.000112) ROLLBACK
402
+ SQL (0.000114) BEGIN
403
+ SQL (0.000056) ROLLBACK
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/console'
@@ -0,0 +1,2 @@
1
+ init_path = "#{RAILS_ROOT}/../../init.rb"
2
+ silence_warnings { eval(IO.read(init_path), binding, init_path) }
@@ -0,0 +1,27 @@
1
+ # Load the environment
2
+ ENV['RAILS_ENV'] ||= 'postgresql'
3
+ require File.dirname(__FILE__) + '/rails_root/config/environment.rb'
4
+
5
+ # Load the testing framework
6
+ require 'test_help'
7
+ silence_warnings { RAILS_ENV = ENV['RAILS_ENV'] }
8
+
9
+ # Run the migrations
10
+ ActiveRecord::Migrator.migrate("#{RAILS_ROOT}/db/migrate")
11
+
12
+ # Setup the fixtures path
13
+ Test::Unit::TestCase.fixture_path = File.dirname(__FILE__) + "/fixtures/"
14
+ $LOAD_PATH.unshift(Test::Unit::TestCase.fixture_path)
15
+
16
+ class Test::Unit::TestCase #:nodoc:
17
+ def create_fixtures(*table_names)
18
+ if block_given?
19
+ Fixtures.create_fixtures(Test::Unit::TestCase.fixture_path, table_names) { yield }
20
+ else
21
+ Fixtures.create_fixtures(Test::Unit::TestCase.fixture_path, table_names)
22
+ end
23
+ end
24
+
25
+ self.use_transactional_fixtures = true
26
+ self.use_instantiated_fixtures = false
27
+ end
@@ -0,0 +1,66 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class RealFkTest < ActiveSupport::TestCase
4
+ def test_relation_defined
5
+ assert Person.column_names.include?('person_type_id')
6
+ end
7
+
8
+ def test_constraints_in_place
9
+ types = PersonType.find(:all)
10
+
11
+ # We didn't specify any validations in the model - So a person without a
12
+ # person_type must be valid, although will bomb when saving it.
13
+ person = Person.find(:first)
14
+ person.person_type = nil
15
+ assert person.valid?
16
+ assert_raises(ActiveRecord::StatementInvalid) { person.save }
17
+
18
+ # An exception was raised - The DB won't like it!
19
+ ActiveRecord::Base.connection.reconnect!
20
+
21
+ # ...Of course, giving an invalid person type also fails
22
+ highest_type = types.sort {|a,b| a.id <=> b.id}.last
23
+ person.person_type_id = highest_type.id + 1
24
+ assert person.valid?
25
+ assert_raises(ActiveRecord::StatementInvalid) { person.save }
26
+
27
+ # An exception was raised - The DB won't like it!
28
+ ActiveRecord::Base.connection.reconnect!
29
+
30
+ # But if it is a valid type, the person will be properly and finally saved
31
+ person.person_type_id = highest_type.id
32
+ assert person.save
33
+
34
+ # Finally, check the relation is in effect and Rails gets it. It looks
35
+ # contorted... :-}
36
+ people = highest_type.people
37
+ assert people.include?(Person.find(person.id))
38
+ assert_equal(highest_type.id, person.person_type.id)
39
+ end
40
+
41
+ def test_habtm
42
+ (c1, c2) = Conference.find(:all).sort_by{rand}
43
+
44
+ # Just set up some relations and check they get saved...
45
+ # Everybody goes to conference 1!
46
+ c1.people = Person.find(:all)
47
+ Person.find(:all).map {|p| assert p.conferences.include?(c1) }
48
+
49
+ # Person 2 will only go to conference 2, not to conference 1.
50
+ # Rails is lazy on related items - Force it to reload.
51
+ (p1, p2) = Person.find(:all).sort_by{rand}
52
+ p1.conferences = [c2]
53
+ c1.reload
54
+ c2.reload
55
+ assert c2.people.include?(p1)
56
+ assert ! c1.people.include?(p1)
57
+
58
+ # Person 2 will only go every conference!
59
+ # Rails is lazy on related items - Force it to reload.
60
+ p2.conferences = Conference.find(:all)
61
+ c1.reload
62
+ c2.reload
63
+ assert c1.people.include?(p2)
64
+ assert c2.people.include?(p2)
65
+ end
66
+ end
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: real_fk
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Gunnar Wolf
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-11-25 00:00:00 -06:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: This plugin extends the base <tt>Rails ActiveRecord::Migration</tt> with some commonly used functionality, aiming at keeping your migrations short, easy to understand and meaningful.
17
+ email: gwolf@gwolf.org
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README
24
+ files:
25
+ - test/rails_root
26
+ - test/rails_root/log
27
+ - test/rails_root/log/postgresql.log
28
+ - test/rails_root/script
29
+ - test/rails_root/script/console
30
+ - test/rails_root/config
31
+ - test/rails_root/config/boot.rb
32
+ - test/rails_root/config/database.yml
33
+ - test/rails_root/config/environments
34
+ - test/rails_root/config/environments/postgresql.rb
35
+ - test/rails_root/config/environments/sqlite3.rb
36
+ - test/rails_root/config/environments/mysql.rb
37
+ - test/rails_root/config/environments/sqlite.rb
38
+ - test/rails_root/config/routes.rb
39
+ - test/rails_root/config/environment.rb
40
+ - test/rails_root/README
41
+ - test/rails_root/db
42
+ - test/rails_root/db/migrate
43
+ - test/rails_root/db/migrate/001_create_people_conf.rb
44
+ - test/rails_root/vendor
45
+ - test/rails_root/vendor/plugins
46
+ - test/rails_root/vendor/plugins/real_fk
47
+ - test/rails_root/vendor/plugins/real_fk/init.rb
48
+ - test/rails_root/vendor/rails
49
+ - test/rails_root/app
50
+ - test/rails_root/app/models
51
+ - test/rails_root/app/models/person.rb
52
+ - test/rails_root/app/models/conference.rb
53
+ - test/rails_root/app/models/person_type.rb
54
+ - test/rails_root/app/controllers
55
+ - test/rails_root/app/controllers/application.rb
56
+ - test/test_helper.rb
57
+ - test/unit
58
+ - test/unit/real_fk_test.rb
59
+ - lib/real_fk.rb
60
+ - Manifest.txt
61
+ - LICENSE
62
+ - README
63
+ - CHANGELOG
64
+ has_rdoc: true
65
+ homepage: http://realfk.rubyforge.org/
66
+ post_install_message:
67
+ rdoc_options:
68
+ - --line-numbers
69
+ - --inline-source
70
+ - charset
71
+ - utf-8
72
+ require_paths:
73
+ - lib
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: "0"
79
+ version:
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: "0"
85
+ version:
86
+ requirements: []
87
+
88
+ rubyforge_project: realfk
89
+ rubygems_version: 1.2.0
90
+ signing_key:
91
+ specification_version: 2
92
+ summary: Rails plugin aimed towards simplifying declaration and usage of tables with proper foreign key constraints.
93
+ test_files: []
94
+