active-record-binder 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/README.md +217 -0
  2. data/bin/arb +13 -0
  3. data/doc/Binder.html +150 -0
  4. data/doc/Binder/AR.html +1880 -0
  5. data/doc/Binder/Command.html +252 -0
  6. data/doc/Binder/Help.html +374 -0
  7. data/doc/Binder/Migrate.html +682 -0
  8. data/doc/Binder/Strategy.html +550 -0
  9. data/doc/Binder/Version.html +285 -0
  10. data/doc/Class.html +220 -0
  11. data/doc/CommandParser.html +268 -0
  12. data/doc/CommandParser/ParseError.html +123 -0
  13. data/doc/DeferedDelegator.html +414 -0
  14. data/doc/MigrationProcessError.html +123 -0
  15. data/doc/MigrationVersionError.html +123 -0
  16. data/doc/String.html +245 -0
  17. data/doc/_index.html +256 -0
  18. data/doc/class_list.html +53 -0
  19. data/doc/css/common.css +1 -0
  20. data/doc/css/full_list.css +57 -0
  21. data/doc/css/style.css +328 -0
  22. data/doc/file.README.html +300 -0
  23. data/doc/file_list.html +55 -0
  24. data/doc/frames.html +28 -0
  25. data/doc/index.html +300 -0
  26. data/doc/js/app.js +214 -0
  27. data/doc/js/full_list.js +173 -0
  28. data/doc/js/jquery.js +4 -0
  29. data/doc/method_list.html +348 -0
  30. data/doc/top-level-namespace.html +114 -0
  31. data/extras/cli_help.png +0 -0
  32. data/lib/active_record_binder.rb +21 -37
  33. data/lib/cli/command.rb +101 -0
  34. data/lib/cli/command_parser.rb +29 -0
  35. data/lib/cli/commands/commands.rb +4 -0
  36. data/lib/cli/commands/help.rb +35 -0
  37. data/lib/cli/commands/migrate.rb +77 -0
  38. data/lib/cli/commands/version.rb +16 -0
  39. data/lib/cli/core_ext.rb +21 -0
  40. data/lib/defered_delegator.rb +69 -0
  41. data/lib/version.rb +3 -0
  42. data/test/active_record_binder_test.rb +262 -0
  43. data/test/foo.sqlite3 +0 -0
  44. data/test/migrations.rb +29 -0
  45. data/test/minitest_helper.rb +15 -0
  46. data/test/mocks.rb +24 -0
  47. metadata +62 -5
@@ -0,0 +1,217 @@
1
+ [ActiveRecordBinder](https://rubygems.org/gems/active-record-binder)
2
+ ============
3
+ ```
4
+ arb -v
5
+ # => 1.2.0
6
+
7
+ arb --changelog
8
+ # V 1.2.0 : Bug fixes, refactoring and introduction of the new command-line-tool : `arb`
9
+ # V 1.1.0 : Introducing delegation for ActiveRecord::Base relation methods.
10
+ # V 1.0.1 : Minor fixes and Documentation creation.
11
+ # V 1.0.0 : Release
12
+ #
13
+ ```
14
+ A Ruby library for an easier interfacing with ActiveRecord. And an easier way to create elegant migrations.
15
+
16
+ # Installation
17
+ `gem install active-record-binder`
18
+
19
+ # Why Binder ? What the frak is this ?
20
+ I needed a tool to ease the creation of little Plugs and Adapters for ActiveRecord.
21
+
22
+ The idea is that you Bind a class to ActiveRecord by subclassing it with Binder::AR.
23
+ You can specify your own methods and delegate to ActiveRecord whenever you need.
24
+
25
+ It's kind of a Proxy on steroids, that will do a lot for you.
26
+
27
+ ## Show me !
28
+ You want to create a Plug for your sqlite database :
29
+
30
+ ```ruby
31
+ class SqlitePlug < Binder::AR
32
+ end
33
+ ```
34
+
35
+ Those lines will create a new `MySqlPlug`, and it will connect to the database specified by your `ENV['APP_DB']`.
36
+ Also, the database adapter defaults to `:sqlite3`.
37
+
38
+ Now. All this is fine. But you want more :
39
+ * You want to select a precise database without using `ENV['APP_DB']`;
40
+ * Your application uses MySQL.
41
+
42
+ ```ruby
43
+ class MySqlPlug < Binder::AR
44
+ database :db
45
+ adapter :mysql
46
+ connect_with user: 'Foo', password: 'Bar', host: 'localhost'
47
+ end
48
+ ```
49
+
50
+ As you can see : you can specify a database or an adapter by passing a `Symbol` or a `String` to both the
51
+ * `database()` and the
52
+ * `adapter()` methods.
53
+
54
+ The `connect_with()` method can be used to pass a `Hash` of options to the `ActiveRecord::Base.establish_connexion()` call.
55
+
56
+ _Please notice that all your instances of MySqlPlug will use those values once defined this way._
57
+
58
+ ## How do we use this ?
59
+
60
+ ```ruby
61
+ class MySqlPlug < Binder::AR
62
+ database :db
63
+ adapter :mysql
64
+ connect_with user: 'Foo', password: 'Bar', host: 'localhost'
65
+
66
+ def find args
67
+ # But you could use a delegator
68
+ table.find args
69
+ end
70
+ end
71
+
72
+ # A Model
73
+ class Foo
74
+ def initialize
75
+ # Will bind this instance of the MySqlPlug to the `foos` table
76
+ @plug = MySqlPlug.new :foo
77
+ end
78
+
79
+ def find
80
+ # But you could use a delegator
81
+ @plug.find
82
+ end
83
+ end
84
+ ```
85
+
86
+ **Note :** You can use the `table` method on any instance of your Plug to get the table class (An ActiveRecord Class Object).
87
+
88
+ ```ruby
89
+ @plug = MySqlPlug.new :foo
90
+ table = @plug.table
91
+ # => MySqlPlug::Foo
92
+ table.find # ActiveRecord method call.
93
+ # => [<FooObject#1>, <FooObject#2, ...]
94
+ ```
95
+
96
+ Notice how neatly namespaced is the ActiveRecord table class. This way we won't step over our `Foo` model.
97
+
98
+ # Relations
99
+ If it pleases you, you can create your relations directly in the Binder class. Those methods call are delegated to the underlying table model when initiated.
100
+
101
+ ```ruby
102
+ class FooBinder < Binder::AR
103
+ has_one :bar
104
+ end
105
+ class BarBinder < Binder::AR
106
+ belongs_to :foo
107
+ end
108
+
109
+ # And (if the table are accordingly populated, see "The Migration System", below) :
110
+ foo = FooBinder.new(:foo).table
111
+ foo.first.bar # => <BarObject>
112
+ ```
113
+
114
+ Delegated methods are the following : `has_many`, `has_one`, `has_and_belongs_to_many`, `belongs_to`.
115
+
116
+ # The Migration System
117
+
118
+ I've always found the ActiveRecord::Migration system a bit of a pain to use.
119
+
120
+ Therefore, I took the liberty of using pieces of [`_Why's Camping Web Framework's`](https://github.com/camping/camping/) migration system.
121
+ You can now create your migrations this way :
122
+
123
+ ```ruby
124
+ class CreateFooTable < MySqlPlug::Version 1.0
125
+ def self.up
126
+ create_table :foos do |t|
127
+ t.string :name
128
+ t.timestamps
129
+ end
130
+ end
131
+
132
+ def self.down
133
+ drop_table :foos
134
+ end
135
+ end
136
+
137
+ class CreateBarTable < MySqlPlug::Version 1.1
138
+ def self.up
139
+ create_table :bars do |t|
140
+ t.string :title
141
+ t.timestamps
142
+ end
143
+ end
144
+
145
+ def self.down
146
+ drop_table :bars
147
+ end
148
+ end
149
+
150
+ # You can get the migration version for a pecular migration class.
151
+ CreateFooTable.version # => 1.0
152
+ CreateBarTable.version # => 1.1
153
+ ```
154
+
155
+ Isn't it neat ?.
156
+
157
+ Now, boy : just use the `migrate` method to execute your migrations.
158
+
159
+ ```ruby
160
+ MySqlPlug.migrate
161
+ # => 1.1
162
+ ```
163
+ This executes everything up to the latest migration.
164
+ But `migrate()` can also take a version number as an argument.
165
+
166
+ ```ruby
167
+ MySqlPlug.migrate 0
168
+ # => 0.0
169
+ ```
170
+ This, will migrate everything down, reverting the changes as specified in each reverted migration `self.down` method.
171
+ ```ruby
172
+ MySqlPlug.migrate 1.0
173
+ # => 1.0
174
+ ```
175
+ And finally, this will migrate up until it hits 1.0.
176
+
177
+ # The Command Line Tool
178
+ Active Record Binder ships with a neat little CLI : `arb`
179
+
180
+ ARB is a small easily extandable Command Line Interface. And it's pretty. Beautiful colors everywhere. Awesome. Seriously.
181
+ To use it :
182
+ ```
183
+ $ arb version
184
+ # => Binder::AR::Version => 1.2.0
185
+ ```
186
+
187
+ You can display the help using `arb help` or `arb -h`
188
+
189
+ But, the most intersting part of this CLI is the migrate command. You can easily run your migrations for a specific plug :
190
+ ```
191
+ $ arb migrate --version 1.1 --directory migrations/ --adapter MySqlitePlug
192
+ ```
193
+ Will migrate to 1.1, using the migrations found in the `migrations/` directory and calling `MySqlitePlug.migrate`.
194
+
195
+ You can specify multiples options, and there is an alternative syntax :
196
+ ```
197
+ # => You can specify multiple directories through `--directory` or `--d`
198
+ $ arb migrate -v 0 -d migrations/foo/ migrations/bar -a MySqlitePlug
199
+
200
+ # => You can load directories recursively with `-r` or `--recursive`
201
+ $ arb migrate -v 0 --recursive migrations/ --plug MySqlitePlug
202
+
203
+ # => You can can also load files using `-f` or `--file`
204
+ $ arb migrate -v 1.0 -f migrations/foo/create_foo_table.rb --adapter MySqlitePlug
205
+ ```
206
+
207
+ <img src="https://raw.github.com/gabriel-dehan/ActiveRecordBinder/master/extras/cli_help.png" alt="Command Line Interface screenshot"/>
208
+
209
+ # Want to know more ?
210
+ [Checkout the documentation !](http://rubydoc.info/gems/active-record-binder/1.0.1/frames)
211
+ Or dive in, the code is pretty straightforward and well documented. And there is a lot of tests.
212
+
213
+ # Want to contribute ?
214
+ Please, do fork and pull request !
215
+
216
+ ## Road map:
217
+ * Maybe create other Binder, like MongoDB, Datamapper, like `Binder::Mongo`, `Binder::DataMapper`. But the gem's name would have to change.
data/bin/arb ADDED
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift File.dirname(__FILE__) + '/../lib'
4
+
5
+ require 'cli/commands/commands'
6
+
7
+ begin
8
+ Binder::Command.new ARGV
9
+ rescue CommandParser::ParseError => ex
10
+ STDERR.puts "/!\\ #{ex.message}".colorize(:red)
11
+ puts ">> use " + "`#{File.basename($0)} --help` ".colorize(:green) + "for more details."
12
+ exit 1
13
+ end
@@ -0,0 +1,150 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ <title>
7
+ Module: Binder
8
+
9
+ &mdash; Documentation by YARD 0.8.4.1
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" media="screen" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ hasFrames = window.top.frames.main ? true : false;
19
+ relpath = '';
20
+ framesUrl = "frames.html#!" + escape(window.location.href);
21
+ </script>
22
+
23
+
24
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
25
+
26
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
27
+
28
+
29
+ </head>
30
+ <body>
31
+ <div id="header">
32
+ <div id="menu">
33
+
34
+ <a href="_index.html">Index (B)</a> &raquo;
35
+
36
+
37
+ <span class="title">Binder</span>
38
+
39
+
40
+ <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
41
+ </div>
42
+
43
+ <div id="search">
44
+
45
+ <a class="full_list_link" id="class_list_link"
46
+ href="class_list.html">
47
+ Class List
48
+ </a>
49
+
50
+ <a class="full_list_link" id="method_list_link"
51
+ href="method_list.html">
52
+ Method List
53
+ </a>
54
+
55
+ <a class="full_list_link" id="file_list_link"
56
+ href="file_list.html">
57
+ File List
58
+ </a>
59
+
60
+ </div>
61
+ <div class="clear"></div>
62
+ </div>
63
+
64
+ <iframe id="search_frame"></iframe>
65
+
66
+ <div id="content"><h1>Module: Binder
67
+
68
+
69
+
70
+ </h1>
71
+
72
+ <dl class="box">
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+ <dt class="r1 last">Defined in:</dt>
82
+ <dd class="r1 last">lib/active_record_binder.rb<span class="defines">,<br />
83
+ lib/cli/command.rb,<br /> lib/cli/commands/help.rb,<br /> lib/cli/commands/migrate.rb,<br /> lib/cli/commands/version.rb,<br /> lib/version.rb</span>
84
+ </dd>
85
+
86
+ </dl>
87
+ <div class="clear"></div>
88
+
89
+ <h2>Overview</h2><div class="docstring">
90
+ <div class="discussion">
91
+
92
+ <p>Namespace containing classes to create binder to. A binder is simply a tool
93
+ to use for Databases plugs or adaptors building.</p>
94
+
95
+
96
+ </div>
97
+ </div>
98
+ <div class="tags">
99
+
100
+
101
+ </div><h2>Defined Under Namespace</h2>
102
+ <p class="children">
103
+
104
+
105
+
106
+
107
+ <strong class="classes">Classes:</strong> <span class='object_link'><a href="Binder/AR.html" title="Binder::AR (class)">AR</a></span>, <span class='object_link'><a href="Binder/Command.html" title="Binder::Command (class)">Command</a></span>, <span class='object_link'><a href="Binder/Help.html" title="Binder::Help (class)">Help</a></span>, <span class='object_link'><a href="Binder/Migrate.html" title="Binder::Migrate (class)">Migrate</a></span>, <span class='object_link'><a href="Binder/Strategy.html" title="Binder::Strategy (class)">Strategy</a></span>, <span class='object_link'><a href="Binder/Version.html" title="Binder::Version (class)">Version</a></span>
108
+
109
+
110
+ </p>
111
+
112
+ <h2>Constant Summary</h2>
113
+
114
+ <dl class="constants">
115
+
116
+ <dt id="VERSION-constant" class="">VERSION =
117
+ <div class="docstring">
118
+ <div class="discussion">
119
+
120
+
121
+ </div>
122
+ </div>
123
+ <div class="tags">
124
+
125
+
126
+ </div>
127
+ </dt>
128
+ <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>1.2.0</span><span class='tstring_end'>&quot;</span></span></pre></dd>
129
+
130
+ </dl>
131
+
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+ </div>
142
+
143
+ <div id="footer">
144
+ Generated on Thu Feb 21 02:06:16 2013 by
145
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
146
+ 0.8.4.1 (ruby-1.9.3).
147
+ </div>
148
+
149
+ </body>
150
+ </html>
@@ -0,0 +1,1880 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ <title>
7
+ Class: Binder::AR
8
+
9
+ &mdash; Documentation by YARD 0.8.4.1
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="../css/style.css" type="text/css" media="screen" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="../css/common.css" type="text/css" media="screen" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ hasFrames = window.top.frames.main ? true : false;
19
+ relpath = '../';
20
+ framesUrl = "../frames.html#!" + escape(window.location.href);
21
+ </script>
22
+
23
+
24
+ <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
25
+
26
+ <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
27
+
28
+
29
+ </head>
30
+ <body>
31
+ <div id="header">
32
+ <div id="menu">
33
+
34
+ <a href="../_index.html">Index (A)</a> &raquo;
35
+ <span class='title'><span class='object_link'><a href="../Binder.html" title="Binder (module)">Binder</a></span></span>
36
+ &raquo;
37
+ <span class="title">AR</span>
38
+
39
+
40
+ <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
41
+ </div>
42
+
43
+ <div id="search">
44
+
45
+ <a class="full_list_link" id="class_list_link"
46
+ href="../class_list.html">
47
+ Class List
48
+ </a>
49
+
50
+ <a class="full_list_link" id="method_list_link"
51
+ href="../method_list.html">
52
+ Method List
53
+ </a>
54
+
55
+ <a class="full_list_link" id="file_list_link"
56
+ href="../file_list.html">
57
+ File List
58
+ </a>
59
+
60
+ </div>
61
+ <div class="clear"></div>
62
+ </div>
63
+
64
+ <iframe id="search_frame"></iframe>
65
+
66
+ <div id="content"><h1>Class: Binder::AR
67
+
68
+
69
+
70
+ </h1>
71
+
72
+ <dl class="box">
73
+
74
+ <dt class="r1">Inherits:</dt>
75
+ <dd class="r1">
76
+ <span class="inheritName">Object</span>
77
+
78
+ <ul class="fullTree">
79
+ <li>Object</li>
80
+
81
+ <li class="next">Binder::AR</li>
82
+
83
+ </ul>
84
+ <a href="#" class="inheritanceTree">show all</a>
85
+
86
+ </dd>
87
+
88
+
89
+
90
+
91
+ <dt class="r2">Extended by:</dt>
92
+ <dd class="r2"><span class='object_link'><a href="../DeferedDelegator.html" title="DeferedDelegator (module)">DeferedDelegator</a></span></dd>
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+ <dt class="r1 last">Defined in:</dt>
101
+ <dd class="r1 last">lib/active_record_binder.rb</dd>
102
+
103
+ </dl>
104
+ <div class="clear"></div>
105
+
106
+ <h2>Overview</h2><div class="docstring">
107
+ <div class="discussion">
108
+
109
+ <p>Active Record Binder class. You need to inherit from it to create your Plug
110
+ or Adaptor.</p>
111
+
112
+
113
+ </div>
114
+ </div>
115
+ <div class="tags">
116
+
117
+ <div class="examples">
118
+ <p class="tag_title">Examples:</p>
119
+
120
+
121
+ <pre class="example code"><code>class ARSqlitePlug &lt; Binder::AR
122
+ database 'db.sqlite3'
123
+ adapter :sqlite3</code></pre>
124
+
125
+
126
+ <pre class="example code"><code># Your methods
127
+ end
128
+ #
129
+ # Or
130
+ class ARMySqlPlug &lt; Binder::AR
131
+ database 'db'
132
+ adapter :mysql
133
+ connect_with user: 'Foo', password: 'Bar', host: 'localhost'</code></pre>
134
+
135
+
136
+ <pre class="example code"><code># Your methods
137
+ end</code></pre>
138
+
139
+
140
+ <pre class="example code"><code><span class='comment'># You need to initialize the plug by passing it a table to handle
141
+ </span><span class='id identifier rubyid_plug'>plug</span> <span class='op'>=</span> <span class='const'>ARSqlitePlug</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='symbol'>:table_for_foo</span>
142
+ <span class='id identifier rubyid_foo'>foo</span> <span class='op'>=</span> <span class='id identifier rubyid_plug'>plug</span><span class='period'>.</span><span class='id identifier rubyid_table'>table</span> <span class='comment'># =&gt; the TableForFoo class, which inherit from ActiveRecord::Base.
143
+ </span><span class='comment'># Foo is an active record object linked to a table, you can use it as you would usually.
144
+ </span><span class='id identifier rubyid_foo'>foo</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span></code></pre>
145
+
146
+
147
+ <pre class="example code"><code><span class='comment'># Furthermore, the Binder::AR class, has some interesting class methods :
148
+ </span><span class='comment'>#
149
+ </span><span class='const'>Binder</span><span class='op'>::</span><span class='const'>AR</span><span class='op'>::</span><span class='id identifier rubyid_default_database'>default_database</span> <span class='comment'># =&gt; ENV['APP_DB'] # This value would be used if no database had been set during the plus creation.
150
+ </span><span class='const'>Binder</span><span class='op'>::</span><span class='const'>AR</span><span class='op'>::</span><span class='id identifier rubyid_database'>database</span> <span class='comment'># =&gt; Returns the current database used by the Binder in general (Would default to ENV['APP_DB'] if not specified)
151
+ </span><span class='const'>ARSqlitePlug</span><span class='op'>::</span><span class='id identifier rubyid_database'>database</span> <span class='comment'># =&gt; :db (Works the same and returns this Plug Class's database parameters)
152
+ </span><span class='comment'>#
153
+ </span><span class='comment'># The same goes for the adapters :
154
+ </span><span class='const'>Binder</span><span class='op'>::</span><span class='const'>AR</span><span class='op'>::</span><span class='id identifier rubyid_default_adapter'>default_adapter</span> <span class='comment'># =&gt; :sqlite3
155
+ </span><span class='const'>ARMySqlPlug</span><span class='op'>::</span><span class='id identifier rubyid_adapter'>adapter</span> <span class='comment'># =&gt; :mysql
156
+ </span><span class='comment'>#
157
+ </span><span class='comment'># And connection parameters
158
+ </span><span class='const'>Binder</span><span class='op'>::</span><span class='const'>AR</span><span class='op'>::</span><span class='id identifier rubyid_connection'>connection</span> <span class='comment'># =&gt; {}
159
+ </span><span class='const'>ARMySqlPlug</span><span class='op'>::</span><span class='id identifier rubyid_connection'>connection</span> <span class='comment'># =&gt; { :user =&gt; 'Foo', :password =&gt; 'Bar', :host =&gt; 'localhost' }</span></code></pre>
160
+
161
+ </div>
162
+
163
+
164
+ </div>
165
+
166
+
167
+
168
+ <h2>Instance Attribute Summary <small>(<a href="#" class="summary_toggle">collapse</a>)</small></h2>
169
+ <ul class="summary">
170
+
171
+ <li class="public ">
172
+ <span class="summary_signature">
173
+
174
+ <a href="#table-instance_method" title="#table (instance method)">- (Object) <strong>table</strong> </a>
175
+
176
+
177
+
178
+ </span>
179
+
180
+
181
+
182
+
183
+ <span class="note title readonly">readonly</span>
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+ <span class="summary_desc"><div class='inline'></div></span>
194
+
195
+ </li>
196
+
197
+
198
+ <li class="public ">
199
+ <span class="summary_signature">
200
+
201
+ <a href="#table_name-instance_method" title="#table_name (instance method)">- (Object) <strong>table_name</strong> </a>
202
+
203
+
204
+
205
+ </span>
206
+
207
+
208
+
209
+
210
+ <span class="note title readonly">readonly</span>
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+
220
+ <span class="summary_desc"><div class='inline'></div></span>
221
+
222
+ </li>
223
+
224
+
225
+ </ul>
226
+
227
+
228
+
229
+
230
+
231
+ <h2>
232
+ Class Method Summary
233
+ <small>(<a href="#" class="summary_toggle">collapse</a>)</small>
234
+ </h2>
235
+
236
+ <ul class="summary">
237
+
238
+ <li class="public ">
239
+ <span class="summary_signature">
240
+
241
+ <a href="#__check_migration_version-class_method" title="__check_migration_version (class method)">+ (Object) <strong>__check_migration_version</strong>(version) </a>
242
+
243
+
244
+
245
+ </span>
246
+
247
+
248
+
249
+
250
+
251
+
252
+
253
+
254
+
255
+ <span class="summary_desc"><div class='inline'>
256
+ <p>Private : checks the migration version number.</p>
257
+ </div></span>
258
+
259
+ </li>
260
+
261
+
262
+ <li class="public ">
263
+ <span class="summary_signature">
264
+
265
+ <a href="#__create_meta_data_table_for-class_method" title="__create_meta_data_table_for (class method)">+ (Object) <strong>__create_meta_data_table_for</strong>(schema) </a>
266
+
267
+
268
+
269
+ </span>
270
+
271
+
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+ <span class="summary_desc"><div class='inline'>
280
+ <p>Private : Create a table for the current meta schema.</p>
281
+ </div></span>
282
+
283
+ </li>
284
+
285
+
286
+ <li class="public ">
287
+ <span class="summary_signature">
288
+
289
+ <a href="#__create_meta_schema_class-class_method" title="__create_meta_schema_class (class method)">+ (Object) <strong>__create_meta_schema_class</strong>(klass) </a>
290
+
291
+
292
+
293
+ </span>
294
+
295
+
296
+
297
+
298
+
299
+
300
+
301
+
302
+
303
+ <span class="summary_desc"><div class='inline'>
304
+ <p>Private: Creates the meta schema class, and binds it to the current
305
+ Namespace.</p>
306
+ </div></span>
307
+
308
+ </li>
309
+
310
+
311
+ <li class="public ">
312
+ <span class="summary_signature">
313
+
314
+ <a href="#adapter-class_method" title="adapter (class method)">+ (Object) <strong>adapter</strong>(adpt = default_adapter) </a>
315
+
316
+
317
+
318
+ (also: adaptor)
319
+
320
+ </span>
321
+
322
+
323
+
324
+
325
+
326
+
327
+
328
+
329
+
330
+ <span class="summary_desc"><div class='inline'>
331
+ <p>Set the current adapter.</p>
332
+ </div></span>
333
+
334
+ </li>
335
+
336
+
337
+ <li class="public ">
338
+ <span class="summary_signature">
339
+
340
+ <a href="#connection-class_method" title="connection (class method)">+ (Object) <strong>connection</strong>(opts = {}) </a>
341
+
342
+
343
+
344
+ (also: connect_with)
345
+
346
+ </span>
347
+
348
+
349
+
350
+
351
+
352
+
353
+
354
+
355
+
356
+ <span class="summary_desc"><div class='inline'>
357
+ <p>Set the current connection parameters.</p>
358
+ </div></span>
359
+
360
+ </li>
361
+
362
+
363
+ <li class="public ">
364
+ <span class="summary_signature">
365
+
366
+ <a href="#connection_data-class_method" title="connection_data (class method)">+ (Object) <strong>connection_data</strong> </a>
367
+
368
+
369
+
370
+ </span>
371
+
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+
380
+ <span class="summary_desc"><div class='inline'>
381
+ <p>Retrieves a clean set of connection data to establish a connection.</p>
382
+ </div></span>
383
+
384
+ </li>
385
+
386
+
387
+ <li class="public ">
388
+ <span class="summary_signature">
389
+
390
+ <a href="#database-class_method" title="database (class method)">+ (Object) <strong>database</strong>(db = default_database) </a>
391
+
392
+
393
+
394
+ </span>
395
+
396
+
397
+
398
+
399
+
400
+
401
+
402
+
403
+
404
+ <span class="summary_desc"><div class='inline'>
405
+ <p>Set the current database.</p>
406
+ </div></span>
407
+
408
+ </li>
409
+
410
+
411
+ <li class="public ">
412
+ <span class="summary_signature">
413
+
414
+ <a href="#default_adapter-class_method" title="default_adapter (class method)">+ (Object) <strong>default_adapter</strong> </a>
415
+
416
+
417
+
418
+ </span>
419
+
420
+
421
+
422
+
423
+
424
+
425
+
426
+
427
+
428
+ <span class="summary_desc"><div class='inline'>
429
+ <p>Retrieves de default database.</p>
430
+ </div></span>
431
+
432
+ </li>
433
+
434
+
435
+ <li class="public ">
436
+ <span class="summary_signature">
437
+
438
+ <a href="#default_database-class_method" title="default_database (class method)">+ ('APP_DB'\) <strong>default_database</strong> </a>
439
+
440
+
441
+
442
+ </span>
443
+
444
+
445
+
446
+
447
+
448
+
449
+
450
+
451
+
452
+ <span class="summary_desc"><div class='inline'>
453
+ <p>Retrieves de default database.</p>
454
+ </div></span>
455
+
456
+ </li>
457
+
458
+
459
+ <li class="public ">
460
+ <span class="summary_signature">
461
+
462
+ <a href="#meta_schema-class_method" title="meta_schema (class method)">+ (Object) <strong>meta_schema</strong> </a>
463
+
464
+
465
+
466
+ </span>
467
+
468
+
469
+
470
+
471
+
472
+
473
+
474
+
475
+
476
+ <span class="summary_desc"><div class='inline'>
477
+ <p>Private: Get the Class holding the current migration metadatas.</p>
478
+ </div></span>
479
+
480
+ </li>
481
+
482
+
483
+ <li class="public ">
484
+ <span class="summary_signature">
485
+
486
+ <a href="#migrate-class_method" title="migrate (class method)">+ (Object) <strong>migrate</strong>(version = nil) </a>
487
+
488
+
489
+
490
+ </span>
491
+
492
+
493
+
494
+
495
+
496
+
497
+
498
+
499
+
500
+ <span class="summary_desc"><div class='inline'>
501
+ <p>Executes a migration.</p>
502
+ </div></span>
503
+
504
+ </li>
505
+
506
+
507
+ <li class="public ">
508
+ <span class="summary_signature">
509
+
510
+ <a href="#Version-class_method" title="Version (class method)">+ (Object) <strong>Version</strong>(n) </a>
511
+
512
+
513
+
514
+ </span>
515
+
516
+
517
+
518
+
519
+
520
+
521
+
522
+
523
+
524
+ <span class="summary_desc"><div class='inline'>
525
+ <p>Creates a new migration version through subclassing.</p>
526
+ </div></span>
527
+
528
+ </li>
529
+
530
+
531
+ </ul>
532
+
533
+ <h2>
534
+ Instance Method Summary
535
+ <small>(<a href="#" class="summary_toggle">collapse</a>)</small>
536
+ </h2>
537
+
538
+ <ul class="summary">
539
+
540
+ <li class="public ">
541
+ <span class="summary_signature">
542
+
543
+ <a href="#initialize-instance_method" title="#initialize (instance method)">- (Object) <strong>initialize</strong>(table_name) </a>
544
+
545
+
546
+
547
+ </span>
548
+
549
+
550
+ <span class="note title constructor">constructor</span>
551
+
552
+
553
+
554
+
555
+
556
+
557
+
558
+
559
+ <span class="summary_desc"><div class='inline'>
560
+ <p>Returns a new instance of the binder's class.</p>
561
+ </div></span>
562
+
563
+ </li>
564
+
565
+
566
+ </ul>
567
+
568
+
569
+
570
+
571
+
572
+
573
+
574
+
575
+
576
+
577
+
578
+ <h3 class="inherited">Methods included from <span class='object_link'><a href="../DeferedDelegator.html" title="DeferedDelegator (module)">DeferedDelegator</a></span></h3>
579
+ <p class="inherited"><span class='object_link'><a href="../DeferedDelegator.html#delegate_to-instance_method" title="DeferedDelegator#delegate_to (method)">delegate_to</a></span>, <span class='object_link'><a href="../DeferedDelegator.html#register_delegators-instance_method" title="DeferedDelegator#register_delegators (method)">register_delegators</a></span></p>
580
+ <div id="constructor_details" class="method_details_list">
581
+ <h2>Constructor Details</h2>
582
+
583
+ <div class="method_details first">
584
+ <h3 class="signature first" id="initialize-instance_method">
585
+
586
+ - (<tt>Object</tt>) <strong>initialize</strong>(table_name)
587
+
588
+
589
+
590
+
591
+
592
+ </h3><div class="docstring">
593
+ <div class="discussion">
594
+
595
+ <p>Returns a new instance of the binder's class. It also automaticaly
596
+ establish a connection with the database throught the specified adapter,
597
+ but prevents trying to reconnect if the connection is already established.</p>
598
+
599
+
600
+ </div>
601
+ </div>
602
+ <div class="tags">
603
+
604
+ <div class="examples">
605
+ <p class="tag_title">Examples:</p>
606
+
607
+
608
+ <pre class="example code"><code><span class='kw'>class</span> <span class='const'>Plug</span> <span class='op'>&lt;</span> <span class='const'>Binder</span><span class='op'>::</span><span class='const'>AR</span><span class='semicolon'>;</span> <span class='kw'>end</span>
609
+ <span class='id identifier rubyid_plug'>plug</span> <span class='op'>=</span> <span class='const'>Plug</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='symbol'>:articles</span>
610
+ <span class='id identifier rubyid_plug'>plug</span><span class='period'>.</span><span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span> <span class='comment'># [&lt;Article#1&gt;, &lt;Article#2&gt;] # Works, the connection has been established.</span></code></pre>
611
+
612
+ </div>
613
+ <p class="tag_title">Parameters:</p>
614
+ <ul class="param">
615
+
616
+ <li>
617
+
618
+ <span class='name'>table_name</span>
619
+
620
+
621
+ <span class='type'></span>
622
+
623
+
624
+
625
+ &mdash;
626
+ <div class='inline'>
627
+ <p>A String or Symbol representing the table to which we want to be bound.</p>
628
+ </div>
629
+
630
+ </li>
631
+
632
+ </ul>
633
+
634
+
635
+ </div><table class="source_code">
636
+ <tr>
637
+ <td>
638
+ <pre class="lines">
639
+
640
+
641
+ 70
642
+ 71
643
+ 72
644
+ 73
645
+ 74
646
+ 75
647
+ 76
648
+ 77
649
+ 78
650
+ 79
651
+ 80
652
+ 81</pre>
653
+ </td>
654
+ <td>
655
+ <pre class="code"><span class="info file"># File 'lib/active_record_binder.rb', line 70</span>
656
+
657
+ <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span> <span class='id identifier rubyid_table_name'>table_name</span>
658
+ <span class='ivar'>@table_name</span> <span class='op'>=</span> <span class='id identifier rubyid_table_name'>table_name</span>
659
+
660
+ <span class='comment'># Retrieves or Create the ActiveRecord::Base subclass that will match the table.
661
+ </span> <span class='id identifier rubyid_table'>table</span> <span class='op'>=</span> <span class='id identifier rubyid_meta_def_ar_class'>meta_def_ar_class</span>
662
+
663
+ <span class='comment'># Handle ActiveRecord::Base delegation, to ensure painless associations
664
+ </span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_delegate_to'>delegate_to</span> <span class='id identifier rubyid_table'>table</span>
665
+
666
+ <span class='comment'># Establishes a connection to the database
667
+ </span> <span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_connect'>connect</span> <span class='kw'>unless</span> <span class='id identifier rubyid_table'>table</span><span class='period'>.</span><span class='id identifier rubyid_connected?'>connected?</span>
668
+ <span class='kw'>end</span></pre>
669
+ </td>
670
+ </tr>
671
+ </table>
672
+ </div>
673
+
674
+ </div>
675
+
676
+ <div id="instance_attr_details" class="attr_details">
677
+ <h2>Instance Attribute Details</h2>
678
+
679
+
680
+ <span id=""></span>
681
+ <div class="method_details first">
682
+ <h3 class="signature first" id="table-instance_method">
683
+
684
+ - (<tt>Object</tt>) <strong>table</strong> <span class="extras">(readonly)</span>
685
+
686
+
687
+
688
+
689
+
690
+ </h3><div class="docstring">
691
+ <div class="discussion">
692
+
693
+
694
+ </div>
695
+ </div>
696
+ <div class="tags">
697
+
698
+
699
+ </div><table class="source_code">
700
+ <tr>
701
+ <td>
702
+ <pre class="lines">
703
+
704
+
705
+ 54
706
+ 55
707
+ 56</pre>
708
+ </td>
709
+ <td>
710
+ <pre class="code"><span class="info file"># File 'lib/active_record_binder.rb', line 54</span>
711
+
712
+ <span class='kw'>def</span> <span class='id identifier rubyid_table'>table</span>
713
+ <span class='ivar'>@table</span>
714
+ <span class='kw'>end</span></pre>
715
+ </td>
716
+ </tr>
717
+ </table>
718
+ </div>
719
+
720
+
721
+ <span id=""></span>
722
+ <div class="method_details ">
723
+ <h3 class="signature " id="table_name-instance_method">
724
+
725
+ - (<tt>Object</tt>) <strong>table_name</strong> <span class="extras">(readonly)</span>
726
+
727
+
728
+
729
+
730
+
731
+ </h3><div class="docstring">
732
+ <div class="discussion">
733
+
734
+
735
+ </div>
736
+ </div>
737
+ <div class="tags">
738
+
739
+
740
+ </div><table class="source_code">
741
+ <tr>
742
+ <td>
743
+ <pre class="lines">
744
+
745
+
746
+ 54
747
+ 55
748
+ 56</pre>
749
+ </td>
750
+ <td>
751
+ <pre class="code"><span class="info file"># File 'lib/active_record_binder.rb', line 54</span>
752
+
753
+ <span class='kw'>def</span> <span class='id identifier rubyid_table_name'>table_name</span>
754
+ <span class='ivar'>@table_name</span>
755
+ <span class='kw'>end</span></pre>
756
+ </td>
757
+ </tr>
758
+ </table>
759
+ </div>
760
+
761
+ </div>
762
+
763
+
764
+ <div id="class_method_details" class="method_details_list">
765
+ <h2>Class Method Details</h2>
766
+
767
+
768
+ <div class="method_details first">
769
+ <h3 class="signature first" id="__check_migration_version-class_method">
770
+
771
+ + (<tt>Object</tt>) <strong>__check_migration_version</strong>(version)
772
+
773
+
774
+
775
+
776
+
777
+ </h3><div class="docstring">
778
+ <div class="discussion">
779
+
780
+ <p>Private : checks the migration version number</p>
781
+
782
+
783
+ </div>
784
+ </div>
785
+ <div class="tags">
786
+
787
+ <p class="tag_title">Returns:</p>
788
+ <ul class="return">
789
+
790
+ <li>
791
+
792
+
793
+ <span class='type'></span>
794
+
795
+
796
+
797
+
798
+ <div class='inline'>
799
+ <p>the version as a Float.</p>
800
+ </div>
801
+
802
+ </li>
803
+
804
+ </ul>
805
+ <p class="tag_title">Raises:</p>
806
+ <ul class="raise">
807
+
808
+ <li>
809
+
810
+
811
+ <span class='type'></span>
812
+
813
+
814
+
815
+
816
+ <div class='inline'>
817
+ <p>MigrationVersionError if the required version does not exist.</p>
818
+ </div>
819
+
820
+ </li>
821
+
822
+ </ul>
823
+
824
+ </div><table class="source_code">
825
+ <tr>
826
+ <td>
827
+ <pre class="lines">
828
+
829
+
830
+ 328
831
+ 329
832
+ 330
833
+ 331</pre>
834
+ </td>
835
+ <td>
836
+ <pre class="code"><span class="info file"># File 'lib/active_record_binder.rb', line 328</span>
837
+
838
+ <span class='kw'>def</span> <span class='id identifier rubyid___check_migration_version'>__check_migration_version</span> <span class='id identifier rubyid_version'>version</span>
839
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'>MigrationVersionError</span> <span class='kw'>if</span> <span class='kw'>not</span> <span class='id identifier rubyid_version'>version</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='kw'>and</span> <span class='ivar'>@last_version</span> <span class='op'>&lt;</span> <span class='id identifier rubyid_version'>version</span>
840
+ <span class='id identifier rubyid_version'>version</span> <span class='op'>||=</span> <span class='ivar'>@last_version</span>
841
+ <span class='kw'>end</span></pre>
842
+ </td>
843
+ </tr>
844
+ </table>
845
+ </div>
846
+
847
+ <div class="method_details ">
848
+ <h3 class="signature " id="__create_meta_data_table_for-class_method">
849
+
850
+ + (<tt>Object</tt>) <strong>__create_meta_data_table_for</strong>(schema)
851
+
852
+
853
+
854
+
855
+
856
+ </h3><div class="docstring">
857
+ <div class="discussion">
858
+
859
+ <p>Private : Create a table for the current meta schema.</p>
860
+
861
+
862
+ </div>
863
+ </div>
864
+ <div class="tags">
865
+
866
+ <div class="examples">
867
+ <p class="tag_title">Examples:</p>
868
+
869
+
870
+ <pre class="example code"><code><span class='id identifier rubyid___create_meta_data_table_for'>__create_meta_data_table_for</span> <span class='const'>MyPlug</span> <span class='comment'># Will create a my_plug_meta_schemas table.</span></code></pre>
871
+
872
+ </div>
873
+ <p class="tag_title">Parameters:</p>
874
+ <ul class="param">
875
+
876
+ <li>
877
+
878
+ <span class='name'>schema</span>
879
+
880
+
881
+ <span class='type'></span>
882
+
883
+
884
+
885
+ &mdash;
886
+ <div class='inline'>
887
+ <p>The schema Class for which we want to create the table.</p>
888
+ </div>
889
+
890
+ </li>
891
+
892
+ </ul>
893
+
894
+ <p class="tag_title">Returns:</p>
895
+ <ul class="return">
896
+
897
+ <li>
898
+
899
+
900
+ <span class='type'></span>
901
+
902
+
903
+
904
+
905
+ <div class='inline'>
906
+ <p>Nothing.</p>
907
+ </div>
908
+
909
+ </li>
910
+
911
+ </ul>
912
+
913
+ </div><table class="source_code">
914
+ <tr>
915
+ <td>
916
+ <pre class="lines">
917
+
918
+
919
+ 308
920
+ 309
921
+ 310
922
+ 311
923
+ 312
924
+ 313
925
+ 314
926
+ 315
927
+ 316
928
+ 317
929
+ 318
930
+ 319
931
+ 320
932
+ 321</pre>
933
+ </td>
934
+ <td>
935
+ <pre class="code"><span class="info file"># File 'lib/active_record_binder.rb', line 308</span>
936
+
937
+ <span class='kw'>def</span> <span class='id identifier rubyid___create_meta_data_table_for'>__create_meta_data_table_for</span> <span class='id identifier rubyid_schema'>schema</span>
938
+ <span class='const'>ActiveRecord</span><span class='op'>::</span><span class='const'>Base</span><span class='period'>.</span><span class='id identifier rubyid_establish_connection'>establish_connection</span><span class='lparen'>(</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_connection_data'>connection_data</span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_schema'>schema</span><span class='period'>.</span><span class='id identifier rubyid_connected?'>connected?</span>
939
+
940
+ <span class='comment'># Clears the table cache for the schema (remove TableDoesNotExists if a table actually exists)
941
+ </span> <span class='id identifier rubyid_schema'>schema</span><span class='period'>.</span><span class='id identifier rubyid_clear_cache!'>clear_cache!</span>
942
+
943
+ <span class='kw'>unless</span> <span class='id identifier rubyid_schema'>schema</span><span class='period'>.</span><span class='id identifier rubyid_table_exists?'>table_exists?</span>
944
+ <span class='const'>ActiveRecord</span><span class='op'>::</span><span class='const'>Schema</span><span class='period'>.</span><span class='id identifier rubyid_define'>define</span> <span class='kw'>do</span>
945
+ <span class='id identifier rubyid_create_table'>create_table</span> <span class='id identifier rubyid_schema'>schema</span><span class='period'>.</span><span class='id identifier rubyid_table_name'>table_name</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_t'>t</span><span class='op'>|</span>
946
+ <span class='id identifier rubyid_t'>t</span><span class='period'>.</span><span class='id identifier rubyid_column'>column</span> <span class='symbol'>:version</span><span class='comma'>,</span> <span class='symbol'>:float</span>
947
+ <span class='kw'>end</span>
948
+ <span class='kw'>end</span>
949
+ <span class='kw'>end</span>
950
+ <span class='kw'>end</span></pre>
951
+ </td>
952
+ </tr>
953
+ </table>
954
+ </div>
955
+
956
+ <div class="method_details ">
957
+ <h3 class="signature " id="__create_meta_schema_class-class_method">
958
+
959
+ + (<tt>Object</tt>) <strong>__create_meta_schema_class</strong>(klass)
960
+
961
+
962
+
963
+
964
+
965
+ </h3><div class="docstring">
966
+ <div class="discussion">
967
+
968
+ <p>Private: Creates the meta schema class, and binds it to the current
969
+ Namespace.</p>
970
+
971
+
972
+ </div>
973
+ </div>
974
+ <div class="tags">
975
+
976
+ <div class="examples">
977
+ <p class="tag_title">Examples:</p>
978
+
979
+
980
+ <pre class="example code"><code><span class='kw'>class</span> <span class='const'>Plug</span> <span class='op'>&lt;</span> <span class='const'>Binder</span><span class='op'>::</span><span class='const'>AR</span><span class='semicolon'>;</span> <span class='kw'>end</span>
981
+ <span class='id identifier rubyid___create_meta_schema_class'>__create_meta_schema_class</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>MetaSchema</span><span class='tstring_end'>&quot;</span></span>
982
+ <span class='comment'># =&gt; Plug::MetaSchema</span></code></pre>
983
+
984
+ </div>
985
+
986
+ <p class="tag_title">Returns:</p>
987
+ <ul class="return">
988
+
989
+ <li>
990
+
991
+
992
+ <span class='type'></span>
993
+
994
+
995
+
996
+
997
+ <div class='inline'>
998
+ <p>a new Class inheriting from ActiveRecord::Base.</p>
999
+ </div>
1000
+
1001
+ </li>
1002
+
1003
+ </ul>
1004
+
1005
+ </div><table class="source_code">
1006
+ <tr>
1007
+ <td>
1008
+ <pre class="lines">
1009
+
1010
+
1011
+ 342
1012
+ 343
1013
+ 344
1014
+ 345
1015
+ 346
1016
+ 347
1017
+ 348
1018
+ 349
1019
+ 350</pre>
1020
+ </td>
1021
+ <td>
1022
+ <pre class="code"><span class="info file"># File 'lib/active_record_binder.rb', line 342</span>
1023
+
1024
+ <span class='kw'>def</span> <span class='id identifier rubyid___create_meta_schema_class'>__create_meta_schema_class</span> <span class='id identifier rubyid_klass'>klass</span>
1025
+ <span class='id identifier rubyid_binder'>binder</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span>
1026
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_const_set'>const_set</span><span class='lparen'>(</span><span class='id identifier rubyid_klass'>klass</span><span class='comma'>,</span>
1027
+ <span class='const'>Class</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='const'>ActiveRecord</span><span class='op'>::</span><span class='const'>Base</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='comment'># class MetaSchema &lt; ActiveRecord::Base
1028
+ </span> <span class='id identifier rubyid_singleton_class'>singleton_class</span><span class='period'>.</span><span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='symbol'>:define_method</span><span class='comma'>,</span> <span class='symbol'>:table_name_prefix</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='comment'># def self.table_name_prefix
1029
+ </span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_binder'>binder</span><span class='period'>.</span><span class='id identifier rubyid_underscore'>underscore</span><span class='rbrace'>}</span><span class='tstring_content'>_</span><span class='tstring_end'>&quot;</span></span> <span class='comment'># &quot;foo_binder&quot; # If we have a class FooBinder &lt; Binder::AR
1030
+ </span> <span class='kw'>end</span> <span class='comment'># end
1031
+ </span> <span class='kw'>end</span><span class='rparen'>)</span> <span class='comment'># end
1032
+ </span><span class='kw'>end</span></pre>
1033
+ </td>
1034
+ </tr>
1035
+ </table>
1036
+ </div>
1037
+
1038
+ <div class="method_details ">
1039
+ <h3 class="signature " id="adapter-class_method">
1040
+
1041
+ + (<tt>Object</tt>) <strong>adapter</strong>(adpt = default_adapter)
1042
+
1043
+
1044
+
1045
+ <span class="aliases">Also known as:
1046
+ <span class="names"><span id='adaptor-class_method'>adaptor</span></span>
1047
+ </span>
1048
+
1049
+
1050
+
1051
+ </h3><div class="docstring">
1052
+ <div class="discussion">
1053
+
1054
+ <p>Set the current adapter</p>
1055
+
1056
+
1057
+ </div>
1058
+ </div>
1059
+ <div class="tags">
1060
+
1061
+ <div class="examples">
1062
+ <p class="tag_title">Examples:</p>
1063
+
1064
+
1065
+ <pre class="example code"><code><span class='kw'>class</span> <span class='const'>Plug</span> <span class='op'>&lt;</span> <span class='const'>Binder</span><span class='op'>::</span><span class='const'>AR</span>
1066
+ <span class='id identifier rubyid_adapter'>adapter</span> <span class='symbol'>:foobar</span>
1067
+ <span class='kw'>end</span></code></pre>
1068
+
1069
+ </div>
1070
+ <p class="tag_title">Parameters:</p>
1071
+ <ul class="param">
1072
+
1073
+ <li>
1074
+
1075
+ <span class='name'>adpt</span>
1076
+
1077
+
1078
+ <span class='type'></span>
1079
+
1080
+
1081
+ <em class="default">(defaults to: <tt>default_adapter</tt>)</em>
1082
+
1083
+
1084
+ &mdash;
1085
+ <div class='inline'>
1086
+ <p>the adapter, as a String or Symbol. (default: Binder::AR.default_adapter)</p>
1087
+ </div>
1088
+
1089
+ </li>
1090
+
1091
+ </ul>
1092
+
1093
+ <p class="tag_title">Returns:</p>
1094
+ <ul class="return">
1095
+
1096
+ <li>
1097
+
1098
+
1099
+ <span class='type'></span>
1100
+
1101
+
1102
+
1103
+
1104
+ <div class='inline'>
1105
+ <p>the current database.</p>
1106
+ </div>
1107
+
1108
+ </li>
1109
+
1110
+ </ul>
1111
+
1112
+ </div><table class="source_code">
1113
+ <tr>
1114
+ <td>
1115
+ <pre class="lines">
1116
+
1117
+
1118
+ 139
1119
+ 140
1120
+ 141
1121
+ 142
1122
+ 143
1123
+ 144
1124
+ 145</pre>
1125
+ </td>
1126
+ <td>
1127
+ <pre class="code"><span class="info file"># File 'lib/active_record_binder.rb', line 139</span>
1128
+
1129
+ <span class='kw'>def</span> <span class='id identifier rubyid_adapter'>adapter</span> <span class='id identifier rubyid_adpt'>adpt</span> <span class='op'>=</span> <span class='id identifier rubyid_default_adapter'>default_adapter</span>
1130
+ <span class='kw'>if</span> <span class='id identifier rubyid_adpt'>adpt</span> <span class='op'>==</span> <span class='id identifier rubyid_default_adapter'>default_adapter</span>
1131
+ <span class='ivar'>@adapter</span> <span class='op'>||=</span> <span class='id identifier rubyid_adpt'>adpt</span>
1132
+ <span class='kw'>else</span>
1133
+ <span class='ivar'>@adapter</span> <span class='op'>=</span> <span class='id identifier rubyid_adpt'>adpt</span>
1134
+ <span class='kw'>end</span>
1135
+ <span class='kw'>end</span></pre>
1136
+ </td>
1137
+ </tr>
1138
+ </table>
1139
+ </div>
1140
+
1141
+ <div class="method_details ">
1142
+ <h3 class="signature " id="connection-class_method">
1143
+
1144
+ + (<tt>Object</tt>) <strong>connection</strong>(opts = {})
1145
+
1146
+
1147
+
1148
+ <span class="aliases">Also known as:
1149
+ <span class="names"><span id='connect_with-class_method'>connect_with</span></span>
1150
+ </span>
1151
+
1152
+
1153
+
1154
+ </h3><div class="docstring">
1155
+ <div class="discussion">
1156
+
1157
+ <p>Set the current connection parameters</p>
1158
+
1159
+
1160
+ </div>
1161
+ </div>
1162
+ <div class="tags">
1163
+
1164
+ <div class="examples">
1165
+ <p class="tag_title">Examples:</p>
1166
+
1167
+
1168
+ <pre class="example code"><code><span class='kw'>class</span> <span class='const'>Plug</span> <span class='op'>&lt;</span> <span class='const'>Binder</span><span class='op'>::</span><span class='const'>AR</span>
1169
+ <span class='id identifier rubyid_adapter'>adapter</span> <span class='symbol'>:foobar</span>
1170
+ <span class='kw'>end</span></code></pre>
1171
+
1172
+ </div>
1173
+ <p class="tag_title">Parameters:</p>
1174
+ <ul class="param">
1175
+
1176
+ <li>
1177
+
1178
+ <span class='name'>opts</span>
1179
+
1180
+
1181
+ <span class='type'></span>
1182
+
1183
+
1184
+ <em class="default">(defaults to: <tt>{}</tt>)</em>
1185
+
1186
+
1187
+ &mdash;
1188
+ <div class='inline'>
1189
+ <p>A Hash, containing options to pass to the
1190
+ ActiveRecord::Base.establish_connection call (default: {}) user - A user
1191
+ name as a String. password - A password as a String. host - A host String.</p>
1192
+ </div>
1193
+
1194
+ </li>
1195
+
1196
+ </ul>
1197
+
1198
+ <p class="tag_title">Returns:</p>
1199
+ <ul class="return">
1200
+
1201
+ <li>
1202
+
1203
+
1204
+ <span class='type'></span>
1205
+
1206
+
1207
+
1208
+
1209
+ <div class='inline'>
1210
+ <p>the current database.</p>
1211
+ </div>
1212
+
1213
+ </li>
1214
+
1215
+ </ul>
1216
+
1217
+ </div><table class="source_code">
1218
+ <tr>
1219
+ <td>
1220
+ <pre class="lines">
1221
+
1222
+
1223
+ 162
1224
+ 163
1225
+ 164</pre>
1226
+ </td>
1227
+ <td>
1228
+ <pre class="code"><span class="info file"># File 'lib/active_record_binder.rb', line 162</span>
1229
+
1230
+ <span class='kw'>def</span> <span class='id identifier rubyid_connection'>connection</span> <span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
1231
+ <span class='ivar'>@connection</span> <span class='op'>||=</span> <span class='id identifier rubyid_opts'>opts</span>
1232
+ <span class='kw'>end</span></pre>
1233
+ </td>
1234
+ </tr>
1235
+ </table>
1236
+ </div>
1237
+
1238
+ <div class="method_details ">
1239
+ <h3 class="signature " id="connection_data-class_method">
1240
+
1241
+ + (<tt>Object</tt>) <strong>connection_data</strong>
1242
+
1243
+
1244
+
1245
+
1246
+
1247
+ </h3><div class="docstring">
1248
+ <div class="discussion">
1249
+
1250
+ <p>Retrieves a clean set of connection data to establish a connection</p>
1251
+
1252
+
1253
+ </div>
1254
+ </div>
1255
+ <div class="tags">
1256
+
1257
+ <p class="tag_title">Returns:</p>
1258
+ <ul class="return">
1259
+
1260
+ <li>
1261
+
1262
+
1263
+ <span class='type'></span>
1264
+
1265
+
1266
+
1267
+
1268
+ <div class='inline'>
1269
+ <p>a Hash.</p>
1270
+ </div>
1271
+
1272
+ </li>
1273
+
1274
+ </ul>
1275
+
1276
+ </div><table class="source_code">
1277
+ <tr>
1278
+ <td>
1279
+ <pre class="lines">
1280
+
1281
+
1282
+ 170
1283
+ 171
1284
+ 172
1285
+ 173
1286
+ 174
1287
+ 175
1288
+ 176
1289
+ 177</pre>
1290
+ </td>
1291
+ <td>
1292
+ <pre class="code"><span class="info file"># File 'lib/active_record_binder.rb', line 170</span>
1293
+
1294
+ <span class='kw'>def</span> <span class='id identifier rubyid_connection_data'>connection_data</span>
1295
+ <span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>database:</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_database'>database</span><span class='comma'>,</span> <span class='label'>adapter:</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_adapter'>adapter</span> <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_connection'>connection</span><span class='rparen'>)</span>
1296
+ <span class='comment'># We ensure we have a string for the adapter
1297
+ </span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:adapter</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:adapter</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
1298
+ <span class='comment'># If we have a symbol for the database and the adapter is sqlite3, we create a string and add '.sqlite3' to the end
1299
+ </span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:database</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:database</span><span class='rbracket'>]</span><span class='rbrace'>}</span><span class='tstring_content'>.sqlite3</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:adapter</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>sqlite3</span><span class='tstring_end'>'</span></span> <span class='kw'>and</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='symbol'>:database</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span> <span class='op'>==</span> <span class='const'>Symbol</span>
1300
+ <span class='id identifier rubyid_opts'>opts</span>
1301
+ <span class='kw'>end</span></pre>
1302
+ </td>
1303
+ </tr>
1304
+ </table>
1305
+ </div>
1306
+
1307
+ <div class="method_details ">
1308
+ <h3 class="signature " id="database-class_method">
1309
+
1310
+ + (<tt>Object</tt>) <strong>database</strong>(db = default_database)
1311
+
1312
+
1313
+
1314
+
1315
+
1316
+ </h3><div class="docstring">
1317
+ <div class="discussion">
1318
+
1319
+ <p>Set the current database</p>
1320
+
1321
+
1322
+ </div>
1323
+ </div>
1324
+ <div class="tags">
1325
+
1326
+ <div class="examples">
1327
+ <p class="tag_title">Examples:</p>
1328
+
1329
+
1330
+ <pre class="example code"><code><span class='kw'>class</span> <span class='const'>Plug</span> <span class='op'>&lt;</span> <span class='const'>Binder</span><span class='op'>::</span><span class='const'>AR</span>
1331
+ <span class='id identifier rubyid_database'>database</span> <span class='symbol'>:foobar</span>
1332
+ <span class='kw'>end</span></code></pre>
1333
+
1334
+ </div>
1335
+ <p class="tag_title">Parameters:</p>
1336
+ <ul class="param">
1337
+
1338
+ <li>
1339
+
1340
+ <span class='name'>db</span>
1341
+
1342
+
1343
+ <span class='type'></span>
1344
+
1345
+
1346
+ <em class="default">(defaults to: <tt>default_database</tt>)</em>
1347
+
1348
+
1349
+ &mdash;
1350
+ <div class='inline'>
1351
+ <p>the database, as a String or Symbol. (default: Binder::AR.default_database)</p>
1352
+ </div>
1353
+
1354
+ </li>
1355
+
1356
+ </ul>
1357
+
1358
+ <p class="tag_title">Returns:</p>
1359
+ <ul class="return">
1360
+
1361
+ <li>
1362
+
1363
+
1364
+ <span class='type'></span>
1365
+
1366
+
1367
+
1368
+
1369
+ <div class='inline'>
1370
+ <p>the current database.</p>
1371
+ </div>
1372
+
1373
+ </li>
1374
+
1375
+ </ul>
1376
+
1377
+ </div><table class="source_code">
1378
+ <tr>
1379
+ <td>
1380
+ <pre class="lines">
1381
+
1382
+
1383
+ 120
1384
+ 121
1385
+ 122
1386
+ 123
1387
+ 124
1388
+ 125
1389
+ 126</pre>
1390
+ </td>
1391
+ <td>
1392
+ <pre class="code"><span class="info file"># File 'lib/active_record_binder.rb', line 120</span>
1393
+
1394
+ <span class='kw'>def</span> <span class='id identifier rubyid_database'>database</span> <span class='id identifier rubyid_db'>db</span> <span class='op'>=</span> <span class='id identifier rubyid_default_database'>default_database</span>
1395
+ <span class='kw'>if</span> <span class='id identifier rubyid_db'>db</span> <span class='op'>==</span> <span class='id identifier rubyid_default_database'>default_database</span>
1396
+ <span class='ivar'>@database</span> <span class='op'>||=</span> <span class='id identifier rubyid_db'>db</span>
1397
+ <span class='kw'>else</span>
1398
+ <span class='ivar'>@database</span> <span class='op'>=</span> <span class='id identifier rubyid_db'>db</span>
1399
+ <span class='kw'>end</span>
1400
+ <span class='kw'>end</span></pre>
1401
+ </td>
1402
+ </tr>
1403
+ </table>
1404
+ </div>
1405
+
1406
+ <div class="method_details ">
1407
+ <h3 class="signature " id="default_adapter-class_method">
1408
+
1409
+ + (<tt>Object</tt>) <strong>default_adapter</strong>
1410
+
1411
+
1412
+
1413
+
1414
+
1415
+ </h3><div class="docstring">
1416
+ <div class="discussion">
1417
+
1418
+ <p>Retrieves de default database</p>
1419
+
1420
+
1421
+ </div>
1422
+ </div>
1423
+ <div class="tags">
1424
+
1425
+ <p class="tag_title">Returns:</p>
1426
+ <ul class="return">
1427
+
1428
+ <li>
1429
+
1430
+
1431
+ <span class='type'></span>
1432
+
1433
+
1434
+
1435
+
1436
+ <div class='inline'>
1437
+ <p>a the content of :sqlite3, as a Symbol.</p>
1438
+ </div>
1439
+
1440
+ </li>
1441
+
1442
+ </ul>
1443
+
1444
+ </div><table class="source_code">
1445
+ <tr>
1446
+ <td>
1447
+ <pre class="lines">
1448
+
1449
+
1450
+ 187</pre>
1451
+ </td>
1452
+ <td>
1453
+ <pre class="code"><span class="info file"># File 'lib/active_record_binder.rb', line 187</span>
1454
+
1455
+ <span class='kw'>def</span> <span class='id identifier rubyid_default_adapter'>default_adapter</span><span class='semicolon'>;</span> <span class='symbol'>:sqlite3</span> <span class='kw'>end</span></pre>
1456
+ </td>
1457
+ </tr>
1458
+ </table>
1459
+ </div>
1460
+
1461
+ <div class="method_details ">
1462
+ <h3 class="signature " id="default_database-class_method">
1463
+
1464
+ + (<tt>'APP_DB'\</tt>) <strong>default_database</strong>
1465
+
1466
+
1467
+
1468
+
1469
+
1470
+ </h3><div class="docstring">
1471
+ <div class="discussion">
1472
+
1473
+ <p>Retrieves de default database</p>
1474
+
1475
+
1476
+ </div>
1477
+ </div>
1478
+ <div class="tags">
1479
+
1480
+ <p class="tag_title">Returns:</p>
1481
+ <ul class="return">
1482
+
1483
+ <li>
1484
+
1485
+
1486
+ <span class='type'>(<tt>'APP_DB'\</tt>)</span>
1487
+
1488
+
1489
+
1490
+ &mdash;
1491
+ <div class='inline'>
1492
+ <p>Returns a the content of ENV'APP_DB'.</p>
1493
+ </div>
1494
+
1495
+ </li>
1496
+
1497
+ </ul>
1498
+
1499
+ </div><table class="source_code">
1500
+ <tr>
1501
+ <td>
1502
+ <pre class="lines">
1503
+
1504
+
1505
+ 182</pre>
1506
+ </td>
1507
+ <td>
1508
+ <pre class="code"><span class="info file"># File 'lib/active_record_binder.rb', line 182</span>
1509
+
1510
+ <span class='kw'>def</span> <span class='id identifier rubyid_default_database'>default_database</span><span class='semicolon'>;</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>APP_DB</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span> <span class='kw'>end</span></pre>
1511
+ </td>
1512
+ </tr>
1513
+ </table>
1514
+ </div>
1515
+
1516
+ <div class="method_details ">
1517
+ <h3 class="signature " id="meta_schema-class_method">
1518
+
1519
+ + (<tt>Object</tt>) <strong>meta_schema</strong>
1520
+
1521
+
1522
+
1523
+
1524
+
1525
+ </h3><div class="docstring">
1526
+ <div class="discussion">
1527
+
1528
+ <p>Private: Get the Class holding the current migration metadatas.</p>
1529
+
1530
+
1531
+ </div>
1532
+ </div>
1533
+ <div class="tags">
1534
+
1535
+ <p class="tag_title">Returns:</p>
1536
+ <ul class="return">
1537
+
1538
+ <li>
1539
+
1540
+
1541
+ <span class='type'></span>
1542
+
1543
+
1544
+
1545
+
1546
+ <div class='inline'>
1547
+ <p>an ActiveRecord::Base subclass.</p>
1548
+ </div>
1549
+
1550
+ </li>
1551
+
1552
+ </ul>
1553
+
1554
+ </div><table class="source_code">
1555
+ <tr>
1556
+ <td>
1557
+ <pre class="lines">
1558
+
1559
+
1560
+ 287
1561
+ 288
1562
+ 289
1563
+ 290
1564
+ 291
1565
+ 292
1566
+ 293
1567
+ 294
1568
+ 295</pre>
1569
+ </td>
1570
+ <td>
1571
+ <pre class="code"><span class="info file"># File 'lib/active_record_binder.rb', line 287</span>
1572
+
1573
+ <span class='kw'>def</span> <span class='id identifier rubyid_meta_schema'>meta_schema</span>
1574
+ <span class='id identifier rubyid_klass'>klass</span> <span class='op'>=</span> <span class='symbol'>:MetaSchema</span>
1575
+ <span class='ivar'>@meta_schema</span> <span class='op'>||=</span>
1576
+ <span class='kw'>if</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_const_defined?'>const_defined?</span><span class='lparen'>(</span><span class='id identifier rubyid_klass'>klass</span><span class='rparen'>)</span>
1577
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_const_get'>const_get</span><span class='lparen'>(</span><span class='id identifier rubyid_klass'>klass</span><span class='rparen'>)</span>
1578
+ <span class='kw'>else</span>
1579
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid___create_meta_schema_class'>__create_meta_schema_class</span><span class='lparen'>(</span><span class='id identifier rubyid_klass'>klass</span><span class='rparen'>)</span>
1580
+ <span class='kw'>end</span>
1581
+ <span class='kw'>end</span></pre>
1582
+ </td>
1583
+ </tr>
1584
+ </table>
1585
+ </div>
1586
+
1587
+ <div class="method_details ">
1588
+ <h3 class="signature " id="migrate-class_method">
1589
+
1590
+ + (<tt>Object</tt>) <strong>migrate</strong>(version = nil)
1591
+
1592
+
1593
+
1594
+
1595
+
1596
+ </h3><div class="docstring">
1597
+ <div class="discussion">
1598
+
1599
+ <p>Executes a migration.</p>
1600
+
1601
+
1602
+ </div>
1603
+ </div>
1604
+ <div class="tags">
1605
+
1606
+ <div class="examples">
1607
+ <p class="tag_title">Examples:</p>
1608
+
1609
+
1610
+ <pre class="example code"><code><span class='comment'># (See the Binder::AR::Version examples for the classes definition.)
1611
+ </span><span class='const'>Plug</span><span class='period'>.</span><span class='id identifier rubyid_migrate'>migrate</span> <span class='float'>1.0</span> <span class='comment'># Creates table bars.
1612
+ </span><span class='comment'># =&gt; 1.0
1613
+ </span><span class='const'>Plug</span><span class='period'>.</span><span class='id identifier rubyid_migrate'>migrate</span> <span class='int'>0</span> <span class='comment'># Drop the table bars.
1614
+ </span><span class='comment'># =&gt; 0.0
1615
+ </span><span class='const'>Plug</span><span class='period'>.</span><span class='id identifier rubyid_migrate'>migrate</span> <span class='comment'># Creates tables bars and foos.
1616
+ </span><span class='comment'># =&gt; 1.1</span></code></pre>
1617
+
1618
+ </div>
1619
+ <p class="tag_title">Parameters:</p>
1620
+ <ul class="param">
1621
+
1622
+ <li>
1623
+
1624
+ <span class='name'>version</span>
1625
+
1626
+
1627
+ <span class='type'></span>
1628
+
1629
+
1630
+ <em class="default">(defaults to: <tt>nil</tt>)</em>
1631
+
1632
+
1633
+ &mdash;
1634
+ <div class='inline'>
1635
+ <p>A Float or Numeric indicating the number towards which execute the
1636
+ migration. If none specified it will migrate to the latest migration.</p>
1637
+ </div>
1638
+
1639
+ </li>
1640
+
1641
+ </ul>
1642
+
1643
+ <p class="tag_title">Returns:</p>
1644
+ <ul class="return">
1645
+
1646
+ <li>
1647
+
1648
+
1649
+ <span class='type'></span>
1650
+
1651
+
1652
+
1653
+
1654
+ <div class='inline'>
1655
+ <p>the version we migrated to as a Float.</p>
1656
+ </div>
1657
+
1658
+ </li>
1659
+
1660
+ </ul>
1661
+
1662
+ </div><table class="source_code">
1663
+ <tr>
1664
+ <td>
1665
+ <pre class="lines">
1666
+
1667
+
1668
+ 260
1669
+ 261
1670
+ 262
1671
+ 263
1672
+ 264
1673
+ 265
1674
+ 266
1675
+ 267
1676
+ 268
1677
+ 269
1678
+ 270
1679
+ 271
1680
+ 272
1681
+ 273
1682
+ 274
1683
+ 275
1684
+ 276
1685
+ 277
1686
+ 278
1687
+ 279
1688
+ 280
1689
+ 281
1690
+ 282</pre>
1691
+ </td>
1692
+ <td>
1693
+ <pre class="code"><span class="info file"># File 'lib/active_record_binder.rb', line 260</span>
1694
+
1695
+ <span class='kw'>def</span> <span class='id identifier rubyid_migrate'>migrate</span> <span class='id identifier rubyid_version'>version</span> <span class='op'>=</span> <span class='kw'>nil</span>
1696
+ <span class='kw'>if</span> <span class='ivar'>@migrations</span>
1697
+ <span class='id identifier rubyid_schema'>schema</span> <span class='op'>=</span> <span class='id identifier rubyid_meta_schema'>meta_schema</span>
1698
+ <span class='id identifier rubyid_version'>version</span> <span class='op'>=</span> <span class='id identifier rubyid___check_migration_version'>__check_migration_version</span><span class='lparen'>(</span><span class='id identifier rubyid_version'>version</span><span class='rparen'>)</span>
1699
+ <span class='id identifier rubyid___create_meta_data_table_for'>__create_meta_data_table_for</span><span class='lparen'>(</span><span class='id identifier rubyid_schema'>schema</span><span class='rparen'>)</span>
1700
+
1701
+ <span class='id identifier rubyid_s'>s</span> <span class='op'>=</span> <span class='id identifier rubyid_schema'>schema</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span> <span class='op'>||</span> <span class='id identifier rubyid_schema'>schema</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='label'>version:</span> <span class='int'>0</span><span class='rparen'>)</span>
1702
+ <span class='kw'>unless</span> <span class='id identifier rubyid_s'>s</span><span class='period'>.</span><span class='id identifier rubyid_version'>version</span> <span class='op'>==</span> <span class='id identifier rubyid_version'>version</span>
1703
+ <span class='ivar'>@migrations</span><span class='period'>.</span><span class='id identifier rubyid_sort_by'>sort_by</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_migration'>migration</span><span class='op'>|</span> <span class='id identifier rubyid_migration'>migration</span><span class='period'>.</span><span class='id identifier rubyid_version'>version</span> <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_m'>m</span><span class='op'>|</span>
1704
+ <span class='id identifier rubyid_m'>m</span><span class='period'>.</span><span class='id identifier rubyid_migrate'>migrate</span><span class='lparen'>(</span><span class='symbol'>:up</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_s'>s</span><span class='period'>.</span><span class='id identifier rubyid_version'>version</span> <span class='op'>&lt;</span> <span class='id identifier rubyid_m'>m</span><span class='period'>.</span><span class='id identifier rubyid_version'>version</span> <span class='kw'>and</span> <span class='id identifier rubyid_m'>m</span><span class='period'>.</span><span class='id identifier rubyid_version'>version</span> <span class='op'>&lt;=</span> <span class='id identifier rubyid_version'>version</span>
1705
+
1706
+ <span class='kw'>if</span> <span class='id identifier rubyid_s'>s</span><span class='period'>.</span><span class='id identifier rubyid_version'>version</span> <span class='op'>&gt;=</span> <span class='id identifier rubyid_m'>m</span><span class='period'>.</span><span class='id identifier rubyid_version'>version</span> <span class='kw'>and</span> <span class='id identifier rubyid_m'>m</span><span class='period'>.</span><span class='id identifier rubyid_version'>version</span> <span class='op'>&gt;</span> <span class='id identifier rubyid_version'>version</span>
1707
+ <span class='id identifier rubyid_m'>m</span><span class='period'>.</span><span class='id identifier rubyid_migrate'>migrate</span><span class='lparen'>(</span><span class='symbol'>:down</span><span class='rparen'>)</span>
1708
+ <span class='kw'>else</span> <span class='comment'># Handle migrate(0)
1709
+ </span> <span class='id identifier rubyid_m'>m</span><span class='period'>.</span><span class='id identifier rubyid_migrate'>migrate</span><span class='lparen'>(</span><span class='symbol'>:down</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_s'>s</span><span class='period'>.</span><span class='id identifier rubyid_version'>version</span> <span class='op'>&gt;=</span> <span class='id identifier rubyid_m'>m</span><span class='period'>.</span><span class='id identifier rubyid_version'>version</span> <span class='kw'>and</span> <span class='id identifier rubyid_version'>version</span><span class='period'>.</span><span class='id identifier rubyid_zero?'>zero?</span>
1710
+ <span class='kw'>end</span>
1711
+ <span class='kw'>end</span>
1712
+ <span class='id identifier rubyid_s'>s</span><span class='period'>.</span><span class='id identifier rubyid_update_attribute'>update_attribute</span> <span class='symbol'>:version</span><span class='comma'>,</span> <span class='id identifier rubyid_version'>version</span>
1713
+ <span class='kw'>end</span>
1714
+ <span class='id identifier rubyid_version'>version</span> <span class='op'>=</span> <span class='id identifier rubyid_s'>s</span><span class='period'>.</span><span class='id identifier rubyid_version'>version</span>
1715
+ <span class='kw'>end</span>
1716
+ <span class='id identifier rubyid_version'>version</span>
1717
+ <span class='kw'>end</span></pre>
1718
+ </td>
1719
+ </tr>
1720
+ </table>
1721
+ </div>
1722
+
1723
+ <div class="method_details ">
1724
+ <h3 class="signature " id="Version-class_method">
1725
+
1726
+ + (<tt>Object</tt>) <strong>Version</strong>(n)
1727
+
1728
+
1729
+
1730
+
1731
+
1732
+ </h3><div class="docstring">
1733
+ <div class="discussion">
1734
+
1735
+ <p>Creates a new migration version through subclassing.</p>
1736
+
1737
+
1738
+ </div>
1739
+ </div>
1740
+ <div class="tags">
1741
+
1742
+ <div class="examples">
1743
+ <p class="tag_title">Examples:</p>
1744
+
1745
+
1746
+ <pre class="example code"><code><span class='kw'>class</span> <span class='const'>Plug</span> <span class='op'>&lt;</span> <span class='const'>Binder</span><span class='op'>::</span><span class='const'>AR</span><span class='semicolon'>;</span> <span class='kw'>end</span></code></pre>
1747
+
1748
+
1749
+ <pre class="example code"><code>class CreateFooTable &lt; Plug::Version 1.0
1750
+ def self.up
1751
+ create_table :foos do |t|
1752
+ t.string :name
1753
+ t.timestamps
1754
+ end
1755
+ end</code></pre>
1756
+
1757
+
1758
+ <pre class="example code"><code>def self.down
1759
+ drop_table :foos
1760
+ end
1761
+ end</code></pre>
1762
+
1763
+
1764
+ <pre class="example code"><code>class CreateBarTable &lt; Plug::Version 1.1
1765
+ def self.up
1766
+ create_table :bars do |t|
1767
+ t.string :title
1768
+ t.timestamps
1769
+ end
1770
+ end</code></pre>
1771
+
1772
+
1773
+ <pre class="example code"><code>def self.down
1774
+ drop_table :bars
1775
+ end
1776
+ end</code></pre>
1777
+
1778
+
1779
+ <pre class="example code"><code><span class='comment'># You can get the migration version for a pecular migration class.
1780
+ </span><span class='const'>CreateFooTable</span><span class='period'>.</span><span class='id identifier rubyid_version'>version</span> <span class='comment'># =&gt; 1.0
1781
+ </span><span class='const'>CreateBarTable</span><span class='period'>.</span><span class='id identifier rubyid_version'>version</span> <span class='comment'># =&gt; 1.1</span></code></pre>
1782
+
1783
+ </div>
1784
+ <p class="tag_title">Parameters:</p>
1785
+ <ul class="param">
1786
+
1787
+ <li>
1788
+
1789
+ <span class='name'>n</span>
1790
+
1791
+
1792
+ <span class='type'></span>
1793
+
1794
+
1795
+
1796
+ &mdash;
1797
+ <div class='inline'>
1798
+ <p>A migration version number as Float.</p>
1799
+ </div>
1800
+
1801
+ </li>
1802
+
1803
+ </ul>
1804
+
1805
+ <p class="tag_title">Returns:</p>
1806
+ <ul class="return">
1807
+
1808
+ <li>
1809
+
1810
+
1811
+ <span class='type'></span>
1812
+
1813
+
1814
+
1815
+
1816
+ <div class='inline'>
1817
+ <p>a new Class, subclassing ActiveRecord::Migration.</p>
1818
+ </div>
1819
+
1820
+ </li>
1821
+
1822
+ </ul>
1823
+
1824
+ </div><table class="source_code">
1825
+ <tr>
1826
+ <td>
1827
+ <pre class="lines">
1828
+
1829
+
1830
+ 228
1831
+ 229
1832
+ 230
1833
+ 231
1834
+ 232
1835
+ 233
1836
+ 234
1837
+ 235
1838
+ 236
1839
+ 237
1840
+ 238
1841
+ 239
1842
+ 240
1843
+ 241
1844
+ 242</pre>
1845
+ </td>
1846
+ <td>
1847
+ <pre class="code"><span class="info file"># File 'lib/active_record_binder.rb', line 228</span>
1848
+
1849
+ <span class='kw'>def</span> <span class='const'>Version</span> <span class='id identifier rubyid_n'>n</span>
1850
+ <span class='ivar'>@last_version</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_n'>n</span><span class='comma'>,</span> <span class='ivar'>@last_version</span><span class='period'>.</span><span class='id identifier rubyid_to_f'>to_f</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_max'>max</span> <span class='comment'># Assign or retrieves the last migration version number
1851
+ </span> <span class='comment'># migrations is a pointer to the instance variable
1852
+ </span> <span class='id identifier rubyid_migrations'>migrations</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='ivar'>@migrations</span> <span class='op'>||=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rparen'>)</span>
1853
+ <span class='const'>Class</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='const'>ActiveRecord</span><span class='op'>::</span><span class='const'>Migration</span><span class='rparen'>)</span> <span class='kw'>do</span>
1854
+ <span class='id identifier rubyid_singleton_class'>singleton_class</span><span class='period'>.</span><span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='symbol'>:define_method</span><span class='comma'>,</span> <span class='symbol'>:version</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='comment'># def self.version
1855
+ </span> <span class='id identifier rubyid_n'>n</span> <span class='comment'># n
1856
+ </span> <span class='kw'>end</span> <span class='comment'># end
1857
+ </span>
1858
+ <span class='comment'># Callback invoked whenever a subclass of the current class is created
1859
+ </span> <span class='id identifier rubyid_singleton_class'>singleton_class</span><span class='period'>.</span><span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='symbol'>:define_method</span><span class='comma'>,</span> <span class='symbol'>:inherited</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_s'>s</span><span class='op'>|</span> <span class='comment'># def self.inherited subclass
1860
+ </span> <span class='id identifier rubyid_migrations'>migrations</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_s'>s</span> <span class='comment'># migrations &lt;&lt; subclass
1861
+ </span> <span class='kw'>end</span> <span class='comment'># end
1862
+ </span> <span class='kw'>end</span>
1863
+ <span class='kw'>end</span></pre>
1864
+ </td>
1865
+ </tr>
1866
+ </table>
1867
+ </div>
1868
+
1869
+ </div>
1870
+
1871
+ </div>
1872
+
1873
+ <div id="footer">
1874
+ Generated on Thu Feb 21 02:06:17 2013 by
1875
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1876
+ 0.8.4.1 (ruby-1.9.3).
1877
+ </div>
1878
+
1879
+ </body>
1880
+ </html>