schema_plus_core 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +26 -11
- data/lib/schema_plus/core.rb +1 -0
- data/lib/schema_plus/core/active_record/connection_adapters/abstract_adapter.rb +12 -6
- data/lib/schema_plus/core/active_record/schema.rb +13 -0
- data/lib/schema_plus/core/middleware.rb +15 -6
- data/lib/schema_plus/core/version.rb +1 -1
- data/schema_plus_core.gemspec +2 -2
- data/spec/middleware_spec.rb +8 -0
- data/spec/support/test_reporter.rb +4 -2
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c429be6c02483276cfb59a812bb4cc5f25b2177
|
4
|
+
data.tar.gz: 72cc5ab39f8876bf2d334c21f6ea6daa0198ba1f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f840686e345770edaa13e50ae1aa6eddf6a921020567bb8b0ef5edce4f3006a33cb4975d58ca9350e9772889e31900a18f8981ca3282558a868548d1214b944a
|
7
|
+
data.tar.gz: 6886022c5232b16f8e6700ff5eee18ac9c09041ef2e28a68a66eed27468811be321d48e0900a23fa2167bad15d3f620cf2d1aa7bbdfeae54a74badef38cea47c
|
data/README.md
CHANGED
@@ -40,14 +40,6 @@ gem "schema_plus_core" # in a Gemfile
|
|
40
40
|
gem.add_dependency "schema_plus_core" # in a .gemspec
|
41
41
|
```
|
42
42
|
|
43
|
-
To use with a rails app, also include
|
44
|
-
|
45
|
-
```ruby
|
46
|
-
gem "schema_monkey_rails"
|
47
|
-
```
|
48
|
-
|
49
|
-
which creates a Railtie to that will insert SchemaPlus::Core appropriately into the rails stack. To use with Padrino, see [schema_monkey_padrino](https://github.com/SchemaPlus/schema_monkey_padrino).
|
50
|
-
|
51
43
|
<!-- SCHEMA_DEV: TEMPLATE INSTALLATION - end -->
|
52
44
|
|
53
45
|
|
@@ -104,7 +96,18 @@ For organizational clarity, the SchemaPlus::Core stacks are grouped into modules
|
|
104
96
|
|
105
97
|
### Schema
|
106
98
|
|
107
|
-
Stacks for general queries pertaining to the entire database schema:
|
99
|
+
Stacks for general operations queries pertaining to the entire database schema:
|
100
|
+
|
101
|
+
* `Schema::Define`
|
102
|
+
|
103
|
+
Wrapper around the `ActiveRecord::Schema.define` method loads a dumped schema file (`schema.rb`).
|
104
|
+
|
105
|
+
Env Field | Description | Initial value
|
106
|
+
--- | --- | ---
|
107
|
+
`:info` | Schema information hash | *args*
|
108
|
+
`:block` | The proc containing the schema definition statements | *args*
|
109
|
+
|
110
|
+
The base implementation calls the block to define the schema.
|
108
111
|
|
109
112
|
* `Schema::Indexes`
|
110
113
|
|
@@ -191,6 +194,19 @@ Stacks for operations that change the schema. In some cases the operation immed
|
|
191
194
|
|
192
195
|
3. ActiveRecord's base implementation may make nested calls to column creation. For example: References result in a nested call to create an integer column; Polymorphic references nest calls to create two columns; Sqlite3 implements `:change` by a nested call to a new table definition. SchemaPlus::Core doesn't attempt to normalize or suppress these; each such nested call will result in its own `Migration::Column` stack execution.
|
193
196
|
|
197
|
+
* `Migration::CreateTable`
|
198
|
+
|
199
|
+
Creates a new table
|
200
|
+
|
201
|
+
Env Field | Description | Initialized
|
202
|
+
--- | --- | ---
|
203
|
+
`:caller` | The ActiveRecord instance responsible for creating the table | *context*
|
204
|
+
`:table_name` | The name of the table | *arg*
|
205
|
+
`:options` | Create table options | *arg*
|
206
|
+
`:block` | Proc containing table definition statements | *arg*
|
207
|
+
|
208
|
+
The base implementation creates the table, yielding a `table_definition` instance to the block (if a block is given).
|
209
|
+
|
194
210
|
* `Migration::DropTable`
|
195
211
|
|
196
212
|
Drops a table from the database
|
@@ -199,7 +215,7 @@ Stacks for operations that change the schema. In some cases the operation immed
|
|
199
215
|
--- | --- | ---
|
200
216
|
`:connection` | The current ActiveRecord connection | *context*
|
201
217
|
`:table_name` | The name of the table | *arg*
|
202
|
-
`:options` |
|
218
|
+
`:options` | Drop table options | *arg*
|
203
219
|
|
204
220
|
The base implementation drops the table. No value is returned.
|
205
221
|
|
@@ -439,6 +455,5 @@ Some things to know about to help you develop and test:
|
|
439
455
|
[schema_monkey](https://github.com/SchemaPlus/schema_monkey) client,
|
440
456
|
using [schema_monkey](https://github.com/SchemaPlus/schema_monkey)'s
|
441
457
|
convention-based protocols for extending ActiveRecord and using middleware stacks.
|
442
|
-
For more information see [schema_monkey](https://github.com/SchemaPlus/schema_monkey)'s README.
|
443
458
|
|
444
459
|
<!-- SCHEMA_DEV: TEMPLATE USES SCHEMA_MONKEY - end -->
|
data/lib/schema_plus/core.rb
CHANGED
@@ -18,6 +18,7 @@ require_relative "core/active_record/base"
|
|
18
18
|
require_relative "core/active_record/connection_adapters/abstract_adapter"
|
19
19
|
require_relative "core/active_record/connection_adapters/table_definition"
|
20
20
|
require_relative "core/active_record/migration/command_recorder"
|
21
|
+
require_relative "core/active_record/schema"
|
21
22
|
require_relative "core/active_record/schema_dumper"
|
22
23
|
require_relative "core/middleware"
|
23
24
|
require_relative "core/schema_dump"
|
@@ -10,24 +10,30 @@ module SchemaPlus
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
+
def add_index_options(table_name, column_names, options={})
|
14
|
+
SchemaMonkey::Middleware::Sql::IndexComponents.start(connection: self, table_name: table_name, column_names: Array.wrap(column_names), options: options.deep_dup, sql: SqlStruct::IndexComponents.new) { |env|
|
15
|
+
env.sql.name, env.sql.type, env.sql.columns, env.sql.options, env.sql.algorithm, env.sql.using = super env.table_name, env.column_names, env.options
|
16
|
+
}.sql.to_hash.values
|
17
|
+
end
|
18
|
+
|
13
19
|
def add_reference(table_name, name, options = {})
|
14
20
|
SchemaMonkey::Middleware::Migration::Column.start(caller: self, operation: :add, table_name: table_name, column_name: "#{name}_id", type: :reference, options: options.deep_dup) do |env|
|
15
21
|
super env.table_name, env.column_name.sub(/_id$/, ''), env.options
|
16
22
|
end
|
17
23
|
end
|
18
24
|
|
25
|
+
def create_table(table_name, options={}, &block)
|
26
|
+
SchemaMonkey::Middleware::Migration::CreateTable.start(connection: self, table_name: table_name, options: options.deep_dup, block: block) do |env|
|
27
|
+
super env.table_name, env.options, &env.block
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
19
31
|
def drop_table(table_name, options={})
|
20
32
|
SchemaMonkey::Middleware::Migration::DropTable.start(connection: self, table_name: table_name, options: options.dup) do |env|
|
21
33
|
super env.table_name, env.options
|
22
34
|
end
|
23
35
|
end
|
24
36
|
|
25
|
-
def add_index_options(table_name, column_names, options={})
|
26
|
-
SchemaMonkey::Middleware::Sql::IndexComponents.start(connection: self, table_name: table_name, column_names: Array.wrap(column_names), options: options.deep_dup, sql: SqlStruct::IndexComponents.new) { |env|
|
27
|
-
env.sql.name, env.sql.type, env.sql.columns, env.sql.options, env.sql.algorithm, env.sql.using = super env.table_name, env.column_names, env.options
|
28
|
-
}.sql.to_hash.values
|
29
|
-
end
|
30
|
-
|
31
37
|
module SchemaCreation
|
32
38
|
|
33
39
|
def add_column_options!(sql, options)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module SchemaPlus::Core
|
2
|
+
module ActiveRecord
|
3
|
+
module Schema
|
4
|
+
module ClassMethods
|
5
|
+
def define(info={}, &block)
|
6
|
+
SchemaMonkey::Middleware::Schema::Define.start(info: info, block: block) do |env|
|
7
|
+
super env.info, &env.block
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -8,16 +8,20 @@ module SchemaPlus
|
|
8
8
|
end
|
9
9
|
|
10
10
|
module Schema
|
11
|
-
module
|
12
|
-
|
13
|
-
# :table_name is only for sqlite3
|
14
|
-
ENV = [:connection, :query_name, :table_name, :database, :like, :tables]
|
11
|
+
module Define
|
12
|
+
ENV = [:info, :block]
|
15
13
|
end
|
16
14
|
|
17
15
|
module Indexes
|
18
16
|
ENV = [:connection, :query_name, :table_name, :index_definitions]
|
19
17
|
end
|
20
18
|
|
19
|
+
module Tables
|
20
|
+
# :database and :like are only for mysql
|
21
|
+
# :table_name is only for sqlite3
|
22
|
+
ENV = [:connection, :query_name, :table_name, :database, :like, :tables]
|
23
|
+
end
|
24
|
+
|
21
25
|
end
|
22
26
|
|
23
27
|
module Migration
|
@@ -25,14 +29,19 @@ module SchemaPlus
|
|
25
29
|
ENV = [:caller, :operation, :table_name, :column_name, :type, :options]
|
26
30
|
end
|
27
31
|
|
28
|
-
module
|
29
|
-
ENV = [:
|
32
|
+
module CreateTable
|
33
|
+
ENV = [:connection, :table_name, :options, :block]
|
30
34
|
end
|
31
35
|
|
32
36
|
module DropTable
|
33
37
|
ENV = [:connection, :table_name, :options]
|
34
38
|
end
|
35
39
|
|
40
|
+
module Index
|
41
|
+
ENV = [:caller, :operation, :table_name, :column_names, :options]
|
42
|
+
end
|
43
|
+
|
44
|
+
|
36
45
|
end
|
37
46
|
|
38
47
|
module Sql
|
data/schema_plus_core.gemspec
CHANGED
@@ -19,13 +19,13 @@ Gem::Specification.new do |gem|
|
|
19
19
|
gem.require_paths = ["lib"]
|
20
20
|
|
21
21
|
gem.add_dependency "activerecord", "~> 4.2"
|
22
|
-
gem.add_dependency "schema_monkey", "~> 2.
|
22
|
+
gem.add_dependency "schema_monkey", "~> 2.1"
|
23
23
|
|
24
24
|
gem.add_development_dependency "bundler", "~> 1.7"
|
25
25
|
gem.add_development_dependency "rake", "~> 10.0"
|
26
26
|
gem.add_development_dependency "rspec", "~> 3.0.0"
|
27
27
|
gem.add_development_dependency "rspec-given"
|
28
|
-
gem.add_development_dependency "schema_dev", "~> 3.
|
28
|
+
gem.add_development_dependency "schema_dev", "~> 3.3"
|
29
29
|
gem.add_development_dependency "simplecov"
|
30
30
|
gem.add_development_dependency "simplecov-gem-profile"
|
31
31
|
end
|
data/spec/middleware_spec.rb
CHANGED
@@ -24,6 +24,10 @@ describe SchemaMonkey::Middleware do
|
|
24
24
|
|
25
25
|
context SchemaMonkey::Middleware::Schema do
|
26
26
|
|
27
|
+
context TestReporter::Middleware::Schema::Define do
|
28
|
+
Then { expect_middleware { ActiveRecord::Schema.define { } } }
|
29
|
+
end
|
30
|
+
|
27
31
|
context TestReporter::Middleware::Schema::Tables do
|
28
32
|
Then { expect_middleware { connection.tables() } }
|
29
33
|
end
|
@@ -59,6 +63,10 @@ describe SchemaMonkey::Middleware do
|
|
59
63
|
Then { expect_middleware(enable: {type: :reference}, env: {operation: :define, column_name: "ref_id"}) { table_statement(:belongs_to, "ref") } }
|
60
64
|
end
|
61
65
|
|
66
|
+
context TestReporter::Middleware::Migration::CreateTable do
|
67
|
+
Then { expect_middleware { connection.create_table "other" } }
|
68
|
+
end
|
69
|
+
|
62
70
|
context TestReporter::Middleware::Migration::DropTable do
|
63
71
|
Then { expect_middleware { connection.drop_table "things" } }
|
64
72
|
end
|
@@ -25,14 +25,16 @@ module TestReporter
|
|
25
25
|
end
|
26
26
|
|
27
27
|
module Schema
|
28
|
-
module
|
28
|
+
module Define ; include Notify ; end
|
29
29
|
module Indexes ; include Notify ; end
|
30
|
+
module Tables ; include Notify ; end
|
30
31
|
end
|
31
32
|
|
32
33
|
module Migration
|
33
34
|
module Column ; include Notify ; end
|
34
|
-
module
|
35
|
+
module CreateTable ; include Notify ; end
|
35
36
|
module DropTable ; include Notify ; end
|
37
|
+
module Index ; include Notify ; end
|
36
38
|
end
|
37
39
|
|
38
40
|
module Sql
|
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: 0.2.
|
4
|
+
version: 0.2.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: 2015-02-
|
11
|
+
date: 2015-02-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '2.
|
33
|
+
version: '2.1'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '2.
|
40
|
+
version: '2.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,14 +100,14 @@ dependencies:
|
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '3.
|
103
|
+
version: '3.3'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '3.
|
110
|
+
version: '3.3'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: simplecov
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,6 +164,7 @@ files:
|
|
164
164
|
- lib/schema_plus/core/active_record/connection_adapters/sqlite3_adapter.rb
|
165
165
|
- lib/schema_plus/core/active_record/connection_adapters/table_definition.rb
|
166
166
|
- lib/schema_plus/core/active_record/migration/command_recorder.rb
|
167
|
+
- lib/schema_plus/core/active_record/schema.rb
|
167
168
|
- lib/schema_plus/core/active_record/schema_dumper.rb
|
168
169
|
- lib/schema_plus/core/middleware.rb
|
169
170
|
- lib/schema_plus/core/schema_dump.rb
|