schema_monkey 2.1.2 → 2.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/lib/schema_monkey/client.rb +4 -3
- data/lib/schema_monkey/monkey.rb +6 -8
- data/lib/schema_monkey/version.rb +1 -1
- data/spec/schema_monkey_spec.rb +55 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bd2b4e25c9e2bcc5fda7640439069570006e8551
|
4
|
+
data.tar.gz: 2270a11166bdffb014753139c575abfd2679d877
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e7ba30f9468eca1f5f65590df3fbf99f67cfee9eaa75beb1c687215f85da7ace697de4fd543753bb4a129249d57777f84bbd147e10c89fca65c94d8c2975e2f
|
7
|
+
data.tar.gz: df9a386fd3ee4d6e97596bca33137826a362d2adebcd9239311588026a0627cf1c80321aa33aeeb4f991bbcb077262b18c7aa372ebf15ad9e0266fc7729f861c
|
data/README.md
CHANGED
@@ -232,6 +232,7 @@ SchemaMonkey is tested on:
|
|
232
232
|
<!-- SCHEMA_DEV: MATRIX - end -->
|
233
233
|
|
234
234
|
## Release Notes
|
235
|
+
* 2.1.3 -- Guard against multiple insertion of modules.
|
235
236
|
* 2.1.2 -- Insert self earlier; don't wait for connection adapter to be instantiated. Fixes #6 re `db:schema:load`
|
236
237
|
* 2.1.1 -- Bug fix: don't choke if a module contains a BasicObject const
|
237
238
|
* 2.1.0 -- First version to support all of schema_plus's needs for the 1.8.7 -> 2.0 upgrade
|
data/lib/schema_monkey/client.rb
CHANGED
@@ -3,7 +3,7 @@ module SchemaMonkey
|
|
3
3
|
|
4
4
|
def initialize(mod)
|
5
5
|
@root = mod
|
6
|
-
@
|
6
|
+
@inserted = {}
|
7
7
|
end
|
8
8
|
|
9
9
|
def insert(dbm: nil)
|
@@ -16,6 +16,7 @@ module SchemaMonkey
|
|
16
16
|
def insert_active_record(dbm: nil)
|
17
17
|
# Kernel.warn "--- inserting active_record for #{@root}, dbm=#{dbm.inspect}"
|
18
18
|
find_modules(:ActiveRecord, dbm: dbm).each do |mod|
|
19
|
+
next if @inserted[mod]
|
19
20
|
relative_path = canonicalize_path(mod, :ActiveRecord, dbm)
|
20
21
|
ActiveRecord.insert(relative_path, mod)
|
21
22
|
end
|
@@ -23,10 +24,10 @@ module SchemaMonkey
|
|
23
24
|
|
24
25
|
def insert_middleware(dbm: nil)
|
25
26
|
find_modules(:Middleware, dbm: dbm).each do |mod|
|
26
|
-
next if @
|
27
|
+
next if @inserted[mod]
|
27
28
|
relative_path = canonicalize_path(mod, :Middleware, dbm)
|
28
29
|
Stack.insert(relative_path, mod) unless relative_path.empty?
|
29
|
-
@
|
30
|
+
@inserted[mod] = true
|
30
31
|
end
|
31
32
|
end
|
32
33
|
|
data/lib/schema_monkey/monkey.rb
CHANGED
@@ -5,25 +5,23 @@ module SchemaMonkey
|
|
5
5
|
|
6
6
|
class Monkey
|
7
7
|
|
8
|
-
attr_reader :clients, :stacks
|
9
|
-
|
10
8
|
def initialize
|
11
|
-
@
|
9
|
+
@client_map = {}
|
12
10
|
@inserted = nil
|
13
11
|
@inserted_dbm = nil
|
14
12
|
Module.insert ::ActiveRecord::ConnectionAdapters::AbstractAdapter, SchemaMonkey::ActiveRecord::ConnectionAdapters::AbstractAdapter
|
15
13
|
end
|
16
14
|
|
17
15
|
def register(mod)
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
16
|
+
@client_map[mod] ||= Client.new(mod).tap { |client|
|
17
|
+
client.insert if @inserted
|
18
|
+
client.insert(dbm: @inserted_dbm) if @inserted_dbm
|
19
|
+
}
|
22
20
|
end
|
23
21
|
|
24
22
|
def insert(dbm: nil)
|
25
23
|
insert if dbm and not @inserted # first do all non-dbm-specific insertions
|
26
|
-
|
24
|
+
@client_map.values.each &it.insert(dbm: dbm)
|
27
25
|
@inserted = true
|
28
26
|
@inserted_dbm = dbm if dbm
|
29
27
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SchemaMonkey do
|
4
|
+
|
5
|
+
it "doesn't register same client's middleware twice" do
|
6
|
+
base = Module.new.tap(&it.module_eval(<<-END))
|
7
|
+
module Middleware
|
8
|
+
module Group
|
9
|
+
module Stack
|
10
|
+
ENV = [:result]
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
END
|
15
|
+
mod = Module.new.tap(&it.module_eval(<<-END))
|
16
|
+
module Middleware
|
17
|
+
module Group
|
18
|
+
module Stack
|
19
|
+
def after(env)
|
20
|
+
env.result += 1
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
END
|
26
|
+
|
27
|
+
SchemaMonkey.register(base)
|
28
|
+
expect( SchemaMonkey::Middleware::Group::Stack.start(result: 0) {}.result ).to eq 0
|
29
|
+
SchemaMonkey.register(mod)
|
30
|
+
expect( SchemaMonkey::Middleware::Group::Stack.start(result: 0) {}.result ).to eq 1
|
31
|
+
SchemaMonkey.register(mod)
|
32
|
+
expect( SchemaMonkey::Middleware::Group::Stack.start(result: 0) {}.result ).to eq 1
|
33
|
+
end
|
34
|
+
|
35
|
+
it "doesn't register same client's ActiveRecord extensions twice" do
|
36
|
+
mod = Module.new.tap(&it.module_eval(<<-END))
|
37
|
+
module ActiveRecord
|
38
|
+
module Base
|
39
|
+
def monkey_test
|
40
|
+
(super rescue 0) + 1
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
END
|
45
|
+
ActiveRecord::Migration.suppress_messages do
|
46
|
+
ActiveRecord::Migration.create_table "dummy", force: :cascade
|
47
|
+
end
|
48
|
+
record = Class.new(ActiveRecord::Base).tap{ |kls| kls.table_name = "dummy" }.new
|
49
|
+
SchemaMonkey.register mod
|
50
|
+
expect( record.monkey_test ).to eq 1
|
51
|
+
SchemaMonkey.register mod
|
52
|
+
expect( record.monkey_test ).to eq 1
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: schema_monkey
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.3
|
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-10-
|
11
|
+
date: 2015-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -183,6 +183,7 @@ files:
|
|
183
183
|
- spec/connection_spec.rb
|
184
184
|
- spec/middleware_spec.rb
|
185
185
|
- spec/module_spec.rb
|
186
|
+
- spec/schema_monkey_spec.rb
|
186
187
|
- spec/spec_helper.rb
|
187
188
|
homepage: https://github.com/SchemaPlus/schema_monkey
|
188
189
|
licenses:
|
@@ -213,4 +214,5 @@ test_files:
|
|
213
214
|
- spec/connection_spec.rb
|
214
215
|
- spec/middleware_spec.rb
|
215
216
|
- spec/module_spec.rb
|
217
|
+
- spec/schema_monkey_spec.rb
|
216
218
|
- spec/spec_helper.rb
|