schema_plus_pg_indexes 0.1.7 → 0.1.8

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: 23c0466d72bdac73b797047b1b0db33bbb840672
4
- data.tar.gz: 51c899f934b0d2b480d63e2759b4b9d148b3351d
3
+ metadata.gz: 07fa2b71ce5644fe20cbee97ea3f62c18c608edf
4
+ data.tar.gz: 164420fd746ac63af76cf83348ed307b6d2c7047
5
5
  SHA512:
6
- metadata.gz: e1690a53c5d96bbdfa7f5a33a12db3a91f72c59c3907bee9908f1556bc83eaaa2c629080ac5ed5c9ee57989094fb27d63e43b40b70574b88e65bc13cc4ea1ce1
7
- data.tar.gz: b5fc2d3442f501ec154f79f8f2a0d018ca667ea11e266df1232fe2a45be825d3989234c540f31a60366009aaaf20c8e3fdda96f0bfb0a967bdf1bdeba64cc743
6
+ metadata.gz: 414e5cd0a8822d29a9c414e8eefab09dc6948b5c2ff9b8fba1c961a547f9d76d4efe1267bd658d1e603d80c36ff0e5f532ef137363033db7760b90fbae95f15b
7
+ data.tar.gz: 0ce973e0818352c72a27f2d98acd47e3d459c002f7fdb8b0f1a0a9b664b58046fb3b36ec2b97922ee81c56c05e05d229c098712a29a5a9d51836bfe5e3992125
data/README.md CHANGED
@@ -61,6 +61,7 @@ schema_plus_pg_indexes is tested on
61
61
 
62
62
  ## History
63
63
 
64
+ * v0.1.8 - Bug fix: expression with operator class (#7)
64
65
  * v0.1.7 - Bug fix: mix of columns & expressions (#5)
65
66
  * v0.1.6 - Bug fix: operator class & multiple columns (#4). Thanks to [@nbudin](https://github.com/nbudin)
66
67
  * v0.1.5 - Bug fix: `t.index` without column in `change_table`
@@ -14,7 +14,7 @@ module SchemaPlusPgIndexes
14
14
  index_dump.add_option "case_sensitive: false" unless index_def.case_sensitive?
15
15
  index_dump.add_option "expression: #{index_def.expression.inspect}" if index_def.expression and index_def.case_sensitive?
16
16
  unless index_def.operator_classes.blank?
17
- if index_def.columns.uniq.length == 1 && index_def.operator_classes.values.uniq.length == 1
17
+ if index_def.columns.uniq.length <= 1 && index_def.operator_classes.values.uniq.length == 1
18
18
  index_dump.add_option "operator_class: #{index_def.operator_classes.values.first.inspect}"
19
19
  else
20
20
  index_dump.add_option "operator_class: {" + index_def.operator_classes.map{|column, val| "#{column.inspect}=>#{val.inspect}"}.join(", ") + "}"
@@ -49,13 +49,15 @@ module SchemaPlusPgIndexes
49
49
  yield env
50
50
 
51
51
  if operator_classes and not operator_classes.is_a? Hash
52
- operator_classes = Hash[column_names.map {|name| [name, operator_classes]}]
52
+ val = operator_classes
53
+ operator_classes = Hash[column_names.map {|name| [name, val]}]
54
+ operator_classes[nil] = val if expression
53
55
  end
54
56
 
55
57
  if operator_classes or case_insensitive
56
58
  option_strings = Hash[column_names.map {|name| [name, '']}]
57
59
  (operator_classes||{}).stringify_keys.each do |column, opclass|
58
- option_strings[column] += " #{opclass}" if opclass
60
+ option_strings[column] += " #{opclass}" if opclass and column.present?
59
61
  end
60
62
  option_strings = connection.send :add_index_sort_order, option_strings, column_names, options
61
63
 
@@ -72,6 +74,7 @@ module SchemaPlusPgIndexes
72
74
  end
73
75
 
74
76
  if expression
77
+ expression = [expression, operator_classes[nil]].compact.join(' ') if operator_classes
75
78
  env.sql.columns = (env.sql.columns.split(/ *, */).reject{|col| expression =~ %r{\b#{col.gsub(/['"]/, '')}\b} } + [expression]).join(', ')
76
79
  end
77
80
  end
@@ -1,3 +1,3 @@
1
1
  module SchemaPlusPgIndexes
2
- VERSION = "0.1.7"
2
+ VERSION = "0.1.8"
3
3
  end
@@ -3,19 +3,13 @@ require 'spec_helper'
3
3
  describe "index" do
4
4
 
5
5
  let(:migration) { ::ActiveRecord::Migration }
6
- let(:connection) { ::ActiveRecord::Base.connection }
7
6
 
8
7
  describe "add_index" do
9
8
 
10
9
  class User < ::ActiveRecord::Base ; end
11
10
 
12
11
  after(:each) do
13
- migration.suppress_messages do
14
- User.indexes.each do |index|
15
- migration.remove_index :users, name: index.name, if_exists: true
16
- end
17
- User.reset_column_information
18
- end
12
+ User.reset_column_information
19
13
  end
20
14
 
21
15
  context "extra features" do
@@ -99,6 +99,13 @@ describe "Schema dump" do
99
99
  end
100
100
  end
101
101
 
102
+ it "should define expression with operator_class" do
103
+ with_index Post, :name => "expr_with_opclass", :expression => "upper(str_short || string_no_default)", :operator_class => 'text_pattern_ops' do
104
+ expect(dump_posts).to include(%q{t.index name: "expr_with_opclass", expression: "upper(((str_short)::text || (string_no_default)::text))", operator_class: "text_pattern_ops"})
105
+ end
106
+ end
107
+
108
+
102
109
  it "should define multi-column operator classes " do
103
110
  with_index Post, [:body, :string_no_default], :operator_class => {body: 'text_pattern_ops', string_no_default: 'varchar_pattern_ops' } do
104
111
  expect(dump_posts).to match(/body.*index:.*operator_class: {"body"=>"text_pattern_ops", "string_no_default"=>"varchar_pattern_ops"}/)
@@ -142,9 +149,7 @@ describe "Schema dump" do
142
149
  def with_index(*args)
143
150
  options = args.extract_options!
144
151
  model, columns = args
145
- ActiveRecord::Migration.suppress_messages do
146
- ActiveRecord::Migration.add_index(model.table_name, columns, options)
147
- end
152
+ ActiveRecord::Migration.add_index(model.table_name, columns, options)
148
153
  model.reset_column_information
149
154
  yield
150
155
  end
@@ -19,6 +19,9 @@ RSpec.configure do |config|
19
19
  config.warnings = true
20
20
  config.around(:each) do |example|
21
21
  ActiveRecord::Migration.suppress_messages do
22
+ ActiveRecord::Base.connection.tables.each do |table|
23
+ ActiveRecord::Migration.drop_table table, force: :cascade
24
+ end
22
25
  example.run
23
26
  end
24
27
  end
@@ -26,7 +29,7 @@ end
26
29
 
27
30
  def define_schema(&block)
28
31
  ActiveRecord::Schema.define do
29
- connection.tables.each do |table|
32
+ ActiveRecord::Base.connection.tables.each do |table|
30
33
  drop_table table, force: :cascade
31
34
  end
32
35
  instance_eval &block
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.7
4
+ version: 0.1.8
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 00:00:00.000000000 Z
11
+ date: 2015-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord