sequel-postgres-schemata 0.0.4 → 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 +4 -4
- data/README.md +10 -0
- data/lib/sequel/postgres/schemata.rb +28 -7
- data/lib/sequel/postgres/schemata/version.rb +1 -1
- data/spec/schemata_spec.rb +23 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 82a2bd1a15e792cf64681981c3be64c1e11d71cb
|
4
|
+
data.tar.gz: cedd9abd2407e342c4b5f1e1e8f99dbe20086004
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0774f6ba877d48a5c9c81cb9254768eb7717529fb30362c209e208f054e8fc720a4d8cec06495c7fa76cd9681cad5fb7e3511c21f7e0a4843541c12137f6ad0
|
7
|
+
data.tar.gz: d273ce571db7b5f2e73214a99b3406b01afa3f20e7ac4e1014182766595d411f0c017c403eaa92c3e4e705b0817aeca1fea4ac78b8412e9b04d69c587d753726
|
data/README.md
CHANGED
@@ -24,12 +24,22 @@ db = Sequel.connect adapter: 'postgres', search_path: %w(foo public)
|
|
24
24
|
db.create_schema :bar
|
25
25
|
|
26
26
|
db.search_path # => [:foo, :public]
|
27
|
+
|
28
|
+
db.search_path :baz do
|
29
|
+
db.search_path # => [:baz]
|
30
|
+
end
|
31
|
+
|
32
|
+
db.search_path :baz, prepend: true do
|
33
|
+
db.search_path # => [:baz, :foo, :public]
|
34
|
+
end
|
35
|
+
|
27
36
|
db.schemata # => [:pg_toast, :pg_temp_1, :pg_toast_temp_1, :pg_catalog, :public, :information_schema, :bar]
|
28
37
|
db.current_schemata # => [:public]
|
29
38
|
db.search_path = [:bar, :foo, :public]
|
30
39
|
db.current_schemata # => [:bar, :public]
|
31
40
|
db.rename_schema :bar, :foo
|
32
41
|
db.current_schemata # => [:foo, :public]
|
42
|
+
|
33
43
|
```
|
34
44
|
|
35
45
|
## Contributing
|
@@ -15,16 +15,24 @@ module Sequel
|
|
15
15
|
|
16
16
|
# Returns a symbol list containing the current search path.
|
17
17
|
# Note that the search path can contain non-existent schematas.
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
# If given a block and an argument, instead temporarily changes
|
19
|
+
# the search path inside the block. It also accepts several arguments,
|
20
|
+
# in which case it treats them as an array of schemata to put in search path.
|
21
|
+
# If you use prepend: true, it prepends any given schemata to the current search path.
|
22
|
+
def search_path *a, prepend: false, &block
|
23
|
+
if block_given?
|
24
|
+
a = a.flatten
|
25
|
+
a += search_path if prepend
|
26
|
+
run_with_search_path a, &block
|
27
|
+
else
|
28
|
+
get_search_path
|
29
|
+
end
|
22
30
|
end
|
23
31
|
|
24
32
|
# Sets the search path. Starting with Postgres 9.2 it can contain
|
25
33
|
# non-existent schematas.
|
26
|
-
# Accepted formats include a single symbol, a single string (
|
27
|
-
#
|
34
|
+
# Accepted formats include a single symbol, a single string (split on ,)
|
35
|
+
# and lists of symbols or strings.
|
28
36
|
def search_path= search_path
|
29
37
|
case search_path
|
30
38
|
when String
|
@@ -52,7 +60,20 @@ module Sequel
|
|
52
60
|
end
|
53
61
|
|
54
62
|
private
|
55
|
-
|
63
|
+
|
64
|
+
def get_search_path
|
65
|
+
metadata_dataset.with_sql(SHOW_SEARCH_PATH).
|
66
|
+
single_value.scan(SCHEMA_SCAN_RE).flatten.
|
67
|
+
map{|s|s.strip.sub(SCHEMA_SUB_RE, '\1').gsub('""', '"').to_sym}
|
68
|
+
end
|
69
|
+
|
70
|
+
def run_with_search_path path, &block
|
71
|
+
old_path = search_path
|
72
|
+
self.search_path = path
|
73
|
+
yield
|
74
|
+
self.search_path = old_path
|
75
|
+
end
|
76
|
+
|
56
77
|
SHOW_SEARCH_PATH = "SHOW search_path".freeze
|
57
78
|
SCHEMA_SCAN_RE = /(?<=\A|,)(".*?"|.*?)(?=,|\z)/.freeze
|
58
79
|
SCHEMA_SUB_RE = /\A"(.*)"\z/.freeze
|
data/spec/schemata_spec.rb
CHANGED
@@ -21,6 +21,29 @@ describe Sequel::Postgres::Schemata do
|
|
21
21
|
it "correctly handles the default list" do
|
22
22
|
expect(plain_db.search_path).to eq(%i($user public))
|
23
23
|
end
|
24
|
+
|
25
|
+
describe "with a block" do
|
26
|
+
it "changes the search path temporarily" do
|
27
|
+
db.search_path :bar do
|
28
|
+
db.search_path.should == %i(bar)
|
29
|
+
end
|
30
|
+
db.search_path.should == %i(foo public)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "accepts symbols as arglist" do
|
34
|
+
db.search_path :bar, :baz do
|
35
|
+
db.search_path.should == %i(bar baz)
|
36
|
+
end
|
37
|
+
db.search_path.should == %i(foo public)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "allows prepending with prepend: true" do
|
41
|
+
db.search_path :bar, prepend: true do
|
42
|
+
db.search_path.should == %i(bar foo public)
|
43
|
+
end
|
44
|
+
db.search_path.should == %i(foo public)
|
45
|
+
end
|
46
|
+
end
|
24
47
|
end
|
25
48
|
|
26
49
|
describe "#search_path=" do
|