schema_plus_core 1.0.2 → 2.0.1
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.
- checksums.yaml +4 -4
- data/.travis.yml +4 -4
- data/README.md +45 -49
- data/gemfiles/{activerecord-4.2 → activerecord-5.0}/Gemfile.base +1 -1
- data/gemfiles/{activerecord-4.2 → activerecord-5.0}/Gemfile.mysql2 +1 -1
- data/gemfiles/{activerecord-4.2 → activerecord-5.0}/Gemfile.postgresql +0 -0
- data/gemfiles/{activerecord-4.2 → activerecord-5.0}/Gemfile.sqlite3 +0 -0
- data/lib/schema_plus/core/active_record/connection_adapters/mysql2_adapter.rb +7 -7
- data/lib/schema_plus/core/active_record/connection_adapters/postgresql_adapter.rb +5 -5
- data/lib/schema_plus/core/active_record/connection_adapters/sqlite3_adapter.rb +7 -8
- data/lib/schema_plus/core/active_record/schema_dumper.rb +26 -24
- data/lib/schema_plus/core/middleware.rb +3 -9
- data/lib/schema_plus/core/schema_dump.rb +7 -5
- data/lib/schema_plus/core/version.rb +1 -1
- data/lib/schema_plus/core.rb +0 -1
- data/schema_dev.yml +2 -2
- data/schema_plus_core.gemspec +3 -2
- data/spec/column_spec.rb +5 -5
- data/spec/dumper_spec.rb +4 -13
- data/spec/middleware_spec.rb +4 -8
- data/spec/spec_helper.rb +1 -1
- data/spec/support/enableable.rb +2 -0
- data/spec/support/test_reporter.rb +1 -2
- metadata +25 -12
- data/lib/schema_plus/core/active_record/connection_adapters/abstract_mysql_adapter.rb +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 86e2ba87b085b72dbc2117b25926b21cd17c900f
|
4
|
+
data.tar.gz: 3449adbeb2caf2405162f70aab282a117aa81260
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9972320f4d103ed11fb2a2f4e2951d95b47b8212bf9d30f31b61ca0edf137abc01d6590c338a2425922144483848dcf3677378c3d5bff05f4418d316d973d70
|
7
|
+
data.tar.gz: 8c2a28d46bd37562699a33e5a690c8cfd38cce492693bb08bde076ff2b06ce691f12e101d8f9f6f8bb913006524a598415259183c7d02520b7e17845b88d7f5c
|
data/.travis.yml
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
---
|
6
6
|
sudo: false
|
7
7
|
rvm:
|
8
|
-
- 2.
|
8
|
+
- 2.3.0
|
9
9
|
gemfile:
|
10
|
-
- gemfiles/activerecord-
|
11
|
-
- gemfiles/activerecord-
|
12
|
-
- gemfiles/activerecord-
|
10
|
+
- gemfiles/activerecord-5.0/Gemfile.mysql2
|
11
|
+
- gemfiles/activerecord-5.0/Gemfile.postgresql
|
12
|
+
- gemfiles/activerecord-5.0/Gemfile.sqlite3
|
13
13
|
env: POSTGRESQL_DB_USER=postgres MYSQL_DB_USER=travis
|
14
14
|
addons:
|
15
15
|
postgresql: '9.4'
|
data/README.md
CHANGED
@@ -6,11 +6,11 @@
|
|
6
6
|
|
7
7
|
SchemaPlus::Core creates an internal extension API to ActiveRecord. The idea is that:
|
8
8
|
|
9
|
-
*
|
9
|
+
* SchemaPlus::Core does the monkey-patching so clients don't have to know too much about the internal of ActiveRecord.
|
10
10
|
|
11
11
|
* SchemaPlus::Core's extension API is consistent across the various connection adapters, so clients don't have to figure out how to extend each connection adapter independently.
|
12
12
|
|
13
|
-
*
|
13
|
+
* SchemaPlus::Core's extension API intends to remain reasonably stable even as ActiveRecord changes.
|
14
14
|
|
15
15
|
By itself, SchemaPlus::Core does not change any behavior or add any external features to ActiveRecord. It just makes the API available to clients.
|
16
16
|
|
@@ -23,10 +23,19 @@ SchemaPlus::Core is tested on:
|
|
23
23
|
|
24
24
|
<!-- SCHEMA_DEV: MATRIX - begin -->
|
25
25
|
<!-- These lines are auto-generated by schema_dev based on schema_dev.yml -->
|
26
|
-
* ruby **2.
|
26
|
+
* ruby **2.3.0** with activerecord **5.0**, using **mysql2**, **sqlite3** or **postgresql**
|
27
27
|
|
28
28
|
<!-- SCHEMA_DEV: MATRIX - end -->
|
29
29
|
|
30
|
+
<aside class="warning">
|
31
|
+
As of version 2.0.0, `schema_plus_core` supports only ActiveRecord >= 5.0.
|
32
|
+
ActiveRecord 4.2.x is supported in version 1.x, maintained in the 1.x
|
33
|
+
branch.
|
34
|
+
|
35
|
+
### Breaking changes in version 2.0 ###
|
36
|
+
|
37
|
+
* `SchemaPlus::Core::Schema::Tables` middleware was replaced by `SchemaPlus::Core::DataSources`. Parameters have also changed.
|
38
|
+
* `SchemaPlus::Core::Dumper::Indexes` middleware was removed; instead `SchemaPlus::Core::Dumper::Table` sets both columns and indexes on env.table.
|
30
39
|
|
31
40
|
## Installation
|
32
41
|
|
@@ -112,27 +121,23 @@ Stacks for general operations queries pertaining to the entire database schema:
|
|
112
121
|
|
113
122
|
Wrapper around the `connection.indexes(table_name)` method. Env contains:
|
114
123
|
|
115
|
-
Env Field
|
116
|
-
|
117
|
-
`:index_definitions` | The result of the lookup
|
118
|
-
`:connection`
|
119
|
-
`:table_name`
|
120
|
-
`:query_name`
|
124
|
+
Env Field | Description | Initial value
|
125
|
+
-------------------- | -------------------------------------------- | -------------
|
126
|
+
`:index_definitions` | The result of the lookup | `[]`
|
127
|
+
`:connection` | The current ActiveRecord connection | *context*
|
128
|
+
`:table_name` | The name of the table to query | *arg*
|
129
|
+
`:query_name` | Label sometimes used by ActiveRecord logging | *arg*
|
121
130
|
|
122
131
|
The base implementation appends its results to `env.index_definitions`
|
123
132
|
|
124
|
-
* `Schema::
|
133
|
+
* `Schema::DataSources`
|
125
134
|
|
126
|
-
Wrapper around the `connection.
|
135
|
+
Wrapper around the `connection.data_sources()` method. Env contains:
|
127
136
|
|
128
|
-
Env Field
|
129
|
-
|
130
|
-
`:
|
131
|
-
`:connection`
|
132
|
-
`:table_name` | (SQlite3 only) | *arg*
|
133
|
-
`:database` | (Mysql only) | *arg*
|
134
|
-
`:like` | (Mysql only) | *arg*
|
135
|
-
`:query_name` | Label sometimes used by ActiveRecord logging | *arg*
|
137
|
+
Env Field | Description | Initialized
|
138
|
+
--------------- | -------------------------------------------- | -----------
|
139
|
+
`:data_sources` | The result of the lookup | `[]`
|
140
|
+
`:connection` | The current ActiveRecord connection | *context*
|
136
141
|
|
137
142
|
The base implementation appends its results to `env.tables`
|
138
143
|
|
@@ -393,12 +398,12 @@ SchemaPlus::Core provides a state object and of callbacks to various phases of t
|
|
393
398
|
|
394
399
|
Callback stack wraps the creation of initial statements for the dump.
|
395
400
|
|
396
|
-
|
397
|
-
---
|
398
|
-
`:initial`
|
399
|
-
`:dump`
|
400
|
-
`:dumper`
|
401
|
-
`:connection`
|
401
|
+
Env Field | Description | Initialized
|
402
|
+
--- | --- | ---
|
403
|
+
`:initial` | The initial statements | []
|
404
|
+
`:dump` | The SchemaDump object | *context*
|
405
|
+
`:dumper` | The current ActiveRecord::SchemaDumper instance | *context*
|
406
|
+
`:connection` | The current ActiveRecord connection | *context*
|
402
407
|
|
403
408
|
The base method appends initial statements to `env.initial`.
|
404
409
|
|
@@ -406,11 +411,11 @@ SchemaPlus::Core provides a state object and of callbacks to various phases of t
|
|
406
411
|
|
407
412
|
Callback stack wraps the dumping of all tables.
|
408
413
|
|
409
|
-
|
410
|
-
---
|
411
|
-
`:dump`
|
412
|
-
`:dumper`
|
413
|
-
`:connection`
|
414
|
+
Env Field | Description | Initialized
|
415
|
+
--- | --- | ---
|
416
|
+
`:dump` | The SchemaDump object | *context*
|
417
|
+
`:dumper` | The current ActiveRecord::SchemaDumper instance | *context*
|
418
|
+
`:connection` | The current ActiveRecord connection | *context*
|
414
419
|
|
415
420
|
The base method iterates through all tables, dumping each.
|
416
421
|
|
@@ -419,33 +424,24 @@ SchemaPlus::Core provides a state object and of callbacks to various phases of t
|
|
419
424
|
|
420
425
|
Callback stack wraps the dumping of each table
|
421
426
|
|
422
|
-
|
423
|
-
---
|
424
|
-
`:table`
|
425
|
-
`:dump`
|
426
|
-
`:dumper`
|
427
|
-
`:connection`
|
427
|
+
Env Field | Description | Initialized
|
428
|
+
--- | --- | ---
|
429
|
+
`:table` | A SchemaDump::Table object | `table.name` *only*
|
430
|
+
`:dump` | The SchemaDump object | *context*
|
431
|
+
`:dumper` | The current ActiveRecord::SchemaDumper instance | *context*
|
432
|
+
`:connection` | The current ActiveRecord connection | *context*
|
428
433
|
|
429
434
|
The base method iterates through all columns and indexes of the table, and *overwrites* the contents of `table`,
|
430
435
|
|
431
436
|
Notes:
|
432
437
|
|
433
438
|
1. When the stack is called, `env.dump.tables[env.table.name]` contains the `env.table` object.
|
434
|
-
|
435
|
-
* `Dumper::Indexes`
|
436
|
-
|
437
|
-
Callback stack wraps the dumping of the indexes of a table
|
438
|
-
|
439
|
-
Env Field | Description | Initialized
|
440
|
-
--- | --- | ---
|
441
|
-
`:table` | A SchemaDump::Table object| *context*
|
442
|
-
`:dump` | The SchemaDump object | *context*
|
443
|
-
`:dumper` | The current ActiveRecord::SchemaDumper instance| *context*
|
444
|
-
`:connection` | The current ActiveRecord connection | *context*
|
445
|
-
|
446
|
-
The base method appends the collection of SchemaDump::Table::Index objects to `env.table.indexes`
|
439
|
+
2. The base method sets *both* `env.table.columns` and `env.tables.indexes`.
|
447
440
|
|
448
441
|
## History
|
442
|
+
|
443
|
+
* 2.0.1 Tighten up AR dependency. Thanks to [@myabc](https://github.com/myabc).
|
444
|
+
* 2.0.0 Added AR5 support, removed AR4.2 support. Thanks to [@boazy](https://github.com/boazy).
|
449
445
|
* 1.0.2 Missing require
|
450
446
|
* 1.0.1 Explicit gem dependencies
|
451
447
|
* 1.0.0 Clean up `SchemaDump::Table::Column` and `SchemaDump::Table::Index` API: `#options` is now a hash and `#comments` is now an array; no longer have `add_option` and `add_comment` methods.
|
File without changes
|
File without changes
|
@@ -34,10 +34,10 @@ module SchemaPlus
|
|
34
34
|
}.index_definitions
|
35
35
|
end
|
36
36
|
|
37
|
-
def
|
38
|
-
SchemaMonkey::Middleware::Schema::
|
39
|
-
env.
|
40
|
-
}.
|
37
|
+
def data_sources
|
38
|
+
SchemaMonkey::Middleware::Schema::DataSources.start(connection: self, sources: []) { |env|
|
39
|
+
env.sources += super
|
40
|
+
}.sources
|
41
41
|
end
|
42
42
|
|
43
43
|
def select_rows(sql, name=nil, binds=[])
|
@@ -46,9 +46,9 @@ module SchemaPlus
|
|
46
46
|
}.result
|
47
47
|
end
|
48
48
|
|
49
|
-
def exec_query(sql, name='SQL', binds=[])
|
50
|
-
SchemaMonkey::Middleware::Query::Exec.start(connection: self, sql: sql, query_name: name, binds: binds) { |env|
|
51
|
-
env.result = super env.sql, env.query_name, env.binds
|
49
|
+
def exec_query(sql, name='SQL', binds=[], prepare: false)
|
50
|
+
SchemaMonkey::Middleware::Query::Exec.start(connection: self, sql: sql, query_name: name, binds: binds, prepare: prepare) { |env|
|
51
|
+
env.result = super env.sql, env.query_name, env.binds, prepare: env.prepare
|
52
52
|
}.result
|
53
53
|
end
|
54
54
|
|
@@ -16,7 +16,7 @@ module SchemaPlus
|
|
16
16
|
# expressions don't work well in AR anyway. (hence
|
17
17
|
# schema_plus_default_expr )
|
18
18
|
#
|
19
|
-
def prepare_column_options(column,
|
19
|
+
def prepare_column_options(column, *) # :nodoc:
|
20
20
|
spec = super
|
21
21
|
spec[:default] = "%q{#{column.default_function}}" if column.default_function
|
22
22
|
spec
|
@@ -64,10 +64,10 @@ module SchemaPlus
|
|
64
64
|
}.index_definitions
|
65
65
|
end
|
66
66
|
|
67
|
-
def
|
68
|
-
SchemaMonkey::Middleware::Schema::
|
69
|
-
env.
|
70
|
-
}.
|
67
|
+
def data_sources
|
68
|
+
SchemaMonkey::Middleware::Schema::DataSources.start(connection: self, sources: []) { |env|
|
69
|
+
env.sources += super
|
70
|
+
}.sources
|
71
71
|
end
|
72
72
|
end
|
73
73
|
end
|
@@ -22,9 +22,9 @@ module SchemaPlus
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
def exec_query(sql, name=nil, binds=[])
|
26
|
-
SchemaMonkey::Middleware::Query::Exec.start(connection: self, sql: sql, query_name: name, binds: binds) { |env|
|
27
|
-
env.result = super env.sql, env.query_name, env.binds
|
25
|
+
def exec_query(sql, name=nil, binds=[], prepare: false)
|
26
|
+
SchemaMonkey::Middleware::Query::Exec.start(connection: self, sql: sql, query_name: name, binds: binds, prepare: prepare) { |env|
|
27
|
+
env.result = super env.sql, env.query_name, env.binds, prepare: env.prepare
|
28
28
|
}.result
|
29
29
|
end
|
30
30
|
|
@@ -34,12 +34,11 @@ module SchemaPlus
|
|
34
34
|
}.index_definitions
|
35
35
|
end
|
36
36
|
|
37
|
-
def
|
38
|
-
SchemaMonkey::Middleware::Schema::
|
39
|
-
env.
|
40
|
-
}.
|
37
|
+
def data_sources
|
38
|
+
SchemaMonkey::Middleware::Schema::DataSources.start(connection: self, sources: []) { |env|
|
39
|
+
env.sources += super
|
40
|
+
}.sources
|
41
41
|
end
|
42
|
-
|
43
42
|
end
|
44
43
|
end
|
45
44
|
end
|
@@ -66,8 +66,9 @@ module SchemaPlus
|
|
66
66
|
env.table.pname = m[:name]
|
67
67
|
env.table.options = m[:options].strip
|
68
68
|
env.table.trailer = m[:trailer].split("\n").map(&:strip).reject{|s| s.blank?}
|
69
|
-
|
70
|
-
|
69
|
+
table_objects = m[:columns].strip.split("\n").map { |col|
|
70
|
+
cs = col.strip
|
71
|
+
m = cs.match %r{
|
71
72
|
^
|
72
73
|
t\.(?<type>\S+) \s*
|
73
74
|
[:'"](?<name>[^"\s]+)[,"]? \s*
|
@@ -75,31 +76,32 @@ module SchemaPlus
|
|
75
76
|
(?<options>.*)
|
76
77
|
$
|
77
78
|
}x
|
78
|
-
|
79
|
-
|
79
|
+
if !m.nil?
|
80
|
+
SchemaDump::Table::Column.new name: m[:name], type: m[:type], options: eval("{" + m[:options] + "}"), comments: []
|
81
|
+
else
|
82
|
+
m = cs.match %r{
|
83
|
+
^
|
84
|
+
t\.index \s*
|
85
|
+
\[(?<index_cols>.*?)\] \s*
|
86
|
+
, \s*
|
87
|
+
name\: \s* [:'"](?<name>[^"\s]+)[,"]? \s*
|
88
|
+
,? \s*
|
89
|
+
(?<options>.*)
|
90
|
+
$
|
91
|
+
}x
|
92
|
+
if m.nil?
|
93
|
+
nil
|
94
|
+
else
|
95
|
+
index_cols = m[:index_cols].tr(%q{'":}, '').strip.split(/\s*,\s*/)
|
96
|
+
SchemaDump::Table::Index.new name: m[:name], columns: index_cols, options: eval("{#{m[:options]}}")
|
97
|
+
end
|
98
|
+
end
|
99
|
+
}.reject { |o| o.nil? }
|
100
|
+
env.table.columns = table_objects.select { |o| o.is_a? SchemaDump::Table::Column }
|
101
|
+
env.table.indexes = table_objects.select { |o| o.is_a? SchemaDump::Table::Index }
|
80
102
|
end
|
81
103
|
end
|
82
104
|
end
|
83
|
-
|
84
|
-
def indexes(table, _)
|
85
|
-
SchemaMonkey::Middleware::Dumper::Indexes.start(dumper: self, connection: @connection, dump: @dump, table: @dump.tables[table]) do |env|
|
86
|
-
stream = StringIO.new
|
87
|
-
super env.table.name, stream
|
88
|
-
env.table.indexes += stream.string.split("\n").map { |string|
|
89
|
-
m = string.strip.match %r{
|
90
|
-
^
|
91
|
-
add_index \s*
|
92
|
-
[:'"](?<table>[^'"\s]+)['"]? \s* , \s*
|
93
|
-
(?<columns>.*) \s*
|
94
|
-
name: \s* [:'"](?<name>[^'"\s]+)['"]? \s*
|
95
|
-
(, \s* (?<options>.*))?
|
96
|
-
$
|
97
|
-
}x
|
98
|
-
columns = m[:columns].tr(%q{[]'":}, '').strip.split(/\s*,\s*/)
|
99
|
-
SchemaDump::Table::Index.new name: m[:name], columns: columns, options: eval("{#{m[:options]}}")
|
100
|
-
}
|
101
|
-
end
|
102
|
-
end
|
103
105
|
end
|
104
106
|
end
|
105
107
|
end
|
@@ -3,7 +3,7 @@ module SchemaPlus
|
|
3
3
|
module Middleware
|
4
4
|
module Query
|
5
5
|
module Exec
|
6
|
-
ENV = [:connection, :sql, :query_name, :binds, :result]
|
6
|
+
ENV = [:connection, :sql, :query_name, :binds, :prepare, :result]
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
@@ -16,12 +16,9 @@ module SchemaPlus
|
|
16
16
|
ENV = [:connection, :query_name, :table_name, :index_definitions]
|
17
17
|
end
|
18
18
|
|
19
|
-
module
|
20
|
-
|
21
|
-
# :table_name is only for sqlite3
|
22
|
-
ENV = [:connection, :query_name, :table_name, :database, :like, :tables]
|
19
|
+
module DataSources
|
20
|
+
ENV = [:connection, :sources]
|
23
21
|
end
|
24
|
-
|
25
22
|
end
|
26
23
|
|
27
24
|
module Migration
|
@@ -72,9 +69,6 @@ module SchemaPlus
|
|
72
69
|
module Table
|
73
70
|
ENV = [:dumper, :connection, :dump, :table]
|
74
71
|
end
|
75
|
-
module Indexes
|
76
|
-
ENV = [:dumper, :connection, :dump, :table]
|
77
|
-
end
|
78
72
|
end
|
79
73
|
|
80
74
|
module Model
|
@@ -63,20 +63,22 @@ module SchemaPlus
|
|
63
63
|
stream.puts " do |t|"
|
64
64
|
typelen = columns.map{|col| col.type.length}.max
|
65
65
|
namelen = columns.map{|col| col.name.length}.max
|
66
|
+
indexes
|
66
67
|
columns.each do |column|
|
67
68
|
stream.write " "
|
68
69
|
column.assemble(stream, typelen, namelen)
|
69
70
|
stream.puts ""
|
70
71
|
end
|
71
|
-
|
72
|
-
stream.puts " #{statement}"
|
73
|
-
end
|
74
|
-
stream.puts " end"
|
72
|
+
stream.puts "" unless indexes.empty?
|
75
73
|
indexes.each do |index|
|
76
|
-
stream.write "
|
74
|
+
stream.write " t.index "
|
77
75
|
index.assemble(stream)
|
78
76
|
stream.puts ""
|
79
77
|
end
|
78
|
+
statements.each do |statement|
|
79
|
+
stream.puts " #{statement}"
|
80
|
+
end
|
81
|
+
stream.puts " end"
|
80
82
|
trailer.each do |statement|
|
81
83
|
stream.puts " #{statement}"
|
82
84
|
end
|
data/lib/schema_plus/core.rb
CHANGED
@@ -9,7 +9,6 @@ module SchemaPlus
|
|
9
9
|
DIR = Pathname.new(__FILE__).dirname + "core/active_record/connection_adapters"
|
10
10
|
autoload :PostgresqlAdapter, DIR + "postgresql_adapter"
|
11
11
|
autoload :Mysql2Adapter, DIR + "mysql2_adapter"
|
12
|
-
autoload :AbstractMysqlAdapter, DIR + "abstract_mysql_adapter"
|
13
12
|
autoload :Sqlite3Adapter, DIR + "sqlite3_adapter"
|
14
13
|
end
|
15
14
|
end
|
data/schema_dev.yml
CHANGED
data/schema_plus_core.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
19
|
gem.require_paths = ["lib"]
|
20
20
|
|
21
|
-
gem.add_dependency "activerecord", "~>
|
21
|
+
gem.add_dependency "activerecord", "~> 5.0"
|
22
22
|
gem.add_dependency "schema_monkey", "~> 2.1"
|
23
23
|
gem.add_dependency "its-it", "~> 1.2"
|
24
24
|
|
@@ -26,7 +26,8 @@ Gem::Specification.new do |gem|
|
|
26
26
|
gem.add_development_dependency "rake", "~> 10.0"
|
27
27
|
gem.add_development_dependency "rspec", "~> 3.0.0"
|
28
28
|
gem.add_development_dependency "rspec-given"
|
29
|
-
gem.add_development_dependency "schema_dev", "~> 3.
|
29
|
+
gem.add_development_dependency "schema_dev", "~> 3.7"
|
30
30
|
gem.add_development_dependency "simplecov"
|
31
31
|
gem.add_development_dependency "simplecov-gem-profile"
|
32
|
+
gem.add_development_dependency "its-it"
|
32
33
|
end
|
data/spec/column_spec.rb
CHANGED
@@ -39,7 +39,7 @@ describe SchemaMonkey::Middleware::Migration::Column do
|
|
39
39
|
|
40
40
|
context "when add ordinary column" do
|
41
41
|
When { migration.create_table("things") { |t| t.integer "test_column" } }
|
42
|
-
Then { expect(spy).to
|
42
|
+
Then { expect(spy).to match_array [
|
43
43
|
{ column_name: "id", type: :primary_key, implements_reference: nil },
|
44
44
|
{ column_name: "test_column", type: :integer, implements_reference: nil }
|
45
45
|
] }
|
@@ -49,7 +49,7 @@ describe SchemaMonkey::Middleware::Migration::Column do
|
|
49
49
|
|
50
50
|
context "when add reference using t.#{method}" do
|
51
51
|
When { migration.create_table("things") { |t| t.send method, "test_reference" } }
|
52
|
-
Then { expect(spy).to
|
52
|
+
Then { expect(spy).to match_array [
|
53
53
|
{ column_name: "id", type: :primary_key, implements_reference: nil },
|
54
54
|
{ column_name: "test_reference_id", type: :reference, implements_reference: nil },
|
55
55
|
{ column_name: "test_reference_id", type: :integer, implements_reference: true }
|
@@ -58,7 +58,7 @@ describe SchemaMonkey::Middleware::Migration::Column do
|
|
58
58
|
|
59
59
|
context "when add polymorphic reference using t.#{method}" do
|
60
60
|
When { migration.create_table("things") { |t| t.send method, "test_reference", polymorphic: true } }
|
61
|
-
Then { expect(spy).to
|
61
|
+
Then { expect(spy).to match_array [
|
62
62
|
{ column_name: "id", type: :primary_key, implements_reference: nil },
|
63
63
|
{ column_name: "test_reference_id", type: :reference, implements_reference: nil },
|
64
64
|
{ column_name: "test_reference_id", type: :integer, implements_reference: true },
|
@@ -76,7 +76,7 @@ describe SchemaMonkey::Middleware::Migration::Column do
|
|
76
76
|
context "when add reference using migration.add_reference" do
|
77
77
|
|
78
78
|
When { migration.add_reference("things", "test_reference") }
|
79
|
-
Then { expect(spy).to
|
79
|
+
Then { expect(spy).to match_array [
|
80
80
|
{ column_name: "test_reference_id", type: :reference, implements_reference: nil },
|
81
81
|
{ column_name: "test_reference_id", type: :integer, implements_reference: true }
|
82
82
|
] }
|
@@ -87,7 +87,7 @@ describe SchemaMonkey::Middleware::Migration::Column do
|
|
87
87
|
When {
|
88
88
|
migration.add_reference("things", "test_reference", polymorphic: true)
|
89
89
|
}
|
90
|
-
Then { expect(spy).to
|
90
|
+
Then { expect(spy).to match_array [
|
91
91
|
{ column_name: "test_reference_id", type: :reference, implements_reference: nil },
|
92
92
|
{ column_name: "test_reference_id", type: :integer, implements_reference: true },
|
93
93
|
{ column_name: "test_reference_type", type: :string, implements_reference: true }
|
data/spec/dumper_spec.rb
CHANGED
@@ -27,18 +27,13 @@ module TestDumper
|
|
27
27
|
column.options[:option] = middleware.to_s
|
28
28
|
column.comments << "comment: #{middleware}"
|
29
29
|
end
|
30
|
+
if index = env.table.indexes.first
|
31
|
+
index.options[:option] = middleware.to_s
|
32
|
+
end
|
30
33
|
env.table.statements << "statement: #{middleware}"
|
31
34
|
env.table.trailer << "trailer: #{middleware}"
|
32
35
|
end
|
33
36
|
end
|
34
|
-
module Indexes
|
35
|
-
include Enableable
|
36
|
-
def after(env)
|
37
|
-
return unless env.table.indexes.any?
|
38
|
-
return unless middleware = enabled_middleware(TestDumper, env)
|
39
|
-
env.table.indexes.first.options[:option] = middleware.to_s
|
40
|
-
end
|
41
|
-
end
|
42
37
|
end
|
43
38
|
end
|
44
39
|
end
|
@@ -93,13 +88,9 @@ describe SchemaMonkey::Middleware::Dumper do
|
|
93
88
|
Then { expect(dump).to match(/t[.]integer.*:option=>"#{middleware}" \# comment: #{middleware}/) }
|
94
89
|
Then { expect(dump).to match(/statement: #{middleware}\s+end\s+(add_index.*)?\s+trailer: #{middleware}/) }
|
95
90
|
Then { expect(dump).to match(/could not dump table.*custom_table.*unknown type.*custom_type/mi) } if TestCustomType
|
91
|
+
Then { expect(dump).to match(/t[.]index.*:option=>"#{middleware}"/) }
|
96
92
|
end
|
97
93
|
|
98
|
-
context TestDumper::Middleware::Dumper::Indexes do
|
99
|
-
Then { expect(dump).to match(/add_index.*:option=>"#{middleware}"/) }
|
100
|
-
end
|
101
|
-
|
102
|
-
|
103
94
|
private
|
104
95
|
|
105
96
|
def middleware
|
data/spec/middleware_spec.rb
CHANGED
@@ -25,11 +25,12 @@ describe SchemaMonkey::Middleware do
|
|
25
25
|
context SchemaMonkey::Middleware::Schema do
|
26
26
|
|
27
27
|
context TestReporter::Middleware::Schema::Define do
|
28
|
+
ActiveRecord::Schema.define {}
|
28
29
|
Then { expect_middleware { ActiveRecord::Schema.define { } } }
|
29
30
|
end
|
30
31
|
|
31
|
-
context TestReporter::Middleware::Schema::
|
32
|
-
Then { expect_middleware { connection.
|
32
|
+
context TestReporter::Middleware::Schema::DataSources do
|
33
|
+
Then { expect_middleware { connection.data_sources() } }
|
33
34
|
end
|
34
35
|
|
35
36
|
context TestReporter::Middleware::Schema::Indexes do
|
@@ -48,7 +49,7 @@ describe SchemaMonkey::Middleware do
|
|
48
49
|
Then { expect_middleware(enable: {type: :reference}, env: {column_name: "ref_id"}) { migration.add_reference("things", "ref") } }
|
49
50
|
|
50
51
|
Given(:change) {
|
51
|
-
Class.new ::ActiveRecord::Migration do
|
52
|
+
Class.new ::ActiveRecord::Migration[5.0] do
|
52
53
|
def change
|
53
54
|
change_table("things") do |t|
|
54
55
|
t.integer "column2"
|
@@ -136,16 +137,11 @@ describe SchemaMonkey::Middleware do
|
|
136
137
|
Then { expect_middleware(env: {table: { name: "things"} }) { dump } }
|
137
138
|
end
|
138
139
|
|
139
|
-
context TestReporter::Middleware::Dumper::Indexes do
|
140
|
-
Then { expect_middleware(env: {table: { name: "things"} }) { dump } }
|
141
|
-
end
|
142
|
-
|
143
140
|
private
|
144
141
|
|
145
142
|
def dump
|
146
143
|
::ActiveRecord::SchemaDumper.dump(connection, StringIO.new)
|
147
144
|
end
|
148
|
-
|
149
145
|
end
|
150
146
|
|
151
147
|
def table_statement(method, *args)
|
data/spec/spec_helper.rb
CHANGED
data/spec/support/enableable.rb
CHANGED
@@ -27,7 +27,7 @@ module TestReporter
|
|
27
27
|
module Schema
|
28
28
|
module Define ; include Notify ; end
|
29
29
|
module Indexes ; include Notify ; end
|
30
|
-
module
|
30
|
+
module DataSources ; include Notify ; end
|
31
31
|
end
|
32
32
|
|
33
33
|
module Migration
|
@@ -56,7 +56,6 @@ module TestReporter
|
|
56
56
|
module Initial ; include Notify ; end
|
57
57
|
module Tables ; include Notify ; end
|
58
58
|
module Table ; include Notify ; end
|
59
|
-
module Indexes ; include Notify ; end
|
60
59
|
end
|
61
60
|
end
|
62
61
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: schema_plus_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ronen barzel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '5.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '5.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: schema_monkey
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,14 +114,14 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '3.
|
117
|
+
version: '3.7'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '3.
|
124
|
+
version: '3.7'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: simplecov
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -150,6 +150,20 @@ dependencies:
|
|
150
150
|
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: its-it
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
153
167
|
description: Provides an internal extension API to ActiveRecord, in the form of middleware-style
|
154
168
|
callback stacks
|
155
169
|
email:
|
@@ -165,14 +179,13 @@ files:
|
|
165
179
|
- README.md
|
166
180
|
- Rakefile
|
167
181
|
- gemfiles/Gemfile.base
|
168
|
-
- gemfiles/activerecord-
|
169
|
-
- gemfiles/activerecord-
|
170
|
-
- gemfiles/activerecord-
|
171
|
-
- gemfiles/activerecord-
|
182
|
+
- gemfiles/activerecord-5.0/Gemfile.base
|
183
|
+
- gemfiles/activerecord-5.0/Gemfile.mysql2
|
184
|
+
- gemfiles/activerecord-5.0/Gemfile.postgresql
|
185
|
+
- gemfiles/activerecord-5.0/Gemfile.sqlite3
|
172
186
|
- lib/schema_plus/core.rb
|
173
187
|
- lib/schema_plus/core/active_record/base.rb
|
174
188
|
- lib/schema_plus/core/active_record/connection_adapters/abstract_adapter.rb
|
175
|
-
- lib/schema_plus/core/active_record/connection_adapters/abstract_mysql_adapter.rb
|
176
189
|
- lib/schema_plus/core/active_record/connection_adapters/mysql2_adapter.rb
|
177
190
|
- lib/schema_plus/core/active_record/connection_adapters/postgresql_adapter.rb
|
178
191
|
- lib/schema_plus/core/active_record/connection_adapters/sqlite3_adapter.rb
|
@@ -213,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
213
226
|
version: '0'
|
214
227
|
requirements: []
|
215
228
|
rubyforge_project:
|
216
|
-
rubygems_version: 2.
|
229
|
+
rubygems_version: 2.5.1
|
217
230
|
signing_key:
|
218
231
|
specification_version: 4
|
219
232
|
summary: Provides an internal extension API to ActiveRecord
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module SchemaPlus
|
2
|
-
module Core
|
3
|
-
module ActiveRecord
|
4
|
-
module ConnectionAdapters
|
5
|
-
module AbstractMysqlAdapter
|
6
|
-
module SchemaCreation
|
7
|
-
def visit_TableDefinition(o)
|
8
|
-
SchemaMonkey::Middleware::Sql::Table.start(caller: self, connection: self.instance_variable_get('@conn'), table_definition: o, sql: SqlStruct::Table.new) { |env|
|
9
|
-
env.sql.parse! super env.table_definition
|
10
|
-
}.sql.assemble
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|