standalone_migrations 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -8,3 +8,4 @@ group :dev do
8
8
  gem 'rspec', '~>2'
9
9
  gem 'jeweler'
10
10
  end
11
+
data/README.markdown CHANGED
@@ -1,4 +1,4 @@
1
- Rails migrations in non-Rails (and non Ruby) projects.
1
+ Rails migrations in non-Rails (and non Ruby) projects.
2
2
 
3
3
  WHAT'S NEW
4
4
  ==========
@@ -70,7 +70,7 @@ The general form is:
70
70
  rake db:generate model="model_name" fields="type:column_name0 type:column_name1 ... type:column_namen"
71
71
 
72
72
  You can have as many fields as you would like.
73
-
73
+
74
74
  An example to create a Person table with 3 columns (and it will automatically add the t.timestamps line)
75
75
 
76
76
  rake db:generate model="Person" fields="string:first_name string:last_name integer:age"
@@ -82,7 +82,7 @@ This will create a migration in db/migrate/
82
82
  create_table :Person do |t|
83
83
  t.string :first_name
84
84
  t.string :last_name
85
- t.integer :age
85
+ t.integer :age
86
86
  t.timestamps
87
87
  end
88
88
  end
@@ -108,14 +108,32 @@ This will create a migration in db/migrate/
108
108
  ### To execute a specific up/down of one single migration
109
109
 
110
110
  rake db:migrate:up VERSION=20081220234130
111
-
111
+
112
112
  ### To revert your last migration
113
113
 
114
114
  rake db:rollback
115
115
 
116
116
  ### To revert your last 3 migrations
117
117
 
118
- rake db:rollback STEP=3
118
+ rake db:rollback STEP=3
119
+
120
+ ### Custom configuration
121
+
122
+ By default, Standalone Migrations will assume there exists a "db/"
123
+ directory in your project. But if for some reason you need a specific
124
+ directory structure to work with, you can use a configuration file
125
+ named .standalone_migrations in the root of your project containing
126
+ the following:
127
+
128
+ db:
129
+ seeds: db/seeds.rb
130
+ migrate: db/migrate
131
+ schema: db/schema.rb
132
+ config:
133
+ database: db/config.yml
134
+
135
+ These are the configurable options available. You can omit any of
136
+ the keys and Standalone Migrations will assume the default values.
119
137
 
120
138
  Contributors
121
139
  ============
@@ -127,6 +145,7 @@ Contributors
127
145
  - [Rich Meyers](https://github.com/richmeyers)
128
146
  - [Wes Bailey](http://exposinggotchas.blogspot.com/)
129
147
  - [Robert J. Berger](http://blog.ibd.com/)
130
- - [Federico Builes](http://mheroin.com)
148
+ - [Federico Builes](http://mheroin.com/)
149
+ - [Ricardo Valeriano](http://ricardovaleriano.com/)
131
150
 
132
151
  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).
data/Rakefile CHANGED
@@ -7,6 +7,17 @@ task :all do
7
7
  sh "AR='~>3.1.0.rc4' bundle update activerecord && bundle exec rake"
8
8
  end
9
9
 
10
+ task :specs => ["specs:nodb"]
11
+ namespace :specs do
12
+ require 'rspec/core/rake_task'
13
+ RSpec::Core::RakeTask.new "nodb" do |t|
14
+ t.pattern = "spec/standalone_migrations/**/*_spec.rb"
15
+ end
16
+
17
+ desc "run alls sepcs including those which uses database"
18
+ task :all => [:default, :nodb]
19
+ end
20
+
10
21
  # rake install -> install gem locally (for tests)
11
22
  # rake release -> push to github and release to gemcutter
12
23
  # rake version:bump:patch -> increase version and add a git-tag
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.1
1
+ 1.0.3
@@ -0,0 +1,48 @@
1
+ module StandaloneMigrations
2
+ class Configurator
3
+
4
+ def initialize(options = {})
5
+ defaults = {
6
+ :config => "db/config.yml",
7
+ :migrate_dir => "db/migrate",
8
+ :seeds => "db/seeds.rb",
9
+ :schema => "db/schema.rb"
10
+ }
11
+ @options = load_from_file || defaults.merge(options)
12
+ end
13
+
14
+ def config
15
+ @options[:config]
16
+ end
17
+
18
+ def migrate_dir
19
+ @options[:migrate_dir]
20
+ end
21
+
22
+ def seeds
23
+ @options[:seeds]
24
+ end
25
+
26
+ def schema
27
+ @options[:schema]
28
+ end
29
+
30
+ private
31
+
32
+ def configuration_file
33
+ ".standalone_migrations"
34
+ end
35
+
36
+ def load_from_file
37
+ return nil unless File.exists? configuration_file
38
+ config = YAML.load( IO.read(configuration_file) )
39
+ {
40
+ :config => config[:config][:database],
41
+ :migrate_dir => config[:db][:migrate],
42
+ :seeds => config[:db][:seeds],
43
+ :schema => config[:db][:schema]
44
+ }
45
+ end
46
+
47
+ end
48
+ end
@@ -1,14 +1,17 @@
1
1
  require 'active_support/all'
2
2
  require 'active_record'
3
3
  require 'pathname'
4
+ require 'standalone_migrations/configurator'
4
5
 
5
6
  # earlier versions used migrations from db/migrations, so warn users about the change
6
7
  if File.directory?('db/migrations')
7
8
  puts "DEPRECATED move your migrations into db/migrate"
8
9
  end
9
10
 
11
+ configurator = StandaloneMigrations::Configurator.new
12
+
10
13
  DB_CONFIG = YAML.load(
11
- ERB.new(File.read('db/config.yml')).result
14
+ ERB.new(File.read(configurator.config)).result
12
15
  ).with_indifferent_access
13
16
 
14
17
  module Rails
@@ -26,7 +29,13 @@ module Rails
26
29
  s = "fake_app"
27
30
 
28
31
  def s.paths
29
- Dir.glob('db/*').inject({}){|hash,x|hash[x]=[x]; hash}
32
+ configurator = StandaloneMigrations::Configurator.new
33
+
34
+ {
35
+ "db/migrate" => [configurator.migrate_dir],
36
+ "db/seeds.rb" => [configurator.seeds],
37
+ "db/schema.rb" => [configurator.schema]
38
+ }
30
39
  end
31
40
 
32
41
  def s.config
@@ -36,8 +45,11 @@ module Rails
36
45
  end
37
46
  s
38
47
  end
48
+
49
+ def s.load_seed; end # no-op, needed for db:reset
39
50
  s
40
51
  end
52
+
41
53
  end
42
54
 
43
55
  task(:rails_env){}
@@ -68,8 +80,13 @@ class #{class_name migration} < ActiveRecord::Migration
68
80
  end
69
81
  end
70
82
  eof
71
- create_file file_name(migration), file_contents
72
- puts "Created migration #{file_name migration}"
83
+ filename = migration.underscore
84
+ create_file file_name(filename), file_contents
85
+ puts "Created migration #{file_name filename}"
86
+ end
87
+
88
+ def configurator
89
+ StandaloneMigrations::Configurator.new
73
90
  end
74
91
 
75
92
  def create_file file, contents
@@ -79,7 +96,7 @@ eof
79
96
  end
80
97
 
81
98
  def file_name migration
82
- File.join 'db/migrate', "#{Time.now.utc.strftime '%Y%m%d%H%M%S'}_#{migration}.rb"
99
+ File.join configurator.migrate_dir, "#{Time.now.utc.strftime '%Y%m%d%H%M%S'}_#{migration}.rb"
83
100
  end
84
101
 
85
102
  def class_name str
@@ -0,0 +1,3 @@
1
+ $: << File.join(File.expand_path('../', __FILE__), 'lib')
2
+
3
+ require 'standalone_migrations/configurator'
@@ -0,0 +1,114 @@
1
+ require 'spec_helper'
2
+ require 'yaml'
3
+
4
+ module StandaloneMigrations
5
+ describe Configurator, "which allows define custom dirs and files to work with your migrations" do
6
+
7
+ context "default values when .standalone_configurations is missing" do
8
+
9
+ let(:configurator) do
10
+ Configurator.new
11
+ end
12
+
13
+ it "use config/database.yml" do
14
+ configurator.config.should == 'db/config.yml'
15
+ end
16
+
17
+ it "use db/migrate dir" do
18
+ configurator.migrate_dir.should == 'db/migrate'
19
+ end
20
+
21
+ it "use db/seeds.rb" do
22
+ configurator.seeds.should == "db/seeds.rb"
23
+ end
24
+
25
+ it "use db/schema.rb" do
26
+ configurator.schema.should == "db/schema.rb"
27
+ end
28
+
29
+ end
30
+
31
+ context "passing configurations as a parameter" do
32
+
33
+ let(:args) do
34
+ {
35
+ :config => "custom/config/database.yml",
36
+ :migrate_dir => "custom/db/migrate",
37
+ :seeds => "custom/db/seeds.rb",
38
+ :schema => "custom/db/schema.rb"
39
+ }
40
+ end
41
+
42
+ let(:configurator) do
43
+ Configurator.new args
44
+ end
45
+
46
+ it "use custom config" do
47
+ configurator.config.should == args[:config]
48
+ end
49
+
50
+ it "use custom migrate dir" do
51
+ configurator.migrate_dir.should == args[:migrate_dir]
52
+ end
53
+
54
+ it "use custom seeds" do
55
+ configurator.seeds.should == args[:seeds]
56
+ end
57
+
58
+ it "use custom schema" do
59
+ configurator.schema.should == args[:schema]
60
+ end
61
+
62
+ end
63
+
64
+ context "using a .standalone_migrations file with configurations" do
65
+
66
+ before(:all) do
67
+ @original_dir = Dir.pwd
68
+ Dir.chdir File.expand_path("../", __FILE__)
69
+ end
70
+
71
+ let(:yaml_hash) do
72
+ {
73
+ :db => {
74
+ :seeds => "file/db/seeds.rb",
75
+ :migrate => "file/db/migrate",
76
+ :schema => "file/db/schema.rb"
77
+ },
78
+ :config => {
79
+ :database => "file/config/database.yml"
80
+ }
81
+ }
82
+ end
83
+
84
+ let(:configurator) do
85
+ file = ".standalone_migrations"
86
+ File.open(file, "w") { |file| file.write(yaml_hash.to_yaml) }
87
+
88
+ Configurator.new
89
+ end
90
+
91
+ it "use custom config from file" do
92
+ configurator.config.should == yaml_hash[:config][:database]
93
+ end
94
+
95
+ it "use custom migrate dir from file" do
96
+ configurator.migrate_dir.should == yaml_hash[:db][:migrate]
97
+ end
98
+
99
+ it "use custom seeds from file" do
100
+ configurator.seeds.should == yaml_hash[:db][:seeds]
101
+ end
102
+
103
+ it "use custom schema from file" do
104
+ configurator.schema.should == yaml_hash[:db][:schema]
105
+ end
106
+
107
+ after(:all) do
108
+ File.delete ".standalone_migrations"
109
+ Dir.chdir @original_dir
110
+ end
111
+
112
+ end
113
+ end
114
+ end
@@ -110,6 +110,11 @@ test:
110
110
  run("rake db:new_migration name=test_abc").should =~ %r{Created migration db/migrate/\d+_test_abc\.rb}
111
111
  run("ls db/migrate").should =~ /^\d+_test_abc.rb$/
112
112
  end
113
+
114
+ it "generates a new migration with the name converted to the Rails migration format" do
115
+ run("rake db:new_migration name=MyNiceModel").should =~ %r{Created migration db/migrate/\d+_my_nice_model\.rb}
116
+ run("ls db/migrate").should =~ /^\d+_my_nice_model.rb$/
117
+ end
113
118
  end
114
119
 
115
120
  describe 'db:version' do
@@ -169,30 +174,30 @@ test:
169
174
  lambda{ run("rake db:migrate:up") }.should raise_error(/VERSION/)
170
175
  end
171
176
  end
172
-
177
+
173
178
  describe 'db:rollback' do
174
179
  it "does nothing when no migrations have been run" do
175
180
  run("rake db:version").should =~ /version: 0/
176
181
  run("rake db:rollback").should == ''
177
- run("rake db:version").should =~ /version: 0/
182
+ run("rake db:version").should =~ /version: 0/
178
183
  end
179
-
180
- it "rolls back the last migration if one has been applied" do
181
- write_multiple_migrations
182
- run("rake db:migrate")
184
+
185
+ it "rolls back the last migration if one has been applied" do
186
+ write_multiple_migrations
187
+ run("rake db:migrate")
183
188
  run("rake db:version").should =~ /version: 20100509095816/
184
189
  run("rake db:rollback").should =~ /revert/
185
190
  run("rake db:version").should =~ /version: 20100509095815/
186
191
  end
187
-
192
+
188
193
  it "rolls back multiple migrations if the STEP argument is given" do
189
- write_multiple_migrations
190
- run("rake db:migrate")
194
+ write_multiple_migrations
195
+ run("rake db:migrate")
191
196
  run("rake db:version").should =~ /version: 20100509095816/
192
197
  run("rake db:rollback STEP=2") =~ /revert/
193
198
  run("rake db:version").should =~ /version: 0/
194
199
  end
195
- end
200
+ end
196
201
 
197
202
  describe 'schema:dump' do
198
203
  it "dumps the schema" do
@@ -248,7 +253,7 @@ test:
248
253
  run('rake db:test:purge')
249
254
  end
250
255
  end
251
-
256
+
252
257
  describe 'db:migrate when environment is specified' do
253
258
  it "runs when using the DB environment variable" do
254
259
  make_migration('yyy')
@@ -256,9 +261,9 @@ test:
256
261
  run('rake db:version DB=test').should_not =~ /version: 0/
257
262
  run('rake db:version').should =~ /version: 0/
258
263
  end
259
-
264
+
260
265
  it "should error on an invalid database" do
261
266
  lambda{ run("rake db:create DB=nonexistent")}.should raise_error(/rake aborted/)
262
- end
267
+ end
263
268
  end
264
269
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "standalone_migrations"
8
- s.version = "1.0.2"
8
+ s.version = "1.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Todd Huss", "Michael Grosser"]
12
- s.date = "2011-10-29"
12
+ s.date = "2011-11-01"
13
13
  s.email = "thuss@gabrito.com"
14
14
  s.extra_rdoc_files = [
15
15
  "README.markdown"
@@ -21,7 +21,10 @@ Gem::Specification.new do |s|
21
21
  "README.markdown",
22
22
  "Rakefile",
23
23
  "VERSION",
24
+ "lib/standalone_migrations/configurator.rb",
24
25
  "lib/tasks/standalone_migrations.rb",
26
+ "spec/spec_helper.rb",
27
+ "spec/standalone_migrations/configurator_spec.rb",
25
28
  "spec/standalone_migrations_spec.rb",
26
29
  "standalone_migrations.gemspec",
27
30
  "vendor/migration_helpers/MIT-LICENSE",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: standalone_migrations
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-10-29 00:00:00.000000000Z
13
+ date: 2011-11-01 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
17
- requirement: &70165700211020 !ruby/object:Gem::Requirement
17
+ requirement: &70305689446500 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70165700211020
25
+ version_requirements: *70305689446500
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: activerecord
28
- requirement: &70165700210100 !ruby/object:Gem::Requirement
28
+ requirement: &70305689445960 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,7 +33,7 @@ dependencies:
33
33
  version: '3'
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *70165700210100
36
+ version_requirements: *70305689445960
37
37
  description:
38
38
  email: thuss@gabrito.com
39
39
  executables: []
@@ -47,7 +47,10 @@ files:
47
47
  - README.markdown
48
48
  - Rakefile
49
49
  - VERSION
50
+ - lib/standalone_migrations/configurator.rb
50
51
  - lib/tasks/standalone_migrations.rb
52
+ - spec/spec_helper.rb
53
+ - spec/standalone_migrations/configurator_spec.rb
51
54
  - spec/standalone_migrations_spec.rb
52
55
  - standalone_migrations.gemspec
53
56
  - vendor/migration_helpers/MIT-LICENSE