cairn 7.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,371 @@
1
+ require 'spec_helper'
2
+ describe 'Standalone migrations' do
3
+
4
+ def write(file, content)
5
+ raise "cannot write nil" unless file
6
+ file = tmp_file(file)
7
+ folder = File.dirname(file)
8
+ `mkdir -p #{folder}` unless File.exist?(folder)
9
+ File.open(file, 'w') { |f| f.write content }
10
+ end
11
+
12
+ def read(file)
13
+ File.read(tmp_file(file))
14
+ end
15
+
16
+ def migration(name)
17
+ m = `cd spec/tmp/db/migrate && ls`.split("\n").detect { |m| m =~ /#{name}/ }
18
+ m ? "db/migrate/#{m}" : m
19
+ end
20
+
21
+ def tmp_file(file)
22
+ "spec/tmp/#{file}"
23
+ end
24
+
25
+ def schema
26
+ ENV['SCHEMA']
27
+ end
28
+
29
+ def run(cmd)
30
+ result = `cd spec/tmp && #{cmd} 2>&1`
31
+ raise result unless $?.success?
32
+ result
33
+ end
34
+
35
+ def make_migration(name, options={})
36
+ task_name = options[:task_name] || 'db:new_migration'
37
+ migration = run("rake #{task_name} name=#{name}").match(%r{db/migrate/\d+.*.rb})[0]
38
+ content = read(migration)
39
+ content.sub!(/def down.*?\send/m, "def down;puts 'DOWN-#{name}';end")
40
+ content.sub!(/def up.*?\send/m, "def up;puts 'UP-#{name}';end")
41
+ write(migration, content)
42
+ migration.match(/\d{14}/)[0]
43
+ end
44
+
45
+ def write_rakefile(config=nil)
46
+ write 'Rakefile', <<-TXT
47
+ $LOAD_PATH.unshift '#{File.expand_path('lib')}'
48
+ begin
49
+ require "standalone_migrations"
50
+ StandaloneMigrations::Tasks.load_tasks
51
+ rescue LoadError => e
52
+ puts "gem install standalone_migrations to get db:migrate:* tasks! (Error: \#{e})"
53
+ end
54
+ TXT
55
+ end
56
+
57
+ def write_multiple_migrations
58
+ migration_superclass = if Rails::VERSION::MAJOR >= 5
59
+ "ActiveRecord::Migration[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
60
+ else
61
+ "ActiveRecord::Migration"
62
+ end
63
+
64
+ write_rakefile %{t.migrations = "db/migrations", "db/migrations2"}
65
+ write "db/migrate/20100509095815_create_tests.rb", <<-TXT
66
+ class CreateTests < #{migration_superclass}
67
+ def up
68
+ puts "UP-CreateTests"
69
+ end
70
+
71
+ def down
72
+ puts "DOWN-CreateTests"
73
+ end
74
+ end
75
+ TXT
76
+ write "db/migrate/20100509095816_create_tests2.rb", <<-TXT
77
+ class CreateTests2 < #{migration_superclass}
78
+ def up
79
+ puts "UP-CreateTests2"
80
+ end
81
+
82
+ def down
83
+ puts "DOWN-CreateTests2"
84
+ end
85
+ end
86
+ TXT
87
+ end
88
+
89
+ before do
90
+ StandaloneMigrations::Configurator.instance_variable_set(:@env_config, nil)
91
+ `rm -rf spec/tmp` if File.exist?('spec/tmp')
92
+ `mkdir spec/tmp`
93
+ write_rakefile
94
+ write(schema, '')
95
+ write 'db/config.yml', <<-TXT
96
+ development:
97
+ adapter: sqlite3
98
+ database: db/development.sql
99
+ test:
100
+ adapter: sqlite3
101
+ database: db/test.sql
102
+ production:
103
+ adapter: sqlite3
104
+ database: db/production.sql
105
+ TXT
106
+ end
107
+
108
+ after(:all) do
109
+ `rm -rf spec/tmp` if File.exist?('spec/tmp')
110
+ end
111
+
112
+ it "warns of deprecated folder structure" do
113
+ warning = /DEPRECATED.* db\/migrate/
114
+ expect(run("rake db:create")).not_to match(warning)
115
+ write('db/migrations/fooo.rb', 'xxx')
116
+ expect(run("rake db:create --trace")).to match(warning)
117
+ end
118
+
119
+ describe 'db:create and drop' do
120
+ it "should create the database and drop the database that was created" do
121
+ run "rake db:create"
122
+ run "rake db:drop"
123
+ end
124
+ end
125
+
126
+ describe 'callbacks' do
127
+ it 'runs the callbacks' do
128
+ expect(StandaloneMigrations::Tasks).to receive(:configure).and_call_original
129
+
130
+ connection_established = false
131
+ expect(ActiveRecord::Base).to receive(:establish_connection) do
132
+ connection_established = true
133
+ end
134
+ expect(StandaloneMigrations).to receive(:run_on_load_callbacks) do
135
+ expect(connection_established).to be true
136
+ end
137
+
138
+ Dir.chdir(File.join(File.dirname(__FILE__), "tmp")) do
139
+ load "Rakefile"
140
+ Rake::Task['standalone:connection'].invoke
141
+ end
142
+ end
143
+ end
144
+
145
+ describe 'db:new_migration' do
146
+ it "fails if i do not add a name" do
147
+ expect(lambda{ run("rake db:new_migration") }).to raise_error(/name=/)
148
+ end
149
+
150
+ it "generates a new migration with this name from ENV and timestamp" do
151
+ expect(run("rake db:new_migration name=test_abc_env")).to match(%r{create(.*)db/migrate/\d+_test_abc_env\.rb})
152
+ expect(run("ls db/migrate")).to match(/^\d+_test_abc_env.rb$/)
153
+ end
154
+
155
+ it "generates a new migration with this name from args and timestamp" do
156
+ expect(run("rake db:new_migration[test_abc_args]")).to match(%r{create(.*)db/migrate/\d+_test_abc_args\.rb})
157
+ expect(run("ls db/migrate")).to match(/^\d+_test_abc_args.rb$/)
158
+ end
159
+
160
+ it "generates a new migration with the name converted to the Rails migration format" do
161
+ expect(run("rake db:new_migration name=MyNiceModel")).to match(%r{create(.*)db/migrate/\d+_my_nice_model\.rb})
162
+ expect(read(migration('my_nice_model'))).to match(/class MyNiceModel/)
163
+ expect(run("ls db/migrate")).to match(/^\d+_my_nice_model.rb$/)
164
+ end
165
+
166
+ it "generates a new migration with name and options from ENV" do
167
+ run("rake db:new_migration name=add_name_and_email_to_users options='name:string email:string'")
168
+ expect(read(migration('add_name_and_email_to_users'))).to match(/add_column :users, :name, :string\n\s*add_column :users, :email, :string/)
169
+ end
170
+
171
+ it "generates a new migration with name and options from args" do
172
+ run("rake db:new_migration[add_website_and_username_to_users,website:string/username:string]")
173
+ expect(read(migration('add_website_and_username_to_users'))).to match(/add_column :users, :website, :string\n\s*add_column :users, :username, :string/)
174
+ end
175
+ end
176
+
177
+ describe 'db:version' do
178
+ it "should start with a new database version" do
179
+ expect(run("rake db:version")).to match(/Current version: 0/)
180
+ end
181
+
182
+ it "should display the current version" do
183
+ run("rake db:new_migration name=test_abc")
184
+ run("rake --trace db:migrate")
185
+ expect(run("rake db:version")).to match(/Current version: #{Time.now.year}/)
186
+ end
187
+ end
188
+
189
+ describe 'db:migrate' do
190
+ it "does nothing when no migrations are present" do
191
+ expect(run("rake db:migrate")).not_to match(/Migrating/)
192
+ end
193
+
194
+ it "migrates if i add a migration" do
195
+ run("rake db:new_migration name=xxx")
196
+ expect(run("rake db:migrate")).to match(/Xxx: Migrating/i)
197
+ end
198
+ end
199
+
200
+ describe 'db:migrate:down' do
201
+ it "migrates down" do
202
+ make_migration('xxx')
203
+ sleep 1
204
+ version = make_migration('yyy')
205
+ run 'rake db:migrate'
206
+
207
+ result = run("rake db:migrate:down VERSION=#{version}")
208
+ expect(result).not_to match(/Xxx: reverting/)
209
+ expect(result).to match(/Yyy: reverting/)
210
+ end
211
+
212
+ it "fails without version" do
213
+ make_migration('yyy')
214
+ # Rails has a bug where it's sending a bad failure exception
215
+ # https://github.com/rails/rails/issues/28905
216
+ expect(lambda{ run("rake db:migrate:down") }).to raise_error(/VERSION|version/)
217
+ end
218
+ end
219
+
220
+ describe 'db:migrate:up' do
221
+ it "migrates up" do
222
+ make_migration('xxx')
223
+ run 'rake db:migrate'
224
+ sleep 1
225
+ version = make_migration('yyy')
226
+ result = run("rake db:migrate:up VERSION=#{version}")
227
+ expect(result).not_to match(/Xxx: migrating/)
228
+ expect(result).to match(/Yyy: migrating/)
229
+ end
230
+
231
+ it "fails without version" do
232
+ make_migration('yyy')
233
+ # Rails has a bug where it's sending a bad failure exception
234
+ # https://github.com/rails/rails/issues/28905
235
+ expect(lambda{ run("rake db:migrate:up") }).to raise_error(/VERSION|version/)
236
+ end
237
+ end
238
+
239
+ describe 'db:rollback' do
240
+ it "does nothing when no migrations have been run" do
241
+ expect(run("rake db:version")).to match(/version: 0/)
242
+ expect(run("rake db:rollback")).to eq('')
243
+ expect(run("rake db:version")).to match(/version: 0/)
244
+ end
245
+
246
+ it "rolls back the last migration if one has been applied" do
247
+ write_multiple_migrations
248
+ run("rake db:migrate")
249
+ expect(run("rake db:version")).to match(/version: 20100509095816/)
250
+ expect(run("rake db:rollback")).to match(/revert/)
251
+ expect(run("rake db:version")).to match(/version: 20100509095815/)
252
+ end
253
+
254
+ it "rolls back multiple migrations if the STEP argument is given" do
255
+ write_multiple_migrations
256
+ run("rake db:migrate")
257
+ expect(run("rake db:version")).to match(/version: 20100509095816/)
258
+ run("rake db:rollback STEP=2") =~ /revert/
259
+ expect(run("rake db:version")).to match(/version: 0/)
260
+ end
261
+ end
262
+
263
+ describe 'schema:dump' do
264
+ it "dumps the schema" do
265
+ write(schema, '')
266
+ run('rake db:schema:dump')
267
+ expect(read(schema)).to match(/ActiveRecord/)
268
+ end
269
+ end
270
+
271
+ describe 'db:schema:load' do
272
+ it "loads the schema" do
273
+ run('rake db:schema:dump')
274
+ write(schema, read(schema)+"\nputs 'LOADEDDD'")
275
+ result = run('rake db:schema:load')
276
+ expect(result).to match(/LOADEDDD/)
277
+ end
278
+
279
+ it "loads all migrations" do
280
+ make_migration('yyy')
281
+ run "rake db:migrate"
282
+ run "rake db:drop"
283
+ run "rake db:create"
284
+ run "rake db:schema:load"
285
+ expect(run( "rake db:migrate").strip).to eq('')
286
+ end
287
+ end
288
+
289
+ describe 'db:abort_if_pending_migrations' do
290
+ it "passes when no migrations are pending" do
291
+ expect(run("rake db:abort_if_pending_migrations").strip).to eq('')
292
+ end
293
+
294
+ it "fails when migrations are pending" do
295
+ make_migration('yyy')
296
+ expect(lambda{ run("rake db:abort_if_pending_migrations") }).to raise_error(/1 pending migration/)
297
+ end
298
+ end
299
+
300
+ describe 'db:test:load' do
301
+ it 'loads' do
302
+ write(schema, "puts 'LOADEDDD'")
303
+ expect(run("rake db:test:load")).to match(/LOADEDDD/)
304
+ end
305
+
306
+ it "fails without schema" do
307
+ schema_path = "spec/tmp/#{schema}"
308
+ `rm -rf #{schema_path}` if File.exist?(schema_path)
309
+ expect(lambda{ run("rake db:test:load") }).to raise_error(/try again/)
310
+ end
311
+ end
312
+
313
+ describe 'db:test:purge' do
314
+ it "runs" do
315
+ run('rake db:test:purge')
316
+ end
317
+ end
318
+
319
+ describe "db:seed" do
320
+ it "loads" do
321
+ write("db/seeds.rb", "puts 'LOADEDDD'")
322
+ expect(run("rake db:seed")).to match(/LOADEDDD/)
323
+ end
324
+
325
+ describe 'with non-default seed file' do
326
+ let(:yaml_hash) do
327
+ {
328
+ "db" => {
329
+ "seeds" => "db/seeds2.rb",
330
+ }
331
+ }
332
+ end
333
+
334
+ before do
335
+ write(".standalone_migrations", yaml_hash.to_yaml)
336
+ end
337
+
338
+
339
+ it "loads" do
340
+ write("db/seeds2.rb", "puts 'LOADEDDD'")
341
+ expect(run("rake db:seed")).to match(/LOADEDDD/)
342
+ end
343
+ end
344
+
345
+
346
+ it "does nothing without seeds" do
347
+ expect(run("rake db:seed").length).to eq(0)
348
+ end
349
+ end
350
+
351
+ describe "db:reset" do
352
+ it "should not error when a seeds file does not exist" do
353
+ make_migration('yyy')
354
+ run('rake db:migrate DB=test')
355
+ expect(lambda{ run("rake db:reset") }).not_to raise_error
356
+ end
357
+ end
358
+
359
+ describe 'db:migrate when environment is specified' do
360
+ it "runs when using the DB environment variable", :travis_error => true do
361
+ make_migration('yyy')
362
+ run('rake db:migrate RAILS_ENV=test')
363
+ expect(run('rake db:version RAILS_ENV=test')).not_to match(/version: 0/)
364
+ expect(run('rake db:version')).to match(/version: 0/)
365
+ end
366
+
367
+ it "should error on an invalid database", :travis_error => true do
368
+ expect(lambda{ run("rake db:create RAILS_ENV=nonexistent")}).to raise_error(/rake aborted/)
369
+ end
370
+ end
371
+ end
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 Jesús García Sáez
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,92 @@
1
+
2
+ DESCRIPTION
3
+ ===========
4
+
5
+ Helpers for migrations of ActiveRecord for dealing with foreign keys and primary keys.
6
+
7
+ FEATURES
8
+ ========
9
+
10
+ * **foreign keys**
11
+ * foreign_key(table, field, referenced_table, referenced_field, on_cascade)
12
+ * drop_foreign_key(table, field)
13
+ * **primary keys**
14
+ * primary_key(table, field)
15
+
16
+ Examples
17
+ ========
18
+
19
+ Typical use:
20
+
21
+ def self.up
22
+ create_table :profiles do |t|
23
+ t.string :first_name
24
+ t.string :last_name
25
+ t.string :email
26
+ t.boolean :is_disabled
27
+ end
28
+ create_table :users do |t|
29
+ t.string :login
30
+ t.string :crypted_password
31
+ t.string :salt
32
+ t.integer :profile_id
33
+ end
34
+
35
+ foreign_key :users, :profile_id, :profiles
36
+ end
37
+
38
+ def self.down
39
+ drop_foreign_key :users, :profile_id
40
+ drop_table :users
41
+ drop_table :profiles
42
+ end
43
+
44
+
45
+ Also, if we don't defined a common :id (exactly it's rails who define it), we should create a primary key:
46
+
47
+ def self.up
48
+ create_table :foo, :id => false do |t|
49
+ t.string :foo, :bar
50
+ end
51
+
52
+ primary_key :foo, [ :foo, :bar ]
53
+ end
54
+
55
+ In the parameter where a field is required (like the second parameter in *primary_key*) you can specified and symbol (or string) or an array of symbols (or strings).
56
+
57
+
58
+ REQUIREMENTS
59
+ ============
60
+
61
+ * It's been tested with Mysql adapter and Jdbcmysql adapter
62
+
63
+ INSTALL
64
+ =======
65
+
66
+ * script/plugin install git://github.com/blaxter/migration_helpers.git
67
+
68
+ LICENSE
69
+ =======
70
+
71
+ (The MIT License)
72
+
73
+ Copyright (c) 2008 Jesús García Sáez <jgarcia@warp.es>
74
+
75
+ Permission is hereby granted, free of charge, to any person obtaining
76
+ a copy of this software and associated documentation files (the
77
+ 'Software'), to deal in the Software without restriction, including
78
+ without limitation the rights to use, copy, modify, merge, publish,
79
+ distribute, sublicense, and/or sell copies of the Software, and to
80
+ permit persons to whom the Software is furnished to do so, subject to
81
+ the following conditions:
82
+
83
+ The above copyright notice and this permission notice shall be
84
+ included in all copies or substantial portions of the Software.
85
+
86
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
87
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
88
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
89
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
90
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
91
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
92
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,4 @@
1
+ require 'migration_helper'
2
+
3
+ ActiveRecord::ConnectionAdapters::AbstractAdapter.
4
+ send :include, MigrationConstraintHelpers
@@ -0,0 +1,51 @@
1
+ module MigrationConstraintHelpers
2
+
3
+ # Creates a foreign key from +table+.+field+ against referenced_table.referenced_field
4
+ #
5
+ # table: The tablename
6
+ # field: A field of the table
7
+ # referenced_table: The table which contains the field referenced
8
+ # referenced_field: The field (which should be part of the primary key) of the referenced table
9
+ # cascade: delete & update on cascade?
10
+ def foreign_key(table, field, referenced_table, referenced_field = :id, cascade = true)
11
+ execute "ALTER TABLE #{table} ADD CONSTRAINT #{constraint_name(table, field)}
12
+ FOREIGN KEY #{constraint_name(table, field)} (#{field_list(field)})
13
+ REFERENCES #{referenced_table}(#{field_list(referenced_field)})
14
+ #{(cascade ? 'ON DELETE CASCADE ON UPDATE CASCADE' : '')}"
15
+ end
16
+
17
+ # Drops a foreign key from +table+.+field+ that has been created before with
18
+ # foreign_key method
19
+ #
20
+ # table: The table name
21
+ # field: A field (or array of fields) of the table
22
+ def drop_foreign_key(table, field)
23
+ execute "ALTER TABLE #{table} DROP FOREIGN KEY #{constraint_name(table, field)}"
24
+ end
25
+
26
+ # Creates a primary key for +table+, which right now HAS NOT primary key defined
27
+ #
28
+ # table: The table name
29
+ # field: A field (or array of fields) of the table that will be part of the primary key
30
+ def primary_key(table, field)
31
+ execute "ALTER TABLE #{table} ADD PRIMARY KEY(#{field_list(field)})"
32
+ end
33
+
34
+ private
35
+
36
+ # Creates a constraint name for table and field given as parameters
37
+ #
38
+ # table: The table name
39
+ # field: A field of the table
40
+ def constraint_name(table, field)
41
+ "fk_#{table}_#{field_list_name(field)}"
42
+ end
43
+
44
+ def field_list(fields)
45
+ fields.is_a?(Array) ? fields.join(',') : fields
46
+ end
47
+
48
+ def field_list_name(fields)
49
+ fields.is_a?(Array) ? fields.join('_') : fields
50
+ end
51
+ end
metadata ADDED
@@ -0,0 +1,152 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cairn
3
+ version: !ruby/object:Gem::Version
4
+ version: 7.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Karl Oscar Weber
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-08-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '10.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '10.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activerecord
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 4.2.7
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: 7.1.0
37
+ - - "!="
38
+ - !ruby/object:Gem::Version
39
+ version: 5.2.3
40
+ - - "!="
41
+ - !ruby/object:Gem::Version
42
+ version: 5.2.3.rc1
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 4.2.7
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: 7.1.0
53
+ - - "!="
54
+ - !ruby/object:Gem::Version
55
+ version: 5.2.3
56
+ - - "!="
57
+ - !ruby/object:Gem::Version
58
+ version: 5.2.3.rc1
59
+ - !ruby/object:Gem::Dependency
60
+ name: railties
61
+ requirement: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: 4.2.7
66
+ - - "<"
67
+ - !ruby/object:Gem::Version
68
+ version: 7.1.0
69
+ - - "!="
70
+ - !ruby/object:Gem::Version
71
+ version: 5.2.3
72
+ - - "!="
73
+ - !ruby/object:Gem::Version
74
+ version: 5.2.3.rc1
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: 4.2.7
82
+ - - "<"
83
+ - !ruby/object:Gem::Version
84
+ version: 7.1.0
85
+ - - "!="
86
+ - !ruby/object:Gem::Version
87
+ version: 5.2.3
88
+ - - "!="
89
+ - !ruby/object:Gem::Version
90
+ version: 5.2.3.rc1
91
+ description:
92
+ email: me@kow.fm
93
+ executables: []
94
+ extensions: []
95
+ extra_rdoc_files:
96
+ - LICENSE
97
+ - README.markdown
98
+ files:
99
+ - ".rspec"
100
+ - ".travis.yml"
101
+ - Gemfile
102
+ - LICENSE
103
+ - README.markdown
104
+ - Rakefile
105
+ - VERSION
106
+ - cairn.gemspec
107
+ - example/.gitignore
108
+ - example/Rakefile
109
+ - example/db/config.yml
110
+ - example/db/migrate/20120930053225_create_table_awesome_migration.rb
111
+ - lib/standalone_migrations.rb
112
+ - lib/standalone_migrations/callbacks.rb
113
+ - lib/standalone_migrations/configurator.rb
114
+ - lib/standalone_migrations/generator.rb
115
+ - lib/standalone_migrations/minimal_railtie_config.rb
116
+ - lib/standalone_migrations/tasks.rb
117
+ - lib/standalone_migrations/tasks/connection.rake
118
+ - lib/standalone_migrations/tasks/db/new_migration.rake
119
+ - lib/standalone_migrations/tasks/environment.rake
120
+ - lib/tasks/standalone_migrations.rb
121
+ - spec/spec_helper.rb
122
+ - spec/standalone_migrations/callbacks_spec.rb
123
+ - spec/standalone_migrations/configurator_spec.rb
124
+ - spec/standalone_migrations_spec.rb
125
+ - vendor/migration_helpers/MIT-LICENSE
126
+ - vendor/migration_helpers/README.markdown
127
+ - vendor/migration_helpers/init.rb
128
+ - vendor/migration_helpers/lib/migration_helper.rb
129
+ homepage: http://github.com/karloscarweber/cairn
130
+ licenses:
131
+ - MIT
132
+ metadata: {}
133
+ post_install_message:
134
+ rdoc_options: []
135
+ require_paths:
136
+ - lib
137
+ required_ruby_version: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ required_rubygems_version: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ requirements: []
148
+ rubygems_version: 3.3.7
149
+ signing_key:
150
+ specification_version: 4
151
+ summary: A thin wrapper to use Rails Migrations in non Rails projects
152
+ test_files: []