schema_plus_pg_indexes 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
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