schema_plus_core 0.1.0
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 +7 -0
- data/.gitignore +9 -0
- data/.travis.yml +18 -0
- data/Gemfile +5 -0
- data/LICENSE.txt +22 -0
- data/README.md +434 -0
- data/Rakefile +9 -0
- data/gemfiles/Gemfile.base +4 -0
- data/gemfiles/activerecord-4.2/Gemfile.base +3 -0
- data/gemfiles/activerecord-4.2/Gemfile.mysql2 +10 -0
- data/gemfiles/activerecord-4.2/Gemfile.postgresql +10 -0
- data/gemfiles/activerecord-4.2/Gemfile.sqlite3 +10 -0
- data/lib/schema_plus/core.rb +27 -0
- data/lib/schema_plus/core/active_record/base.rb +22 -0
- data/lib/schema_plus/core/active_record/connection_adapters/abstract_adapter.rb +43 -0
- data/lib/schema_plus/core/active_record/connection_adapters/abstract_mysql_adapter.rb +17 -0
- data/lib/schema_plus/core/active_record/connection_adapters/mysql2_adapter.rb +64 -0
- data/lib/schema_plus/core/active_record/connection_adapters/postgresql_adapter.rb +46 -0
- data/lib/schema_plus/core/active_record/connection_adapters/sqlite3_adapter.rb +43 -0
- data/lib/schema_plus/core/active_record/connection_adapters/table_definition.rb +36 -0
- data/lib/schema_plus/core/active_record/migration/command_recorder.rb +16 -0
- data/lib/schema_plus/core/active_record/schema_dumper.rb +102 -0
- data/lib/schema_plus/core/middleware.rb +71 -0
- data/lib/schema_plus/core/schema_dump.rb +123 -0
- data/lib/schema_plus/core/sql_struct.rb +30 -0
- data/lib/schema_plus/core/version.rb +5 -0
- data/schema_dev.yml +8 -0
- data/schema_plus_core.gemspec +31 -0
- data/spec/dumper_spec.rb +53 -0
- data/spec/middleware_spec.rb +175 -0
- data/spec/spec_helper.rb +35 -0
- data/spec/sql_struct_spec.rb +29 -0
- data/spec/support/enableable.rb +30 -0
- data/spec/support/test_dumper.rb +42 -0
- data/spec/support/test_reporter.rb +57 -0
- metadata +212 -0
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
require 'simplecov-gem-profile'
|
3
|
+
SimpleCov.start "gem"
|
4
|
+
|
5
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
6
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
7
|
+
|
8
|
+
require 'rspec'
|
9
|
+
require 'rspec/given'
|
10
|
+
require 'active_record'
|
11
|
+
require 'schema_plus/core'
|
12
|
+
require 'schema_dev/rspec'
|
13
|
+
|
14
|
+
Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f}
|
15
|
+
|
16
|
+
SchemaDev::Rspec.setup
|
17
|
+
|
18
|
+
RSpec.configure do |config|
|
19
|
+
config.warnings = true
|
20
|
+
config.around(:each) do |example|
|
21
|
+
ActiveRecord::Migration.suppress_messages do
|
22
|
+
begin
|
23
|
+
example.run
|
24
|
+
ensure
|
25
|
+
ActiveRecord::Base.connection.tables.each do |table|
|
26
|
+
ActiveRecord::Migration.drop_table table, force: :cascade
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
SimpleCov.command_name "[ruby #{RUBY_VERSION} - ActiveRecord #{::ActiveRecord::VERSION::STRING} - #{ActiveRecord::Base.connection.adapter_name}]"
|
35
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SchemaPlus::Core::SqlStruct do
|
4
|
+
|
5
|
+
describe SchemaPlus::Core::SqlStruct::Table do
|
6
|
+
|
7
|
+
Given(:struct) { described_class.new }
|
8
|
+
|
9
|
+
When { struct.parse! sql }
|
10
|
+
|
11
|
+
Invariant { expect(struct.assemble).to eq sql }
|
12
|
+
|
13
|
+
context "with options (mysql syntax)" do
|
14
|
+
Given(:sql) { %q<CREATE TABLE `things` (`id` int(11) auto_increment PRIMARY KEY, `column` int(11), INDEX `index_things_on_column` (`column`) ) ENGINE=InnoDB> }
|
15
|
+
Then { expect(struct.command).to eq "CREATE TABLE" }
|
16
|
+
Then { expect(struct.name).to eq "things" }
|
17
|
+
Then { expect(struct.options).to eq "ENGINE=InnoDB" }
|
18
|
+
end
|
19
|
+
|
20
|
+
context "temporary table (sqlite3 syntax)" do
|
21
|
+
Given(:sql) { %q<CREATE TEMPORARY TABLE "athings" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "column1" integer)> }
|
22
|
+
Then { expect(struct.command).to eq "CREATE TEMPORARY TABLE" }
|
23
|
+
Then { expect(struct.name).to eq "athings" }
|
24
|
+
Then { expect(struct.options).to be_blank }
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Enableable
|
2
|
+
|
3
|
+
def enabled_middleware(root, env)
|
4
|
+
middleware = self.singleton_class.ancestors.find(&it.to_s.start_with?("#{root}::Middleware"))
|
5
|
+
return nil unless middleware.enabled?(env)
|
6
|
+
middleware.disable
|
7
|
+
middleware
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.included(base)
|
11
|
+
base.module_eval do
|
12
|
+
def self.enable(condition = true)
|
13
|
+
@enabled = condition
|
14
|
+
end
|
15
|
+
def self.enabled?(env)
|
16
|
+
case @enabled
|
17
|
+
when Proc then @enabled.call(env)
|
18
|
+
else @enabled
|
19
|
+
end
|
20
|
+
end
|
21
|
+
def self.disable
|
22
|
+
@enabled = false
|
23
|
+
end
|
24
|
+
|
25
|
+
disable
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module TestDumper
|
2
|
+
module Middleware
|
3
|
+
module Dumper
|
4
|
+
module Initial
|
5
|
+
include Enableable
|
6
|
+
def after(env)
|
7
|
+
return unless middleware = enabled_middleware(TestDumper, env)
|
8
|
+
env.initial.unshift middleware.to_s
|
9
|
+
end
|
10
|
+
end
|
11
|
+
module Tables
|
12
|
+
include Enableable
|
13
|
+
def after(env)
|
14
|
+
return unless middleware = enabled_middleware(TestDumper, env)
|
15
|
+
env.dump.tables[middleware.to_s] = env.dump.tables.values.first.dup.tap {|t| t.pname = middleware.to_s }
|
16
|
+
env.dump.depends("things", middleware.to_s)
|
17
|
+
env.dump.depends(middleware.to_s, "other")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
module Table
|
21
|
+
include Enableable
|
22
|
+
def after(env)
|
23
|
+
return unless middleware = enabled_middleware(TestDumper, env)
|
24
|
+
env.table.columns.first.add_option "option: #{middleware}"
|
25
|
+
env.table.columns.first.add_comment "comment: #{middleware}"
|
26
|
+
env.table.statements << "statement: #{middleware}"
|
27
|
+
env.table.trailer << "trailer: #{middleware}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
module Indexes
|
31
|
+
include Enableable
|
32
|
+
def after(env)
|
33
|
+
return unless env.table.indexes.any?
|
34
|
+
return unless middleware = enabled_middleware(TestDumper, env)
|
35
|
+
env.table.indexes.first.add_option middleware.to_s
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
SchemaMonkey.register(TestDumper)
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module TestReporter
|
2
|
+
|
3
|
+
class Called < Exception
|
4
|
+
attr_accessor :middleware, :env
|
5
|
+
def initialize(middleware:, env:)
|
6
|
+
@middleware = middleware
|
7
|
+
@env = env
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
module Notify
|
12
|
+
def self.included(base)
|
13
|
+
base.send :include, Enableable
|
14
|
+
end
|
15
|
+
|
16
|
+
def after(env)
|
17
|
+
return unless middleware = enabled_middleware(TestReporter, env)
|
18
|
+
raise Called, middleware: middleware, env: env
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
module Middleware
|
23
|
+
module Query
|
24
|
+
module Exec ; include Notify ; end
|
25
|
+
end
|
26
|
+
|
27
|
+
module Schema
|
28
|
+
module Tables ; include Notify ; end
|
29
|
+
module Indexes ; include Notify ; end
|
30
|
+
end
|
31
|
+
|
32
|
+
module Migration
|
33
|
+
module Column ; include Notify ; end
|
34
|
+
module Index ; include Notify ; end
|
35
|
+
end
|
36
|
+
|
37
|
+
module Sql
|
38
|
+
module ColumnOptions ; include Notify ; end
|
39
|
+
module IndexComponents ; include Notify ; end
|
40
|
+
module Table ; include Notify ; end
|
41
|
+
end
|
42
|
+
|
43
|
+
module Model
|
44
|
+
module Columns ; include Notify ; end
|
45
|
+
module ResetColumnInformation ; include Notify ; end
|
46
|
+
end
|
47
|
+
|
48
|
+
module Dumper
|
49
|
+
module Initial ; include Notify ; end
|
50
|
+
module Tables ; include Notify ; end
|
51
|
+
module Table ; include Notify ; end
|
52
|
+
module Indexes ; include Notify ; end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
SchemaMonkey.register(TestReporter)
|
metadata
ADDED
@@ -0,0 +1,212 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: schema_plus_core
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- ronen barzel
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-02-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activerecord
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: schema_monkey
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.7'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.7'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '10.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 3.0.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 3.0.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec-given
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: schema_dev
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3.1'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3.1'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: simplecov
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: simplecov-gem-profile
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
description: Provides an internal extension API to ActiveRecord, in the form of middleware-style
|
140
|
+
callback stacks
|
141
|
+
email:
|
142
|
+
- ronen@barzel.org
|
143
|
+
executables: []
|
144
|
+
extensions: []
|
145
|
+
extra_rdoc_files: []
|
146
|
+
files:
|
147
|
+
- ".gitignore"
|
148
|
+
- ".travis.yml"
|
149
|
+
- Gemfile
|
150
|
+
- LICENSE.txt
|
151
|
+
- README.md
|
152
|
+
- Rakefile
|
153
|
+
- gemfiles/Gemfile.base
|
154
|
+
- gemfiles/activerecord-4.2/Gemfile.base
|
155
|
+
- gemfiles/activerecord-4.2/Gemfile.mysql2
|
156
|
+
- gemfiles/activerecord-4.2/Gemfile.postgresql
|
157
|
+
- gemfiles/activerecord-4.2/Gemfile.sqlite3
|
158
|
+
- lib/schema_plus/core.rb
|
159
|
+
- lib/schema_plus/core/active_record/base.rb
|
160
|
+
- lib/schema_plus/core/active_record/connection_adapters/abstract_adapter.rb
|
161
|
+
- lib/schema_plus/core/active_record/connection_adapters/abstract_mysql_adapter.rb
|
162
|
+
- lib/schema_plus/core/active_record/connection_adapters/mysql2_adapter.rb
|
163
|
+
- lib/schema_plus/core/active_record/connection_adapters/postgresql_adapter.rb
|
164
|
+
- lib/schema_plus/core/active_record/connection_adapters/sqlite3_adapter.rb
|
165
|
+
- lib/schema_plus/core/active_record/connection_adapters/table_definition.rb
|
166
|
+
- lib/schema_plus/core/active_record/migration/command_recorder.rb
|
167
|
+
- lib/schema_plus/core/active_record/schema_dumper.rb
|
168
|
+
- lib/schema_plus/core/middleware.rb
|
169
|
+
- lib/schema_plus/core/schema_dump.rb
|
170
|
+
- lib/schema_plus/core/sql_struct.rb
|
171
|
+
- lib/schema_plus/core/version.rb
|
172
|
+
- schema_dev.yml
|
173
|
+
- schema_plus_core.gemspec
|
174
|
+
- spec/dumper_spec.rb
|
175
|
+
- spec/middleware_spec.rb
|
176
|
+
- spec/spec_helper.rb
|
177
|
+
- spec/sql_struct_spec.rb
|
178
|
+
- spec/support/enableable.rb
|
179
|
+
- spec/support/test_dumper.rb
|
180
|
+
- spec/support/test_reporter.rb
|
181
|
+
homepage: https://github.com/SchemaPlus/schema_plus_core
|
182
|
+
licenses:
|
183
|
+
- MIT
|
184
|
+
metadata: {}
|
185
|
+
post_install_message:
|
186
|
+
rdoc_options: []
|
187
|
+
require_paths:
|
188
|
+
- lib
|
189
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
190
|
+
requirements:
|
191
|
+
- - ">="
|
192
|
+
- !ruby/object:Gem::Version
|
193
|
+
version: '0'
|
194
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
195
|
+
requirements:
|
196
|
+
- - ">="
|
197
|
+
- !ruby/object:Gem::Version
|
198
|
+
version: '0'
|
199
|
+
requirements: []
|
200
|
+
rubyforge_project:
|
201
|
+
rubygems_version: 2.2.2
|
202
|
+
signing_key:
|
203
|
+
specification_version: 4
|
204
|
+
summary: Provides an internal extension API to ActiveRecord
|
205
|
+
test_files:
|
206
|
+
- spec/dumper_spec.rb
|
207
|
+
- spec/middleware_spec.rb
|
208
|
+
- spec/spec_helper.rb
|
209
|
+
- spec/sql_struct_spec.rb
|
210
|
+
- spec/support/enableable.rb
|
211
|
+
- spec/support/test_dumper.rb
|
212
|
+
- spec/support/test_reporter.rb
|