ejhayes_standalone_migrations 2.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
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 1.9.2
5
+ script: bundle exec rake specs:travis
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rake', '~> 10.0'
4
+ gem 'activerecord', ENV['AR'] || '~> 3.2'
5
+ gem 'railties', ENV['AR'] || '~> 3.2'
6
+
7
+ group :dev do
8
+ gem 'sqlite3'
9
+ gem 'rspec', '~>2'
10
+ gem 'jeweler'
11
+ end
12
+
@@ -0,0 +1,113 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ actionpack (3.2.13)
5
+ activemodel (= 3.2.13)
6
+ activesupport (= 3.2.13)
7
+ builder (~> 3.0.0)
8
+ erubis (~> 2.7.0)
9
+ journey (~> 1.0.4)
10
+ rack (~> 1.4.5)
11
+ rack-cache (~> 1.2)
12
+ rack-test (~> 0.6.1)
13
+ sprockets (~> 2.2.1)
14
+ activemodel (3.2.13)
15
+ activesupport (= 3.2.13)
16
+ builder (~> 3.0.0)
17
+ activerecord (3.2.13)
18
+ activemodel (= 3.2.13)
19
+ activesupport (= 3.2.13)
20
+ arel (~> 3.0.2)
21
+ tzinfo (~> 0.3.29)
22
+ activesupport (3.2.13)
23
+ i18n (= 0.6.1)
24
+ multi_json (~> 1.0)
25
+ addressable (2.3.6)
26
+ arel (3.0.2)
27
+ builder (3.0.4)
28
+ diff-lcs (1.1.3)
29
+ erubis (2.7.0)
30
+ faraday (0.8.9)
31
+ multipart-post (~> 1.2.0)
32
+ git (1.2.6)
33
+ github_api (0.10.2)
34
+ addressable
35
+ faraday (~> 0.8.7)
36
+ hashie (>= 1.2)
37
+ multi_json (~> 1.4)
38
+ nokogiri (~> 1.6.0)
39
+ oauth2
40
+ hashie (2.1.1)
41
+ highline (1.6.21)
42
+ hike (1.2.1)
43
+ i18n (0.6.1)
44
+ jeweler (2.0.1)
45
+ builder
46
+ bundler (>= 1.0)
47
+ git (>= 1.2.5)
48
+ github_api
49
+ highline (>= 1.6.15)
50
+ nokogiri (>= 1.5.10)
51
+ rake
52
+ rdoc
53
+ journey (1.0.4)
54
+ json (1.7.7)
55
+ jwt (0.1.11)
56
+ multi_json (>= 1.5)
57
+ mini_portile (0.5.3)
58
+ multi_json (1.7.1)
59
+ multi_xml (0.5.5)
60
+ multipart-post (1.2.0)
61
+ nokogiri (1.6.1)
62
+ mini_portile (~> 0.5.0)
63
+ oauth2 (0.9.3)
64
+ faraday (>= 0.8, < 0.10)
65
+ jwt (~> 0.1.8)
66
+ multi_json (~> 1.3)
67
+ multi_xml (~> 0.5)
68
+ rack (~> 1.2)
69
+ rack (1.4.5)
70
+ rack-cache (1.2)
71
+ rack (>= 0.4)
72
+ rack-ssl (1.3.3)
73
+ rack
74
+ rack-test (0.6.2)
75
+ rack (>= 1.0)
76
+ railties (3.2.13)
77
+ actionpack (= 3.2.13)
78
+ activesupport (= 3.2.13)
79
+ rack-ssl (~> 1.3.2)
80
+ rake (>= 0.8.7)
81
+ rdoc (~> 3.4)
82
+ thor (>= 0.14.6, < 2.0)
83
+ rake (10.2.2)
84
+ rdoc (3.12.2)
85
+ json (~> 1.4)
86
+ rspec (2.7.0)
87
+ rspec-core (~> 2.7.0)
88
+ rspec-expectations (~> 2.7.0)
89
+ rspec-mocks (~> 2.7.0)
90
+ rspec-core (2.7.1)
91
+ rspec-expectations (2.7.0)
92
+ diff-lcs (~> 1.1.2)
93
+ rspec-mocks (2.7.0)
94
+ sprockets (2.2.2)
95
+ hike (~> 1.2)
96
+ multi_json (~> 1.0)
97
+ rack (~> 1.0)
98
+ tilt (~> 1.1, != 1.3.0)
99
+ sqlite3 (1.3.6)
100
+ thor (0.17.0)
101
+ tilt (1.3.6)
102
+ tzinfo (0.3.37)
103
+
104
+ PLATFORMS
105
+ ruby
106
+
107
+ DEPENDENCIES
108
+ activerecord (~> 3.2)
109
+ jeweler
110
+ railties (~> 3.2)
111
+ rake (~> 10.0)
112
+ rspec (~> 2)
113
+ sqlite3
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008-2011 Todd Huss
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,265 @@
1
+ Rails migrations in non-Rails (and non Ruby) projects.
2
+
3
+ WHAT'S NEW
4
+ ==========
5
+ In the 2.x release we have moved to using Rails 3 migrations instead of maintaining our own migration related code. Just about anything you can do with Rails 3 migrations you can now do with [Standalone Migrations](https://github.com/thuss/standalone-migrations) too! This removed 95% of the code we have to maintain. Big thanks to [Ricardo Valeriano](http://ricardovaleriano.com/) and [Michael Grosser](http://pragmatig.wordpress.com) for undertaking this major rewrite!
6
+
7
+ CONTRIBUTE
8
+ ==========
9
+ [Standalone Migrations](https://github.com/thuss/standalone-migrations) relies on the contributions of the open-source community! To submit a fix or an enhancement fork the repository, checkout the *develop* branch, make your changes, add your name to the *Contributors* section in README.markdown, and send us a pull request! If you're active and do good work we'll add you as a collaborator!
10
+
11
+ USAGE
12
+ =====
13
+ Install Ruby, RubyGems and a ruby-database driver (e.g. `gem install mysql`) then:
14
+
15
+ $ gem install standalone_migrations
16
+
17
+ Add to `Rakefile` in your projects base directory:
18
+
19
+ ```ruby
20
+ require 'standalone_migrations'
21
+ StandaloneMigrations::Tasks.load_tasks
22
+ ```
23
+
24
+ Add database configuration to `db/config.yml` in your projects base directory e.g.:
25
+
26
+ development:
27
+ adapter: sqlite3
28
+ database: db/development.sqlite3
29
+ pool: 5
30
+ timeout: 5000
31
+
32
+ production:
33
+ adapter: mysql
34
+ encoding: utf8
35
+ reconnect: false
36
+ database: somedatabase_dev
37
+ pool: 5
38
+ username: root
39
+ password:
40
+ socket: /var/run/mysqld/mysqld.sock
41
+
42
+ test: &test
43
+ adapter: sqlite3
44
+ database: db/test.sqlite3
45
+ pool: 5
46
+ timeout: 5000
47
+
48
+ ### To create a new database migration:
49
+
50
+ rake db:new_migration name=foo_bar_migration
51
+ edit db/migrate/20081220234130_foo_bar_migration.rb
52
+
53
+ #### If you really want to, you can just execute raw SQL:
54
+
55
+ ```ruby
56
+ def up
57
+ execute "insert into foo values (123,'something');"
58
+ end
59
+
60
+ def down
61
+ execute "delete from foo where field='something';"
62
+ end
63
+ ```
64
+
65
+ ### To apply your newest migration:
66
+
67
+ rake db:migrate
68
+
69
+ ### To migrate to a specific version (for example to rollback)
70
+
71
+ rake db:migrate VERSION=20081220234130
72
+
73
+ ### To migrate a specific database (for example your "testing" database)
74
+
75
+ rake db:migrate DB=test ... or ...
76
+ rake db:migrate RAILS_ENV=test
77
+
78
+ ### To execute a specific up/down of one single migration
79
+
80
+ rake db:migrate:up VERSION=20081220234130
81
+
82
+ ### To revert your last migration
83
+
84
+ rake db:rollback
85
+
86
+ ### To revert your last 3 migrations
87
+
88
+ rake db:rollback STEP=3
89
+
90
+ ### Custom configuration
91
+
92
+ By default, Standalone Migrations will assume there exists a "db/"
93
+ directory in your project. But if for some reason you need a specific
94
+ directory structure to work with, you can use a configuration file
95
+ named .standalone_migrations in the root of your project containing
96
+ the following:
97
+
98
+ ```yaml
99
+ db:
100
+ seeds: db/seeds.rb
101
+ migrate: db/migrate
102
+ schema: db/schema.rb
103
+ config:
104
+ database: db/config.yml
105
+ ```
106
+
107
+ These are the configurable options available. You can omit any of
108
+ the keys and Standalone Migrations will assume the default values.
109
+
110
+ ### on_loaded callbacks
111
+
112
+ If you would like to use an external library such as [foreigner](https://github.com/matthuhiggins/foreigner) with standalone migrations, you can add the following to your `Rakefile`:
113
+
114
+ ```ruby
115
+ require 'foreigner'
116
+
117
+ StandaloneMigrations.on_load do
118
+ Foreigner.load
119
+ end
120
+ ```
121
+
122
+ ###Multiple database support
123
+
124
+ ####Structure
125
+
126
+ Create a custom configuration file for each database and name them `.database_name.standalone_migrations`. The same conditions apply as described under Custom Configuration, however you are most likely want to specify all options to avoid conflicts and errors.
127
+
128
+ An example set up would look like this:
129
+
130
+ ```
131
+ app/
132
+ |-- db/
133
+ | |-- migrate/
134
+ | | |-- db1/
135
+ | | | |-- 001_migration.rb
136
+ | | |
137
+ | | |-- db2/
138
+ | | |-- 001_migration.rb
139
+ | |
140
+ | |-- config_db1.yml
141
+ | |-- config_db2.yml
142
+ | |-- seeds_db1.rb
143
+ | |-- seeds_db2.rb
144
+ | |-- schema_db1.rb
145
+ | |-- schema_db2.rb
146
+ |
147
+ |-- .db1.standalone_migrations
148
+ |-- .db2.standalone_migrations
149
+ ```
150
+ Sample config file:
151
+
152
+ ```yaml
153
+ db:
154
+ seeds: db/seeds_db1.rb
155
+ migrate: db/migrate/db1
156
+ schema: db/schema_db1.rb
157
+ config:
158
+ database: db/config_db1.yml
159
+ ```
160
+ Of course you can achieve a different layout by simply editing the paths.
161
+
162
+ #####Running
163
+
164
+ You can run the Rake tasks on a particular database by passing the `DATABASE` environment variable to it:
165
+
166
+ $ rake DATABASE=db1 db:version
167
+
168
+ Combined with the environment selector:
169
+
170
+ $ rake DATABASE=db2 DB=production db:migrate
171
+
172
+ #### Changing environment config in runtime
173
+
174
+ If you are using Heroku or have to create or change your connection
175
+ configuration based on runtime aspects (maybe environment variables),
176
+ you can use the `StandaloneMigrations::Configurator.environments_config`
177
+ method. Check the usage example:
178
+
179
+ ```ruby
180
+ require 'tasks/standalone_migrations'
181
+
182
+ StandaloneMigrations::Configurator.environments_config do |env|
183
+
184
+ env.on "production" do
185
+
186
+ if (ENV['DATABASE_URL'])
187
+ db = URI.parse(ENV['DATABASE_URL'])
188
+ return {
189
+ :adapter => db.scheme == 'postgres' ? 'postgresql' : db.scheme,
190
+ :host => db.host,
191
+ :username => db.user,
192
+ :password => db.password,
193
+ :database => db.path[1..-1],
194
+ :encoding => 'utf8'
195
+ }
196
+ end
197
+
198
+ nil
199
+ end
200
+
201
+ end
202
+ ```
203
+
204
+ You have to put this anywhere on your `Rakefile`. If you want to
205
+ change some configuration, call the #on method on the object
206
+ received as argument in your block passed to ::environments_config
207
+ method call. The #on method receives the key to the configuration
208
+ that you want to change within the block. The block should return
209
+ your new configuration hash or nil if you want the configuration
210
+ to stay the same.
211
+
212
+ Your logic to decide the new configuration need to access some data
213
+ in your current configuration? Then you should receive the configuration
214
+ in your block, like this:
215
+
216
+ ```ruby
217
+ require 'tasks/standalone_migrations'
218
+
219
+ StandaloneMigrations::Configurator.environments_config do |env|
220
+
221
+ env.on "my_custom_config" do |current_custom_config|
222
+ p current_custom_config
223
+ # => the values on your current "my_custom_config" environment
224
+ nil
225
+ end
226
+
227
+ end
228
+ ```
229
+
230
+ #### Exporting Generated SQL
231
+
232
+ If instead of the database-agnostic `schema.rb` file you'd like to
233
+ save the database-specific SQL generated by the migrations, simply
234
+ add this to your `Rakefile`.
235
+
236
+ ```ruby
237
+ require 'tasks/standalone_migrations'
238
+ ActiveRecord::Base.schema_format = :sql
239
+ ```
240
+
241
+ You should see a `db/structure.sql` file the next time you run a
242
+ migration.
243
+
244
+ Contributors
245
+ ============
246
+ - [Todd Huss](http://gabrito.com/)
247
+ - [Michael Grosser](http://pragmatig.wordpress.com)
248
+ - [Ricardo Valeriano](http://ricardovaleriano.com/)
249
+ - [Two Bit Labs](http://twobitlabs.com/)
250
+ - [ClassMonkeys](http://www.classmonkeys.com/)
251
+ - [Windandtides](http://windandtides.com/)
252
+ - [Eric Lindvall](http://bitmonkey.net)
253
+ - [Steve Hodgkiss](http://stevehodgkiss.com/)
254
+ - [Rich Meyers](https://github.com/richmeyers)
255
+ - [Wes Bailey](http://exposinggotchas.blogspot.com/)
256
+ - [Robert J. Berger](http://blog.ibd.com/)
257
+ - [Federico Builes](http://mheroin.com/)
258
+ - [Gazler](http://blog.gazler.com/)
259
+ - [Yuu Yamashita](https://github.com/yyuu)
260
+ - [Koen Punt](http://www.koen.pt/)
261
+ - [Parker Moore](http://www.parkermoore.de/)
262
+ - [Marcell Jusztin](http://www.morcmarc.com)
263
+ - [Eric Hayes](http://ejhay.es)
264
+
265
+ This work is originally based on [Lincoln Stoll's blog post](http://lstoll.net/2008/04/stand-alone-activerecord-migrations/) and [David Welton's post](http://journal.dedasys.com/2007/01/28/using-migrations-outside-of-rails).
@@ -0,0 +1,52 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ task :default do
5
+ sh "rspec spec"
6
+ end
7
+
8
+ task :all do
9
+ sh "AR='~>3.0.0' bundle update activerecord && bundle exec rake"
10
+ sh "AR='~>3.1.0.rc4' bundle update activerecord && bundle exec rake"
11
+ end
12
+
13
+ task :specs => ["specs:nodb"]
14
+ namespace :specs do
15
+ require 'rspec/core/rake_task'
16
+
17
+ desc "only specs that don't use database connection"
18
+ RSpec::Core::RakeTask.new "nodb" do |t|
19
+ t.pattern = "spec/standalone_migrations/**/*_spec.rb"
20
+ end
21
+
22
+ desc "run all specs for travis"
23
+ RSpec::Core::RakeTask.new "travis" do |t|
24
+ t.pattern = "spec/**/*_spec.rb"
25
+ t.rspec_opts = "--tag ~@travis_error"
26
+ end
27
+
28
+ desc "run all specs including those which uses database"
29
+ task :all => [:default, :nodb]
30
+ end
31
+
32
+ # rake install -> install gem locally (for tests)
33
+ # rake release -> push to github and release to gemcutter
34
+ # rake version:bump:patch -> increase version and add a git-tag
35
+ begin
36
+ require 'jeweler'
37
+ rescue LoadError => e
38
+ $stderr.puts "Jeweler, or one of its dependencies, is not available:"
39
+ $stderr.puts "#{e.class}: #{e.message}"
40
+ $stderr.puts "Install it with: sudo gem install jeweler"
41
+ else
42
+ Jeweler::Tasks.new do |gem|
43
+ gem.name = 'ejhayes_standalone_migrations'
44
+ gem.summary = "A thin wrapper to use Rails Migrations in non Rails projects"
45
+ gem.email = "thuss@gabrito.com"
46
+ gem.homepage = "http://github.com/thuss/standalone-migrations"
47
+ gem.authors = ["Todd Huss", "Michael Grosser"]
48
+ gem.license = "MIT"
49
+ end
50
+
51
+ Jeweler::GemcutterTasks.new
52
+ end