schema_plus_pg_indexes 0.1.1 → 0.1.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ab9e97841907e541e956b5913588e9da67ac61a3
4
- data.tar.gz: 24f847eed723f93c188de98e38bdf32380a1b681
3
+ metadata.gz: b2b5b828916853a511caa4f8b19f8a7e79fe8442
4
+ data.tar.gz: 5ff7110ccc48476917619787863700670b89c0f7
5
5
  SHA512:
6
- metadata.gz: 7b37d277f416c7bbbcafe1228cf0e96d8d7cc11f10d3e880076c587eef9a2d0d9e159091ed7d69f372bea5cc752d86e01796ea7019eabbc67c16ea27413c0f42
7
- data.tar.gz: c162ca9beb5865f541193730ba48d1bb28566c8a874cbc45fe851b60ee4521d6e3f7c1488e9f7b0a6898669b8fc1fa88cb8ad04d223d4fd46ed13d97a77a5448
6
+ metadata.gz: bbab6a29c45ba788aaf81951efa439b3e9ce2f4de676db318393a1edf08fdeea3e3d3d0098cbe986e912ef6381f20e5850829235e3d097abc52522e7a1abbdd8
7
+ data.tar.gz: 9ab3c857047c7e6627e3d0888aef4c9b6060f63810e72c2994d05673eb659d52deeb243a98535e9f3861a8780af5a4663dd299b5f7fd53c3fe300299a5eab065
data/.travis.yml CHANGED
@@ -8,7 +8,7 @@ rvm:
8
8
  - 1.9.3
9
9
  - 2.1.5
10
10
  gemfile:
11
- - gemfiles/rails-4.2/Gemfile.postgresql
11
+ - gemfiles/activerecord-4.2/Gemfile.postgresql
12
12
  env: POSTGRESQL_DB_USER=postgres
13
13
  addons:
14
14
  postgresql: '9.3'
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
1
  source "http://rubygems.org"
2
2
 
3
3
  gemspec
4
+
5
+ File.exist?(gemfile_local = File.expand_path('../Gemfile.local', __FILE__)) and eval File.read(gemfile_local), binding, gemfile_local
data/README.md CHANGED
@@ -33,11 +33,25 @@ schema_plus_pg_indexes is tested on
33
33
 
34
34
  <!-- SCHEMA_DEV: MATRIX - begin -->
35
35
  <!-- These lines are auto-generated by schema_dev based on schema_dev.yml -->
36
- * ruby **1.9.3** with rails **4.2**, using **postgresql**
37
- * ruby **2.1.5** with rails **4.2**, using **postgresql**
36
+ * ruby **1.9.3** with activerecord **4.2**, using **postgresql**
37
+ * ruby **2.1.5** with activerecord **4.2**, using **postgresql**
38
38
 
39
39
  <!-- SCHEMA_DEV: MATRIX - end -->
40
40
 
41
+ ## Deprecations
42
+
43
+ SchemaPlus 1.8.x provided some options and accessors that are now available
44
+ in rails 4.2, in slightly different form. SchemaPlusPgIndexes supports the
45
+ SchemaPlus 1.8.x form but issues deprecation warnings in favor of the rails
46
+ form:
47
+
48
+ * Index definition deprecates these options:
49
+ * `:conditions` => `:where`
50
+ * `:kind` => `:using`
51
+
52
+ * `IndexDefinition` deprecates accessors:
53
+ * `#conditions` in favor of `#where`
54
+ * `#kind` in favor of `#using.to_s`
41
55
 
42
56
  ## History
43
57
 
@@ -1,3 +1,3 @@
1
1
  eval File.read File.expand_path('../../Gemfile.base', __FILE__)
2
2
 
3
- gem "rails", "~> 4.2.0"
3
+ gem "activerecord", "~> 4.2.0"
@@ -3,15 +3,10 @@ module SchemaPlusPgIndexes
3
3
  module Postgresql
4
4
  module Dumper
5
5
 
6
- def self.insert
7
- SchemaMonkey::Middleware::Dumper::Indexes.append DumpExtensions
8
- SchemaMonkey::Middleware::Dumper::Table.append InlineIndexes
9
- end
10
-
11
- class DumpExtensions < SchemaMonkey::Middleware::Base
12
- def call(env)
13
- continue env
6
+ module Indexes
14
7
 
8
+ # Dump index extensions
9
+ def after(env)
15
10
  index_defs = Dumper.get_index_defiinitions(env, env.table)
16
11
 
17
12
  env.table.indexes.each do |index_dump|
@@ -32,10 +27,10 @@ module SchemaPlusPgIndexes
32
27
  end
33
28
  end
34
29
 
35
- class InlineIndexes < SchemaMonkey::Middleware::Base
36
- def call(env)
37
- continue env
30
+ module Table
38
31
 
32
+ # Move index definitions inline
33
+ def after(env)
39
34
  index_defs = Dumper.get_index_defiinitions(env, env.table)
40
35
 
41
36
  env.table.indexes.select(&its.columns.blank?).each do |index|
@@ -7,19 +7,20 @@ module SchemaPlusPgIndexes
7
7
  SchemaMonkey::Middleware::Migration::IndexComponentsSql.append DefineExtensions
8
8
  end
9
9
 
10
- class DeprecateArgs < SchemaMonkey::Middleware::Base
11
- def call(env)
10
+ module Index
11
+ # Deprecate args
12
+ def before(env)
12
13
  {:conditions => :where, :kind => :using}.each do |deprecated, proper|
13
14
  if env.options[deprecated]
14
15
  ActiveSupport::Deprecation.warn "ActiveRecord index option #{deprecated.inspect} is deprecated, use #{proper.inspect} instead"
15
16
  env.options[proper] = env.options.delete(deprecated)
16
17
  end
17
18
  end
18
- continue env
19
19
  end
20
20
  end
21
21
 
22
- class DefineExtensions < SchemaMonkey::Middleware::Base
22
+ module IndexComponentsSql
23
+
23
24
  # SchemaPlusPgIndexes provides the following extra options for PostgreSQL
24
25
  # indexes:
25
26
  # * +:expression+ - SQL expression to index. column_name can be nil or ommitted, in which case :name must be provided
@@ -33,7 +34,7 @@ module SchemaPlusPgIndexes
33
34
  # using <tt>:expression</tt>, this raises an ArgumentError if both
34
35
  # are specified simultaneously.
35
36
  #
36
- def call(env)
37
+ def around(env)
37
38
  options = env.options
38
39
  column_names = env.column_names
39
40
  table_name = env.table_name
@@ -61,7 +62,7 @@ module SchemaPlusPgIndexes
61
62
  end
62
63
  end
63
64
 
64
- continue env
65
+ yield env
65
66
 
66
67
  if operator_classes and not operator_classes.is_a? Hash
67
68
  operator_classes = Hash[column_names.map {|name| [name, operator_classes]}]
@@ -2,11 +2,7 @@ module SchemaPlusPgIndexes
2
2
  module Middleware
3
3
  module Postgresql
4
4
  module Query
5
- def self.insert
6
- SchemaMonkey::Middleware::Query::Indexes.append LookupExtensions
7
- end
8
-
9
- class LookupExtensions < SchemaMonkey::Middleware::Base
5
+ module Indexes
10
6
 
11
7
  def get_opclass_names(env, opclasses)
12
8
  @opclass_names ||= {}
@@ -21,7 +17,7 @@ module SchemaPlusPgIndexes
21
17
  end
22
18
  end
23
19
 
24
- def call(env)
20
+ def implement(env)
25
21
  # Ideally we'd let AR do its stuff and then add the extras.
26
22
  #
27
23
  # But one of the extras is expressions. AR completely strips out
@@ -38,24 +34,21 @@ module SchemaPlusPgIndexes
38
34
  # query we have the opportunity to handle tables of the form
39
35
  # 'namespace.tablename'
40
36
  #
41
- # So, we use our code and DO NOT DO:
42
- #
43
- # continue env
44
- #
45
- result = env.connection.query(<<-SQL, 'SCHEMA')
37
+ # So, this replacs the AR implementation
46
38
 
47
- SELECT distinct i.relname, d.indisunique, d.indkey, pg_get_indexdef(d.indexrelid), t.oid,
48
- m.amname, pg_get_expr(d.indpred, t.oid) as conditions, pg_get_expr(d.indexprs, t.oid) as expression,
49
- d.indclass
50
- FROM pg_class t
51
- INNER JOIN pg_index d ON t.oid = d.indrelid
52
- INNER JOIN pg_class i ON d.indexrelid = i.oid
53
- INNER JOIN pg_am m ON i.relam = m.oid
54
- WHERE i.relkind = 'i'
55
- AND d.indisprimary = 'f'
56
- AND t.relname = '#{table_name_without_namespace(env.table_name)}'
57
- AND i.relnamespace IN (SELECT oid FROM pg_namespace WHERE nspname = #{namespace_sql(env.table_name)} )
58
- ORDER BY i.relname
39
+ result = env.connection.query(<<-SQL, 'SCHEMA')
40
+ SELECT distinct i.relname, d.indisunique, d.indkey, pg_get_indexdef(d.indexrelid), t.oid,
41
+ m.amname, pg_get_expr(d.indpred, t.oid) as conditions, pg_get_expr(d.indexprs, t.oid) as expression,
42
+ d.indclass
43
+ FROM pg_class t
44
+ INNER JOIN pg_index d ON t.oid = d.indrelid
45
+ INNER JOIN pg_class i ON d.indexrelid = i.oid
46
+ INNER JOIN pg_am m ON i.relam = m.oid
47
+ WHERE i.relkind = 'i'
48
+ AND d.indisprimary = 'f'
49
+ AND t.relname = '#{table_name_without_namespace(env.table_name)}'
50
+ AND i.relnamespace IN (SELECT oid FROM pg_namespace WHERE nspname = #{namespace_sql(env.table_name)} )
51
+ ORDER BY i.relname
59
52
  SQL
60
53
 
61
54
  env.index_definitions += result.map do |(index_name, unique, indkey, inddef, oid, using, conditions, expression, indclass)|
@@ -63,10 +56,10 @@ module SchemaPlusPgIndexes
63
56
  opclasses = indclass.split(" ")
64
57
 
65
58
  rows = env.connection.query(<<-SQL, 'SCHEMA')
66
- SELECT CAST(a.attnum as VARCHAR), a.attname, t.typname
67
- FROM pg_attribute a
68
- INNER JOIN pg_type t ON a.atttypid = t.oid
69
- WHERE a.attrelid = #{oid}
59
+ SELECT CAST(a.attnum as VARCHAR), a.attname, t.typname
60
+ FROM pg_attribute a
61
+ INNER JOIN pg_type t ON a.atttypid = t.oid
62
+ WHERE a.attrelid = #{oid}
70
63
  SQL
71
64
  columns = {}
72
65
  types = {}
@@ -1,3 +1,3 @@
1
1
  module SchemaPlusPgIndexes
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/schema_dev.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  ruby:
2
2
  - 1.9.3
3
3
  - 2.1.5
4
- rails:
4
+ activerecord:
5
5
  - 4.2
6
6
  db:
7
7
  - postgresql
@@ -18,13 +18,13 @@ 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_monkey", "~> 0.3"
21
+ spec.add_dependency "schema_monkey", "~> 1.0", ">= 1.0.1"
22
22
  spec.add_dependency "schema_plus_indexes", "~> 0.1"
23
23
 
24
24
  spec.add_development_dependency "bundler", "~> 1.7"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
26
26
  spec.add_development_dependency "rspec", "~> 3.0.0"
27
- spec.add_development_dependency "schema_dev", "~> 2.0", ">= 2.0.3"
27
+ spec.add_development_dependency "schema_dev", "~> 3.0"
28
28
  spec.add_development_dependency "simplecov"
29
29
  spec.add_development_dependency "simplecov-gem-profile"
30
30
  end
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.1
4
+ version: 0.1.2
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-01-26 00:00:00.000000000 Z
11
+ date: 2015-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -30,14 +30,20 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.3'
33
+ version: '1.0'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 1.0.1
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
41
  - - "~>"
39
42
  - !ruby/object:Gem::Version
40
- version: '0.3'
43
+ version: '1.0'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 1.0.1
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: schema_plus_indexes
43
49
  requirement: !ruby/object:Gem::Requirement
@@ -100,20 +106,14 @@ dependencies:
100
106
  requirements:
101
107
  - - "~>"
102
108
  - !ruby/object:Gem::Version
103
- version: '2.0'
104
- - - ">="
105
- - !ruby/object:Gem::Version
106
- version: 2.0.3
109
+ version: '3.0'
107
110
  type: :development
108
111
  prerelease: false
109
112
  version_requirements: !ruby/object:Gem::Requirement
110
113
  requirements:
111
114
  - - "~>"
112
115
  - !ruby/object:Gem::Version
113
- version: '2.0'
114
- - - ">="
115
- - !ruby/object:Gem::Version
116
- version: 2.0.3
116
+ version: '3.0'
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: simplecov
119
119
  requirement: !ruby/object:Gem::Requirement
@@ -156,8 +156,8 @@ files:
156
156
  - README.md
157
157
  - Rakefile
158
158
  - gemfiles/Gemfile.base
159
- - gemfiles/rails-4.2/Gemfile.base
160
- - gemfiles/rails-4.2/Gemfile.postgresql
159
+ - gemfiles/activerecord-4.2/Gemfile.base
160
+ - gemfiles/activerecord-4.2/Gemfile.postgresql
161
161
  - lib/schema_plus_pg_indexes.rb
162
162
  - lib/schema_plus_pg_indexes/active_record/connection_adapters/index_definition.rb
163
163
  - lib/schema_plus_pg_indexes/middleware/postgresql/dumper.rb