active_record_schema 0.2.5 → 0.3.2
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.
data/README.md
CHANGED
@@ -47,6 +47,7 @@ and the following migration will be generated
|
|
47
47
|
``` rb
|
48
48
|
class InitPostsSchema < ActiveRecord::Migration
|
49
49
|
def change
|
50
|
+
create_table :posts
|
50
51
|
add_column :posts, :title, :string
|
51
52
|
add_column :posts, :body, :text
|
52
53
|
|
@@ -56,6 +57,8 @@ class InitPostsSchema < ActiveRecord::Migration
|
|
56
57
|
end
|
57
58
|
```
|
58
59
|
|
60
|
+
**NOTE:** `create_table :posts` is added only if `posts` table does not exist yet
|
61
|
+
|
59
62
|
Generating a migration for new columns is the same, lets add a new field to `Post` (eg. `pubdate`):
|
60
63
|
|
61
64
|
``` rb
|
@@ -82,6 +85,8 @@ class AddPubdateToPosts < ActiveRecord::Migration
|
|
82
85
|
end
|
83
86
|
```
|
84
87
|
|
88
|
+
**NOTE:** No migration will be generated in case all changes are up-to-date
|
89
|
+
|
85
90
|
## Has and Belongs To Many (HBTM) associations
|
86
91
|
|
87
92
|
Lets try to add a HBTM association to our `Post` model
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2
|
1
|
+
0.3.2
|
@@ -7,6 +7,10 @@ module ActiveRecordSchema
|
|
7
7
|
self.respond_to?(diff_method) ? self.send(diff_method) : []
|
8
8
|
end
|
9
9
|
|
10
|
+
def nothing_to_do?
|
11
|
+
table_exists? && diff(:fields, :add).empty? && diff(:indexes, :add).empty? && diff(:joins, :add).empty?
|
12
|
+
end
|
13
|
+
|
10
14
|
def table_exists?
|
11
15
|
_table_exists?
|
12
16
|
end
|
@@ -16,14 +20,13 @@ module ActiveRecordSchema
|
|
16
20
|
end
|
17
21
|
|
18
22
|
def _diff_indexes_add
|
19
|
-
model.schema.indexes.values.delete_if {|index|
|
23
|
+
model.schema.indexes.values.delete_if {|index| _index_exists?(index.name) }
|
20
24
|
end
|
21
25
|
|
22
26
|
def _diff_joins_add
|
23
27
|
model.schema.joins.values.delete_if {|join| _table_names.include?(join.table.to_s) }
|
24
28
|
end
|
25
29
|
|
26
|
-
|
27
30
|
def _connection
|
28
31
|
ActiveRecord::Base.connection
|
29
32
|
end
|
@@ -36,10 +39,6 @@ module ActiveRecordSchema
|
|
36
39
|
_table_exists? ? _connection.columns(_table).map(&:name) : []
|
37
40
|
end
|
38
41
|
|
39
|
-
def _index_names
|
40
|
-
_table_exists? ? _connection.indexes(_table).map(&:name) : []
|
41
|
-
end
|
42
|
-
|
43
42
|
def _table_names
|
44
43
|
_connection.tables
|
45
44
|
end
|
@@ -47,6 +46,10 @@ module ActiveRecordSchema
|
|
47
46
|
def _table_exists?
|
48
47
|
_connection.table_exists?(_table)
|
49
48
|
end
|
49
|
+
|
50
|
+
def _index_exists?(columns)
|
51
|
+
_connection.index_exists?(_table, columns)
|
52
|
+
end
|
50
53
|
|
51
54
|
end
|
52
55
|
end
|
@@ -15,8 +15,11 @@ module ActiveRecordSchema
|
|
15
15
|
ActiveRecordSchema.autoload_paths.each do |p|
|
16
16
|
load(p)
|
17
17
|
end
|
18
|
-
|
19
|
-
|
18
|
+
if model.schema.nothing_to_do?
|
19
|
+
say "Nothing to do for '#{options[:from]}'"
|
20
|
+
else
|
21
|
+
migration_template "migration_from_model.rb.erb", "db/migrate/#{file_name}.rb"
|
22
|
+
end
|
20
23
|
else
|
21
24
|
migration_template "migration.rb", "db/migrate/#{file_name}.rb"
|
22
25
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_record_schema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2
|
4
|
+
version: 0.3.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -89,7 +89,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
89
89
|
version: '0'
|
90
90
|
segments:
|
91
91
|
- 0
|
92
|
-
hash: -
|
92
|
+
hash: -1716665284013531094
|
93
93
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|