schema_plus_pg_indexes 0.1.3 → 0.1.4
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 +1 -1
- data/README.md +14 -22
- data/lib/schema_plus_pg_indexes.rb +2 -3
- data/lib/schema_plus_pg_indexes/middleware/postgresql/dumper.rb +3 -3
- data/lib/schema_plus_pg_indexes/middleware/postgresql/sql.rb +1 -1
- data/lib/schema_plus_pg_indexes/version.rb +1 -1
- data/schema_plus_pg_indexes.gemspec +2 -2
- data/spec/index_spec.rb +35 -33
- data/spec/schema_dumper_spec.rb +7 -1
- data/spec/spec_helper.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b47ec75377fc42a755d49b02bdbf4129278a94f6
|
4
|
+
data.tar.gz: c803d64e0995541267e6484e68c99d4ee68bb036
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ae836dd3706cbca4b4cccf18d073375c57c38539c35c1381a44c6f4aee7c1b3a8033e33d140b423985aba7730f12aaf27ffa23dacf4355b87fd8b4430ec1d0c
|
7
|
+
data.tar.gz: f744880251c090ba35b079bd7b5d6fc42a04474b80e4d9ed3134c90438fe96312ed234d9677618f196721605c1311cb3c78058eb835912375f707050bd2f4fdb
|
data/.travis.yml
CHANGED
@@ -10,7 +10,7 @@ gemfile:
|
|
10
10
|
- gemfiles/activerecord-4.2/Gemfile.postgresql
|
11
11
|
env: POSTGRESQL_DB_USER=postgres
|
12
12
|
addons:
|
13
|
-
postgresql: '9.
|
13
|
+
postgresql: '9.4'
|
14
14
|
before_script: bundle exec rake create_databases
|
15
15
|
after_script: bundle exec rake drop_databases
|
16
16
|
script: bundle exec rake travis
|
data/README.md
CHANGED
@@ -31,26 +31,8 @@ gem "schema_plus_pg_indexes" # in a Gemfile
|
|
31
31
|
gem.add_dependency "schema_plus_pg_indexes" # in a .gemspec
|
32
32
|
```
|
33
33
|
|
34
|
-
To use with a rails app, also include
|
35
|
-
|
36
|
-
```ruby
|
37
|
-
gem "schema_monkey_rails"
|
38
|
-
```
|
39
|
-
|
40
|
-
which creates a Railtie to that will insert SchemaPlus::PgIndexes appropriately into the rails stack. To use with Padrino, see [schema_monkey_padrino](https://github.com/SchemaPlus/schema_monkey_padrino).
|
41
|
-
|
42
34
|
<!-- SCHEMA_DEV: TEMPLATE INSTALLATION - end -->
|
43
35
|
|
44
|
-
## Compatibility
|
45
|
-
|
46
|
-
schema_plus_pg_indexes is tested on
|
47
|
-
|
48
|
-
<!-- SCHEMA_DEV: MATRIX - begin -->
|
49
|
-
<!-- These lines are auto-generated by schema_dev based on schema_dev.yml -->
|
50
|
-
* ruby **2.1.5** with activerecord **4.2**, using **postgresql**
|
51
|
-
|
52
|
-
<!-- SCHEMA_DEV: MATRIX - end -->
|
53
|
-
|
54
36
|
## Deprecations
|
55
37
|
|
56
38
|
SchemaPlus 1.8.x provided some options and accessors that are now available
|
@@ -62,10 +44,21 @@ form:
|
|
62
44
|
* `:conditions` => `:where`
|
63
45
|
* `:kind` => `:using`
|
64
46
|
|
65
|
-
* `IndexDefinition` deprecates accessors:
|
47
|
+
* `IndexDefinition` deprecates accessors:
|
66
48
|
* `#conditions` in favor of `#where`
|
67
49
|
* `#kind` in favor of `#using.to_s`
|
68
50
|
|
51
|
+
|
52
|
+
## Compatibility
|
53
|
+
|
54
|
+
schema_plus_pg_indexes is tested on
|
55
|
+
|
56
|
+
<!-- SCHEMA_DEV: MATRIX - begin -->
|
57
|
+
<!-- These lines are auto-generated by schema_dev based on schema_dev.yml -->
|
58
|
+
* ruby **2.1.5** with activerecord **4.2**, using **postgresql**
|
59
|
+
|
60
|
+
<!-- SCHEMA_DEV: MATRIX - end -->
|
61
|
+
|
69
62
|
## History
|
70
63
|
|
71
64
|
### v0.1.0
|
@@ -104,8 +97,8 @@ Some things to know about to help you develop and test:
|
|
104
97
|
provides middleware callback stacks to make it easy to extend
|
105
98
|
ActiveRecord's behavior. If that API is missing something you need for
|
106
99
|
your contribution, please head over to
|
107
|
-
[schema_plus_core](https://github/SchemaPlus/schema_plus_core) and open
|
108
|
-
an issue or pull request.
|
100
|
+
[schema_plus_core](https://github.com/SchemaPlus/schema_plus_core) and open
|
101
|
+
an issue or pull request.
|
109
102
|
|
110
103
|
<!-- SCHEMA_DEV: TEMPLATE USES SCHEMA_PLUS_CORE - end -->
|
111
104
|
<!-- SCHEMA_DEV: TEMPLATE USES SCHEMA_MONKEY - begin -->
|
@@ -114,6 +107,5 @@ Some things to know about to help you develop and test:
|
|
114
107
|
[schema_monkey](https://github.com/SchemaPlus/schema_monkey) client,
|
115
108
|
using [schema_monkey](https://github.com/SchemaPlus/schema_monkey)'s
|
116
109
|
convention-based protocols for extending ActiveRecord and using middleware stacks.
|
117
|
-
For more information see [schema_monkey](https://github.com/SchemaPlus/schema_monkey)'s README.
|
118
110
|
|
119
111
|
<!-- SCHEMA_DEV: TEMPLATE USES SCHEMA_MONKEY - end -->
|
@@ -1,5 +1,4 @@
|
|
1
|
-
require '
|
2
|
-
require 'schema_plus_indexes'
|
1
|
+
require 'schema_plus/indexes'
|
3
2
|
|
4
3
|
require_relative 'schema_plus_pg_indexes/active_record/connection_adapters/index_definition'
|
5
4
|
require_relative 'schema_plus_pg_indexes/active_record/connection_adapters/postgresql_adapter'
|
@@ -9,4 +8,4 @@ require_relative 'schema_plus_pg_indexes/middleware/postgresql/sql'
|
|
9
8
|
require_relative 'schema_plus_pg_indexes/middleware/postgresql/schema'
|
10
9
|
require_relative 'schema_plus_pg_indexes/version'
|
11
10
|
|
12
|
-
SchemaMonkey.register
|
11
|
+
SchemaMonkey.register SchemaPlusPgIndexes
|
@@ -7,7 +7,7 @@ module SchemaPlusPgIndexes
|
|
7
7
|
|
8
8
|
# Dump index extensions
|
9
9
|
def after(env)
|
10
|
-
index_defs = Dumper.
|
10
|
+
index_defs = Dumper.get_index_definitions(env, env.table)
|
11
11
|
|
12
12
|
env.table.indexes.each do |index_dump|
|
13
13
|
index_def = index_defs.find(&its.name == index_dump.name)
|
@@ -31,7 +31,7 @@ module SchemaPlusPgIndexes
|
|
31
31
|
|
32
32
|
# Move index definitions inline
|
33
33
|
def after(env)
|
34
|
-
index_defs = Dumper.
|
34
|
+
index_defs = Dumper.get_index_definitions(env, env.table)
|
35
35
|
|
36
36
|
env.table.indexes.select(&its.columns.blank?).each do |index|
|
37
37
|
env.table.statements << "t.index name: #{index.name.inspect}, #{index.options}"
|
@@ -40,7 +40,7 @@ module SchemaPlusPgIndexes
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
def self.
|
43
|
+
def self.get_index_definitions(env, table_dump)
|
44
44
|
env.dump.data.index_definitions ||= {}
|
45
45
|
env.dump.data.index_definitions[table_dump.name] ||= env.connection.indexes(table_dump.name)
|
46
46
|
end
|
@@ -53,7 +53,7 @@ module SchemaPlusPgIndexes
|
|
53
53
|
end
|
54
54
|
|
55
55
|
if expression
|
56
|
-
env.sql.columns = expression
|
56
|
+
env.sql.columns = expression
|
57
57
|
elsif operator_classes or case_insensitive
|
58
58
|
option_strings = Hash[column_names.map {|name| [name, '']}]
|
59
59
|
(operator_classes||{}).stringify_keys.each do |column, opclass|
|
@@ -18,12 +18,12 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
20
|
spec.add_dependency "activerecord", "~> 4.2"
|
21
|
-
spec.add_dependency "schema_plus_indexes", "~> 0.1", ">= 0.1.
|
21
|
+
spec.add_dependency "schema_plus_indexes", "~> 0.1", ">= 0.1.3"
|
22
22
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.7"
|
24
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
25
25
|
spec.add_development_dependency "rspec", "~> 3.0.0"
|
26
|
-
spec.add_development_dependency "schema_dev", "~> 3.
|
26
|
+
spec.add_development_dependency "schema_dev", "~> 3.5"
|
27
27
|
spec.add_development_dependency "simplecov"
|
28
28
|
spec.add_development_dependency "simplecov-gem-profile"
|
29
29
|
end
|
data/spec/index_spec.rb
CHANGED
@@ -7,50 +7,46 @@ describe "index" do
|
|
7
7
|
|
8
8
|
describe "add_index" do
|
9
9
|
|
10
|
-
|
11
|
-
connection.tables.each do |table| connection.drop_table table, cascade: true end
|
12
|
-
|
13
|
-
define_schema do
|
14
|
-
create_table :users, :force => true do |t|
|
15
|
-
t.string :login
|
16
|
-
t.text :address
|
17
|
-
t.datetime :deleted_at
|
18
|
-
end
|
19
|
-
|
20
|
-
create_table :posts, :force => true do |t|
|
21
|
-
t.text :body
|
22
|
-
t.integer :user_id
|
23
|
-
t.integer :author_id
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
class User < ::ActiveRecord::Base ; end
|
28
|
-
class Post < ::ActiveRecord::Base ; end
|
29
|
-
end
|
30
|
-
|
10
|
+
class User < ::ActiveRecord::Base ; end
|
31
11
|
|
32
12
|
after(:each) do
|
33
13
|
migration.suppress_messages do
|
34
|
-
|
14
|
+
User.indexes.each do |index|
|
15
|
+
migration.remove_index :users, name: index.name, if_exists: true
|
16
|
+
end
|
17
|
+
User.reset_column_information
|
35
18
|
end
|
36
19
|
end
|
37
20
|
|
38
21
|
context "extra features" do
|
39
22
|
|
23
|
+
before(:each) do
|
24
|
+
connection.tables.each do |table| connection.drop_table table, cascade: true end
|
25
|
+
|
26
|
+
define_schema do
|
27
|
+
create_table :users, :force => true do |t|
|
28
|
+
t.string :login
|
29
|
+
t.text :address
|
30
|
+
t.jsonb :json_col
|
31
|
+
t.datetime :deleted_at
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
40
36
|
it "should assign expression, where and using" do
|
41
37
|
add_index(:users, :expression => "USING hash (upper(login)) WHERE deleted_at IS NULL", :name => 'users_login_index')
|
42
|
-
|
43
|
-
expect(
|
44
|
-
expect(
|
45
|
-
expect(
|
38
|
+
index = User.indexes.detect { |i| i.expression.present? }
|
39
|
+
expect(index.expression).to eq("upper((login)::text)")
|
40
|
+
expect(index.where).to eq("(deleted_at IS NULL)")
|
41
|
+
expect(index.using).to eq(:hash)
|
46
42
|
end
|
47
43
|
|
48
44
|
it "should allow to specify expression, where and using separately" do
|
49
45
|
add_index(:users, :using => "hash", :expression => "upper(login)", :where => "deleted_at IS NULL", :name => 'users_login_index')
|
50
|
-
|
51
|
-
expect(
|
52
|
-
expect(
|
53
|
-
expect(
|
46
|
+
index = User.indexes.detect { |i| i.expression.present? }
|
47
|
+
expect(index.expression).to eq("upper((login)::text)")
|
48
|
+
expect(index.where).to eq("(deleted_at IS NULL)")
|
49
|
+
expect(index.using).to eq(:hash)
|
54
50
|
end
|
55
51
|
|
56
52
|
it "should assign operator_class" do
|
@@ -65,8 +61,14 @@ describe "index" do
|
|
65
61
|
|
66
62
|
it "should allow to specify actual expression only" do
|
67
63
|
add_index(:users, :expression => "upper(login)", :name => 'users_login_index')
|
68
|
-
|
69
|
-
expect(
|
64
|
+
index = User.indexes.detect { |i| i.name == 'users_login_index' }
|
65
|
+
expect(index.expression).to eq("upper((login)::text)")
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should create proper sql with jsonb expressions (schema_plus #212)" do
|
69
|
+
add_index :users, :name => "json_expression", :using => :gin, :expression => "(json_col -> 'field')"
|
70
|
+
index = User.indexes.detect(&its.name == "json_expression")
|
71
|
+
expect(index.expression).to eq("(json_col -> 'field'::text)")
|
70
72
|
end
|
71
73
|
|
72
74
|
it "should raise if no column given and expression is missing" do
|
@@ -98,7 +100,7 @@ describe "index" do
|
|
98
100
|
protected
|
99
101
|
|
100
102
|
def index_for(column_names)
|
101
|
-
|
103
|
+
User.indexes.detect { |i| i.columns == Array(column_names).collect(&:to_s) }
|
102
104
|
end
|
103
105
|
|
104
106
|
end
|
data/spec/schema_dumper_spec.rb
CHANGED
@@ -6,7 +6,7 @@ describe "Schema dump" do
|
|
6
6
|
before(:all) do
|
7
7
|
ActiveRecord::Migration.suppress_messages do
|
8
8
|
ActiveRecord::Schema.define do
|
9
|
-
connection.tables.each do |table| drop_table table, :cascade
|
9
|
+
connection.tables.each do |table| drop_table table, force: :cascade end
|
10
10
|
|
11
11
|
create_table :users, :force => true do |t|
|
12
12
|
t.string :login
|
@@ -98,6 +98,12 @@ describe "Schema dump" do
|
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
101
|
+
it 'should dump proper operator_class with case_sensitive => false' do
|
102
|
+
with_index Post, :body, :operator_class => 'text_pattern_ops', :case_sensitive => false do
|
103
|
+
expect(dump_posts).to match(/body.*index:.*name: "index_posts_on_body", case_sensitive: false, operator_class: "text_pattern_ops"/)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
101
107
|
it "should dump unique: true with expression (Issue #142)" do
|
102
108
|
with_index Post, :name => "posts_user_body_index", :unique => true, :expression => "BTRIM(LOWER(body))" do
|
103
109
|
expect(dump_posts).to include(%q{t.index name: "posts_user_body_index", unique: true, expression: "btrim(lower(body))"})
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: schema_plus_pg_indexes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
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-
|
11
|
+
date: 2015-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -33,7 +33,7 @@ dependencies:
|
|
33
33
|
version: '0.1'
|
34
34
|
- - ">="
|
35
35
|
- !ruby/object:Gem::Version
|
36
|
-
version: 0.1.
|
36
|
+
version: 0.1.3
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0.1'
|
44
44
|
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: 0.1.
|
46
|
+
version: 0.1.3
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: bundler
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -92,14 +92,14 @@ dependencies:
|
|
92
92
|
requirements:
|
93
93
|
- - "~>"
|
94
94
|
- !ruby/object:Gem::Version
|
95
|
-
version: '3.
|
95
|
+
version: '3.5'
|
96
96
|
type: :development
|
97
97
|
prerelease: false
|
98
98
|
version_requirements: !ruby/object:Gem::Requirement
|
99
99
|
requirements:
|
100
100
|
- - "~>"
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version: '3.
|
102
|
+
version: '3.5'
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: simplecov
|
105
105
|
requirement: !ruby/object:Gem::Requirement
|