unschema 0.0.2 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 01ed70f4c6013133bd2b75219bad66d570bc5d78
4
+ data.tar.gz: 0ada28339c5538bccde776ddf5c7017db209f65e
5
+ SHA512:
6
+ metadata.gz: 6245c40160baf94f84f8736e4aceb0a1d27b5beed15aaa356efdf58cd4acbb38a5c224b0e2097e321b93e41eb341883b6ee72058a51c6943ebcbb0621c37923c
7
+ data.tar.gz: 888c0f5114435aec00325a6beac2227ed198fdf9433bc73c6d2a81f994409aaa48bfdf04eeecf0a19f29172530557c55bec81db01134ca41e628c0f37b0a459f
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.9.3"
4
+ - "2.0.0"
5
+ - jruby-19mode
6
+ - rbx-19mode
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Unschema - rebase your schema.rb
2
2
 
3
- Splits yout schema.rb into separate migrations per table.
3
+ [![Build Status](https://travis-ci.org/neopoly/unschema.png?branch=master)](https://travis-ci.org/neopoly/unschema) [![Gem Version](https://badge.fury.io/rb/unschema.png)](http://badge.fury.io/rb/unschema) [![Code Climate](https://codeclimate.com/github/neopoly/unschema.png)](https://codeclimate.com/github/neopoly/unschema)
4
+
5
+ Splits your schema.rb into separate migrations per table.
4
6
 
5
7
  Every table migration contains a create_table and additional add_index calls.
6
8
 
@@ -22,7 +24,12 @@ Or install it yourself as:
22
24
 
23
25
  ## Usage
24
26
 
25
- puts "usage: unschema [SCHEMA_FILE] [MIGRATIONS_DIR] [START_VERSION]"
27
+ usage: unschema [SCHEMA_FILE] [MIGRATIONS_DIR]
28
+
29
+ ## TODO
30
+
31
+ * Auto-detect Rails directory and use correct defaults.
32
+ * Generate prettier migrations (ident, options hashes, newlines)
26
33
 
27
34
  ## Contributing
28
35
 
data/Rakefile CHANGED
@@ -1 +1,10 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ task :default => :test
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.libs << "test"
8
+ t.test_files = FileList['test/**/*_test.rb']
9
+ t.verbose = true
10
+ end
data/bin/unschema CHANGED
@@ -7,13 +7,12 @@ $LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
7
7
 
8
8
  require 'unschema'
9
9
 
10
- if ARGV.size != 3
11
- puts "usage: unschema [SCHEMA_FILE] [MIGRATIONS_DIR] [START_VERSION]"
10
+ if ARGV.size != 2
11
+ puts "usage: unschema [SCHEMA_FILE] [MIGRATIONS_DIR]"
12
12
  exit 1
13
13
  end
14
14
  schema_file = ARGV[0]
15
15
  migrations_path = ARGV[1]
16
- start_version = ARGV[2].to_i
17
16
 
18
17
  puts "Processing #{schema_file.inspect}"
19
- Unschema::Base.process!(schema_file, migrations_path, start_version, true)
18
+ Unschema::Base.process!(schema_file, migrations_path, true)
data/lib/unschema.rb CHANGED
@@ -1,12 +1,4 @@
1
1
  require "unschema/version"
2
2
  require "unschema/base"
3
3
  require "unschema/schema_intermediator"
4
-
5
- module Unschema
6
- # Your code goes here...
7
- end
8
-
9
- module ActiveRecord
10
- class Schema
11
- end
12
- end
4
+ require "unschema/fake_schema"
data/lib/unschema/base.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Unschema
2
- class Base < Struct.new(:schema_file, :migrations_path, :start_version, :verbose)
2
+ class Base < Struct.new(:schema_file, :migrations_path, :verbose)
3
3
  def self.process!(*args)
4
4
  new(*args).process
5
5
  end
@@ -9,10 +9,10 @@ module Unschema
9
9
  end
10
10
 
11
11
  def process
12
- disarm_schema_loader!
13
-
14
12
  load schema_file
15
13
 
14
+ @version = ActiveRecord::Schema.intermediator.version
15
+
16
16
  calls_for_tables = Hash.new{|hash, key| hash[key] = []}
17
17
 
18
18
  ActiveRecord::Schema.intermediator.calls.each do |call|
@@ -32,23 +32,11 @@ module Unschema
32
32
  end
33
33
 
34
34
  private
35
- def disarm_schema_loader!
36
- ActiveRecord::Schema.class_eval do
37
- class << self
38
- attr_accessor :intermediator
39
- end
40
-
41
- def self.define(*args, &block)
42
- self.intermediator ||= Unschema::SchemaIntermediator.new
43
- self.intermediator.process(*args, &block)
44
- end
45
- end
46
- end
47
35
 
48
36
  def dump_table_calls(table_name, calls)
49
37
  File.open(File.join(migrations_path, "#{next_migration}_create_#{table_name}.rb"), "w") do |f|
50
38
  f << "class Create#{table_name.gsub(/^(\w)/){|s| s.upcase }.gsub(/(_\w)/){|s| s[-1, 1].upcase} } < ActiveRecord::Migration\n"
51
-
39
+
52
40
  f << " def change\n"
53
41
 
54
42
  calls.each do |call|
@@ -80,9 +68,7 @@ module Unschema
80
68
  end
81
69
 
82
70
  def next_migration
83
- @next_migration ||= start_version
84
-
85
- @next_migration += 1
71
+ @version += 1
86
72
  end
87
73
 
88
74
  end
@@ -0,0 +1,17 @@
1
+ # Mock ActiveRecord::Schema for schema.rb.
2
+ #
3
+ # This mock intercepts all method calls in `ActiveRecord::Schema.define`.
4
+ #
5
+ # See your schema.rb.
6
+ module ActiveRecord
7
+ class Schema
8
+ class << self
9
+ attr_accessor :intermediator
10
+ end
11
+
12
+ def self.define(options={}, &block)
13
+ self.intermediator ||= Unschema::SchemaIntermediator.new
14
+ self.intermediator.process(options, &block)
15
+ end
16
+ end
17
+ end
@@ -1,10 +1,11 @@
1
1
  module Unschema
2
2
  class SchemaIntermediator
3
- attr_reader :root
3
+ attr_reader :root, :version
4
4
 
5
- def process(*args, &block)
6
- @root = Call.new(:root, *args)
7
- root.instance_eval(&block)
5
+ def process(options, &block)
6
+ @version = options[:version] || 0
7
+ @root = Call.new(:root, options)
8
+ @root.instance_eval(&block)
8
9
  end
9
10
 
10
11
  def calls
@@ -1,3 +1,3 @@
1
1
  module Unschema
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.4"
3
3
  end
data/test/helper.rb CHANGED
@@ -3,5 +3,12 @@ require 'minitest/autorun'
3
3
  require 'unschema'
4
4
 
5
5
  class TestCase < MiniTest::Unit::TestCase
6
+ end
6
7
 
8
+ class String
9
+ def unindent
10
+ matched = %r{^\s*}.match self.split("\n").first
11
+ indent = matched.end(0)
12
+ self.gsub(%r{^\s{#{indent}}}, '')
13
+ end
7
14
  end
@@ -3,62 +3,66 @@ require 'fileutils'
3
3
  require 'pathname'
4
4
 
5
5
  class EndToEndTest < TestCase
6
-
7
- def test_schema_to_migrations
8
- schema_file = File.expand_path("../fixtures/schema.rb", __FILE__)
9
- migrations_path = Pathname.new File.expand_path("../target", __FILE__)
10
-
6
+ def setup
11
7
  Dir[migrations_path.join "*.rb"].map { |file| File.delete(file) }
8
+ end
12
9
 
13
- Unschema::Base.process!(schema_file, migrations_path.to_s, 1000)
10
+ def test_schema_to_migrations
11
+ Unschema::Base.process!(schema_file, migrations_path.to_s)
14
12
 
15
- assert_equal ["1001_create_abc.rb", "1002_create_table1.rb", "1003_create_the_table2.rb"], Dir[migrations_path.join "*.rb"].map{|path| File.basename(path)}.sort
13
+ assert_equal ["20130222131356_create_abc.rb", "20130222131357_create_table1.rb", "20130222131358_create_the_table2.rb"], Dir[migrations_path.join "*.rb"].map{|path| File.basename(path)}.sort
16
14
 
17
- migration = File.read(File.join(migrations_path, "1001_create_abc.rb"))
18
- expectation = <<-MIGRATION
19
- class CreateAbc < ActiveRecord::Migration
20
- def change
21
- create_table "abc" do |t|
22
- t.string "defgh"
15
+ assert_migration "20130222131356_create_abc.rb", <<-MIGRATION
16
+ class CreateAbc < ActiveRecord::Migration
17
+ def change
18
+ create_table "abc" do |t|
19
+ t.string "defgh"
20
+ end
23
21
  end
24
22
  end
25
- end
26
23
  MIGRATION
27
24
 
28
- assert_equal expectation.chomp.gsub(/^\s*/,""), migration.gsub(/^\s*/,"")
29
-
30
- migration = File.read(File.join(migrations_path, "1002_create_table1.rb"))
31
- expectation = <<-MIGRATION
32
- class CreateTable1 < ActiveRecord::Migration
33
- def change
34
- create_table "table1", {:force=>true} do |t|
35
- t.string "str"
36
- t.integer "int"
37
- t.datetime "created_at"
38
- t.datetime "updated_at"
25
+ assert_migration "20130222131357_create_table1.rb", <<-MIGRATION
26
+ class CreateTable1 < ActiveRecord::Migration
27
+ def change
28
+ create_table "table1", {:force=>true} do |t|
29
+ t.string "str"
30
+ t.integer "int"
31
+ t.datetime "created_at"
32
+ t.datetime "updated_at"
33
+ end
34
+ add_index "table1", ["id"], {:name=>"the_index_1", :unique=>true}
35
+ add_index "table1", ["doesnt_make_sende"], {:name=>"the_index_2", :unique=>true, :wrong_attr=>1}
39
36
  end
40
- add_index "table1", ["id"], {:name=>"the_index_1", :unique=>true}
41
- add_index "table1", ["doesnt_make_sende"], {:name=>"the_index_2", :unique=>true, :wrong_attr=>1}
42
37
  end
43
- end
44
38
  MIGRATION
45
39
 
46
- assert_equal expectation.chomp.gsub(/^\s*/,""), migration.gsub(/^\s*/,"")
47
-
48
- migration = File.read(File.join(migrations_path, "1003_create_the_table2.rb"))
49
- expectation = <<-MIGRATION
50
- class CreateTheTable2 < ActiveRecord::Migration
51
- def change
52
- create_table "the_table2", {:force=>true} do |t|
53
- t.date "date"
54
- t.integer "max_online", {:default=>0}
40
+ assert_migration "20130222131358_create_the_table2.rb", <<-MIGRATION
41
+ class CreateTheTable2 < ActiveRecord::Migration
42
+ def change
43
+ create_table "the_table2", {:force=>true} do |t|
44
+ t.date "date"
45
+ t.integer "max_online", {:default=>0}
46
+ end
47
+ add_index "the_table2", ["date"], {:name=>"index_statistics_on_date_and"}
55
48
  end
56
- add_index "the_table2", ["date"], {:name=>"index_statistics_on_date_and"}
57
49
  end
58
- end
59
50
  MIGRATION
51
+ end
52
+
53
+ private
54
+
55
+ def assert_migration(path, expect)
56
+ actual = File.read(migrations_path.join path)
60
57
 
61
- assert_equal expectation.chomp.gsub(/^\s*/,""), migration.gsub(/^\s*/,"")
58
+ assert_equal expect.unindent.chomp, actual.unindent
62
59
  end
63
60
 
61
+ def schema_file
62
+ File.expand_path("../fixtures/schema.rb", __FILE__)
63
+ end
64
+
65
+ def migrations_path
66
+ Pathname.new File.expand_path("../target", __FILE__)
67
+ end
64
68
  end
data/unschema.gemspec CHANGED
@@ -16,4 +16,6 @@ Gem::Specification.new do |gem|
16
16
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
+
20
+ gem.add_development_dependency 'rake'
19
21
  end
metadata CHANGED
@@ -1,16 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unschema
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
5
- prerelease:
4
+ version: 0.0.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jakob Holderbaum
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-26 00:00:00.000000000 Z
13
- dependencies: []
11
+ date: 2013-06-12 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: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
14
27
  description: Splits your current schema.rb into per-table migrations. Think of it
15
28
  as >rebase< for your migrations.
16
29
  email:
@@ -21,6 +34,7 @@ extensions: []
21
34
  extra_rdoc_files: []
22
35
  files:
23
36
  - .gitignore
37
+ - .travis.yml
24
38
  - Gemfile
25
39
  - LICENSE.txt
26
40
  - README.md
@@ -28,6 +42,7 @@ files:
28
42
  - bin/unschema
29
43
  - lib/unschema.rb
30
44
  - lib/unschema/base.rb
45
+ - lib/unschema/fake_schema.rb
31
46
  - lib/unschema/schema_intermediator.rb
32
47
  - lib/unschema/version.rb
33
48
  - test/helper.rb
@@ -37,27 +52,26 @@ files:
37
52
  - unschema.gemspec
38
53
  homepage: https://github.com/neopoly/unschema
39
54
  licenses: []
55
+ metadata: {}
40
56
  post_install_message:
41
57
  rdoc_options: []
42
58
  require_paths:
43
59
  - lib
44
60
  required_ruby_version: !ruby/object:Gem::Requirement
45
- none: false
46
61
  requirements:
47
- - - ! '>='
62
+ - - '>='
48
63
  - !ruby/object:Gem::Version
49
64
  version: '0'
50
65
  required_rubygems_version: !ruby/object:Gem::Requirement
51
- none: false
52
66
  requirements:
53
- - - ! '>='
67
+ - - '>='
54
68
  - !ruby/object:Gem::Version
55
69
  version: '0'
56
70
  requirements: []
57
71
  rubyforge_project:
58
- rubygems_version: 1.8.24
72
+ rubygems_version: 2.0.3
59
73
  signing_key:
60
- specification_version: 3
74
+ specification_version: 4
61
75
  summary: Splits your current schema.rb into per-table migrations
62
76
  test_files:
63
77
  - test/helper.rb