pg_search 0.6.0 → 0.6.1

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.
data/CHANGELOG.rdoc CHANGED
@@ -1,5 +1,10 @@
1
1
  = PgSearch
2
2
 
3
+ == 0.6.1
4
+
5
+ * Fix issue with Arel::InfixOperation that prevented #count from working,
6
+ breaking pagination.
7
+
3
8
  == 0.6.0
4
9
 
5
10
  * Drop support for Active Record 3.0.
data/Gemfile CHANGED
@@ -2,16 +2,9 @@ source "http://rubygems.org"
2
2
 
3
3
  gemspec
4
4
 
5
- gem "rake"
6
- gem "rdoc"
7
- gem "pry"
8
-
9
5
  gem 'pg', :platform => :ruby
10
6
  gem "activerecord-jdbcpostgresql-adapter", :platform => :jruby
11
7
 
12
- gem "rspec"
13
- gem "with_model"
14
-
15
8
  gem "activerecord", ENV["ACTIVE_RECORD_VERSION"] if ENV["ACTIVE_RECORD_VERSION"]
16
9
 
17
10
  gem 'coveralls', :require => false, :platform => :mri_20
data/lib/pg_search.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require "active_record"
2
2
  require "active_support/concern"
3
3
  require "active_support/core_ext/module/attribute_accessors"
4
+ require "active_support/core_ext/string/strip"
5
+ require "pg_search/extensions/arel"
4
6
 
5
7
  module PgSearch
6
8
  autoload :Configuration, "pg_search/configuration"
@@ -23,7 +23,7 @@ module PgSearch
23
23
  private
24
24
 
25
25
  def table_name
26
- @connection.quote_table_name(@model.table_name)
26
+ @model.quoted_table_name
27
27
  end
28
28
 
29
29
  def column_name
@@ -33,10 +33,6 @@ module PgSearch
33
33
  def expression
34
34
  full_name
35
35
  end
36
-
37
- def alias
38
- Configuration.alias(association.subselect_alias, @column_name)
39
- end
40
36
  end
41
37
  end
42
38
  end
@@ -0,0 +1,10 @@
1
+ require "arel/visitors/depth_first"
2
+
3
+ # Workaround for https://github.com/Casecommons/pg_search/issues/101
4
+ # Based on the solution from https://github.com/ernie/squeel/issues/122
5
+ Arel::Visitors::DepthFirst.class_eval do
6
+ unless method_defined?(:visit_Arel_Nodes_InfixOperation)
7
+ alias :visit_Arel_Nodes_InfixOperation :binary
8
+ end
9
+ end
10
+
@@ -26,8 +26,14 @@ module PgSearch
26
26
  end
27
27
 
28
28
  def add_normalization(original_sql)
29
- otherwise_normalized_sql = normalizer_to_wrap.add_normalization(original_sql)
30
- "pg_search_dmetaphone(#{otherwise_normalized_sql})"
29
+ otherwise_normalized_sql = Arel.sql(
30
+ normalizer_to_wrap.add_normalization(original_sql)
31
+ )
32
+
33
+ Arel::Nodes::NamedFunction.new(
34
+ "pg_search_dmetaphone",
35
+ [otherwise_normalized_sql]
36
+ ).to_sql
31
37
  end
32
38
 
33
39
  private
@@ -7,7 +7,7 @@ module PgSearch
7
7
  super
8
8
 
9
9
  if options[:prefix] && model.connection.send(:postgresql_version) < 80400
10
- raise PgSearch::NotSupportedForPostgresqlVersion.new(<<-MESSAGE.gsub /^\s*/, '')
10
+ raise PgSearch::NotSupportedForPostgresqlVersion.new(<<-MESSAGE.strip_heredoc)
11
11
  Sorry, {:using => {:tsearch => {:prefix => true}}} only works in PostgreSQL 8.4 and above.")
12
12
  MESSAGE
13
13
  end
@@ -30,20 +30,19 @@ module PgSearch
30
30
  def tsquery_for_term(term)
31
31
  sanitized_term = term.gsub(DISALLOWED_TSQUERY_CHARACTERS, " ")
32
32
 
33
- term_sql = normalize(connection.quote(sanitized_term))
33
+ term_sql = Arel.sql(normalize(connection.quote(sanitized_term)))
34
34
 
35
35
  # After this, the SQL expression evaluates to a string containing the term surrounded by single-quotes.
36
36
  # If :prefix is true, then the term will also have :* appended to the end.
37
- tsquery_sql = [
38
- connection.quote("' "),
39
- term_sql,
40
- connection.quote(" '"),
41
- (connection.quote(':*') if options[:prefix])
42
- ].compact.join(" || ")
37
+ terms = ["' ", term_sql, " '", (':*' if options[:prefix])].compact
38
+
39
+ tsquery_sql = terms.inject do |memo, term|
40
+ Arel::Nodes::InfixOperation.new("||", memo, term)
41
+ end
43
42
 
44
43
  Arel::Nodes::NamedFunction.new(
45
44
  "to_tsquery",
46
- [dictionary, Arel.sql(tsquery_sql)]
45
+ [dictionary, tsquery_sql]
47
46
  ).to_sql
48
47
  end
49
48
 
@@ -28,17 +28,17 @@ module PgSearch
28
28
  model.connection
29
29
  end
30
30
 
31
- REBUILD_SQL_TEMPLATE = <<-SQL
32
- INSERT INTO :documents_table (searchable_type, searchable_id, content, created_at, updated_at)
33
- SELECT :model_name AS searchable_type,
34
- :model_table.id AS searchable_id,
35
- (
36
- :content_expressions
37
- ) AS content,
38
- :current_time AS created_at,
39
- :current_time AS updated_at
40
- FROM :model_table
41
- SQL
31
+ REBUILD_SQL_TEMPLATE = <<-SQL.strip_heredoc
32
+ INSERT INTO :documents_table (searchable_type, searchable_id, content, created_at, updated_at)
33
+ SELECT :model_name AS searchable_type,
34
+ :model_table.id AS searchable_id,
35
+ (
36
+ :content_expressions
37
+ ) AS content,
38
+ :current_time AS created_at,
39
+ :current_time AS updated_at
40
+ FROM :model_table
41
+ SQL
42
42
 
43
43
  def rebuild_sql
44
44
  replacements.inject(REBUILD_SQL_TEMPLATE) do |sql, key|
@@ -8,7 +8,7 @@ module PgSearch
8
8
  return sql_expression unless config.ignore.include?(:accents)
9
9
 
10
10
  if config.postgresql_version < 90000
11
- raise PgSearch::NotSupportedForPostgresqlVersion.new(<<-MESSAGE.gsub /^\s*/, '')
11
+ raise PgSearch::NotSupportedForPostgresqlVersion.new(<<-MESSAGE.strip_heredoc)
12
12
  Sorry, {:ignoring => :accents} only works in PostgreSQL 9.0 and above.
13
13
  #{config.inspect}
14
14
  MESSAGE
@@ -5,9 +5,9 @@ namespace :pg_search do
5
5
  namespace :multisearch do
6
6
  desc "Rebuild PgSearch multisearch records for a given model"
7
7
  task :rebuild, [:model,:schema] => :environment do |task, args|
8
- raise ArgumentError, <<-MESSAGE unless args.model
9
- You must pass a model as an argument.
10
- Example: rake pg_search:multisearch:rebuild[BlogPost]
8
+ raise ArgumentError, <<-MESSAGE.strip_heredoc unless args.model
9
+ You must pass a model as an argument.
10
+ Example: rake pg_search:multisearch:rebuild[BlogPost]
11
11
  MESSAGE
12
12
  model_class = args.model.classify.constantize
13
13
  connection = PgSearch::Document.connection
@@ -1,3 +1,3 @@
1
1
  module PgSearch
2
- VERSION = "0.6.0"
2
+ VERSION = "0.6.1"
3
3
  end
data/pg_search.gemspec CHANGED
@@ -20,4 +20,12 @@ Gem::Specification.new do |s|
20
20
 
21
21
  s.add_dependency 'activerecord', '>=3.1'
22
22
  s.add_dependency 'activesupport', '>=3.1'
23
+ s.add_dependency 'arel'
24
+
25
+ s.add_development_dependency 'rake'
26
+ s.add_development_dependency 'rdoc'
27
+ s.add_development_dependency 'pry'
28
+ s.add_development_dependency 'rspec'
29
+ s.add_development_dependency 'with_model'
30
+ s.add_development_dependency 'will_paginate'
23
31
  end
@@ -0,0 +1,36 @@
1
+ require "spec_helper"
2
+
3
+ describe "pagination" do
4
+ describe "with will_paginate" do
5
+ require 'will_paginate/active_record'
6
+ with_model :PaginatedModel do
7
+ table do |t|
8
+ t.string :name
9
+ end
10
+
11
+ model do
12
+ include PgSearch
13
+ self.per_page = 2
14
+ pg_search_scope :search_name, :against => :name
15
+ end
16
+ end
17
+
18
+ it "is chainable before a search scope" do
19
+ better = PaginatedModel.create!(:name => "foo foo bar")
20
+ best = PaginatedModel.create!(:name => "foo foo foo")
21
+ good = PaginatedModel.create!(:name => "foo bar bar")
22
+
23
+ PaginatedModel.page(1).search_name("foo").should == [best, better]
24
+ PaginatedModel.page(2).search_name("foo").should == [good]
25
+ end
26
+
27
+ it "is chainable after a search scope" do
28
+ better = PaginatedModel.create!(:name => "foo foo bar")
29
+ best = PaginatedModel.create!(:name => "foo foo foo")
30
+ good = PaginatedModel.create!(:name => "foo bar bar")
31
+
32
+ PaginatedModel.search_name("foo").page(1).should == [best, better]
33
+ PaginatedModel.search_name("foo").page(2).should == [good]
34
+ end
35
+ end
36
+ end
@@ -623,9 +623,9 @@ describe "an Active Record model which includes PgSearch" do
623
623
  let!(:unexpected) { ModelWithTsvector.create!(:content => 'longcat is looooooooong') }
624
624
 
625
625
  before do
626
- ActiveRecord::Base.connection.execute <<-SQL
627
- UPDATE #{ModelWithTsvector.table_name}
628
- SET content_tsvector = to_tsvector('english'::regconfig, "#{ModelWithTsvector.table_name}"."content")
626
+ ActiveRecord::Base.connection.execute <<-SQL.strip_heredoc
627
+ UPDATE #{ModelWithTsvector.quoted_table_name}
628
+ SET content_tsvector = to_tsvector('english'::regconfig, #{ModelWithTsvector.quoted_table_name}."content")
629
629
  SQL
630
630
 
631
631
  ModelWithTsvector.pg_search_scope :search_by_content_with_tsvector,
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+
3
+ describe PgSearch::Configuration::Column do
4
+ describe "#full_name" do
5
+ with_model :Model do
6
+ table do |t|
7
+ t.string :name
8
+ end
9
+ end
10
+
11
+ it "returns the fully-qualified table and column name" do
12
+ column = described_class.new("name", nil, Model)
13
+ column.full_name.should == %Q{#{Model.quoted_table_name}."name"}
14
+ end
15
+ end
16
+
17
+ describe "#to_sql" do
18
+ with_model :Model do
19
+ table do |t|
20
+ t.string :name
21
+ end
22
+ end
23
+
24
+ it "returns an expression that casts the column to text and coalesces it with an empty string" do
25
+ column = described_class.new("name", nil, Model)
26
+ column.to_sql.should == %Q{coalesce(#{Model.quoted_table_name}."name"::text, '')}
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,51 @@
1
+ require "spec_helper"
2
+
3
+ describe PgSearch::Features::DMetaphone do
4
+ describe "#rank" do
5
+ with_model :Model do
6
+ table do |t|
7
+ t.string :name
8
+ t.text :content
9
+ end
10
+ end
11
+
12
+ it "returns an expression similar to a TSearch, but wraps the arguments in pg_search_dmetaphone()" do
13
+ query = "query"
14
+ columns = [
15
+ PgSearch::Configuration::Column.new(:name, nil, Model),
16
+ PgSearch::Configuration::Column.new(:content, nil, Model),
17
+ ]
18
+ options = {}
19
+ config = stub(:config, :ignore => [])
20
+ normalizer = PgSearch::Normalizer.new(config)
21
+
22
+ feature = described_class.new(query, options, columns, Model, normalizer)
23
+ feature.rank.to_sql.should ==
24
+ %Q{(ts_rank((to_tsvector('simple', pg_search_dmetaphone(coalesce(#{Model.quoted_table_name}."name"::text, ''))) || to_tsvector('simple', pg_search_dmetaphone(coalesce(#{Model.quoted_table_name}."content"::text, '')))), (to_tsquery('simple', ''' ' || pg_search_dmetaphone('query') || ' ''')), 0))}
25
+ end
26
+ end
27
+
28
+ describe "#conditions" do
29
+ with_model :Model do
30
+ table do |t|
31
+ t.string :name
32
+ t.text :content
33
+ end
34
+ end
35
+
36
+ it "returns an expression similar to a TSearch, but wraps the arguments in pg_search_dmetaphone()" do
37
+ query = "query"
38
+ columns = [
39
+ PgSearch::Configuration::Column.new(:name, nil, Model),
40
+ PgSearch::Configuration::Column.new(:content, nil, Model),
41
+ ]
42
+ options = {}
43
+ config = stub(:config, :ignore => [])
44
+ normalizer = PgSearch::Normalizer.new(config)
45
+
46
+ feature = described_class.new(query, options, columns, Model, normalizer)
47
+ feature.conditions.to_sql.should ==
48
+ %Q{((to_tsvector('simple', pg_search_dmetaphone(coalesce(#{Model.quoted_table_name}."name"::text, ''))) || to_tsvector('simple', pg_search_dmetaphone(coalesce(#{Model.quoted_table_name}."content"::text, '')))) @@ (to_tsquery('simple', ''' ' || pg_search_dmetaphone('query') || ' ''')))}
49
+ end
50
+ end
51
+ end
@@ -84,16 +84,16 @@ describe PgSearch::Multisearch::Rebuilder do
84
84
  time = DateTime.parse("2001-01-01")
85
85
  rebuilder = PgSearch::Multisearch::Rebuilder.new(Model, lambda { time } )
86
86
 
87
- expected_sql = <<-SQL
88
- INSERT INTO "pg_search_documents" (searchable_type, searchable_id, content, created_at, updated_at)
89
- SELECT 'Model' AS searchable_type,
90
- #{Model.quoted_table_name}.id AS searchable_id,
91
- (
92
- coalesce(#{Model.quoted_table_name}.name::text, '')
93
- ) AS content,
94
- '2001-01-01 00:00:00' AS created_at,
95
- '2001-01-01 00:00:00' AS updated_at
96
- FROM #{Model.quoted_table_name}
87
+ expected_sql = <<-SQL.strip_heredoc
88
+ INSERT INTO "pg_search_documents" (searchable_type, searchable_id, content, created_at, updated_at)
89
+ SELECT 'Model' AS searchable_type,
90
+ #{Model.quoted_table_name}.id AS searchable_id,
91
+ (
92
+ coalesce(#{Model.quoted_table_name}.name::text, '')
93
+ ) AS content,
94
+ '2001-01-01 00:00:00' AS created_at,
95
+ '2001-01-01 00:00:00' AS updated_at
96
+ FROM #{Model.quoted_table_name}
97
97
  SQL
98
98
 
99
99
  executed_sql = []
@@ -31,7 +31,7 @@ describe PgSearch::Multisearch do
31
31
 
32
32
  describe "cleaning up search documents for this model" do
33
33
  before do
34
- connection.execute <<-SQL
34
+ connection.execute <<-SQL.strip_heredoc
35
35
  INSERT INTO pg_search_documents
36
36
  (searchable_type, searchable_id, content, created_at, updated_at)
37
37
  VALUES
@@ -74,7 +74,7 @@ describe PgSearch::Multisearch do
74
74
  context "when the model implements .rebuild_pg_search_documents" do
75
75
  before do
76
76
  def model.rebuild_pg_search_documents
77
- connection.execute <<-SQL
77
+ connection.execute <<-SQL.strip_heredoc
78
78
  INSERT INTO pg_search_documents
79
79
  (searchable_type, searchable_id, content, created_at, updated_at)
80
80
  VALUES
@@ -119,17 +119,17 @@ describe PgSearch::Multisearch do
119
119
  end
120
120
 
121
121
  it "should generate the proper SQL code" do
122
- expected_sql = <<-SQL
123
- INSERT INTO #{PgSearch::Document.quoted_table_name} (searchable_type, searchable_id, content, created_at, updated_at)
124
- SELECT #{connection.quote(model.name)} AS searchable_type,
125
- #{model.quoted_table_name}.id AS searchable_id,
126
- (
127
- coalesce(#{model.quoted_table_name}.title::text, '')
128
- ) AS content,
129
- #{connection.quote(connection.quoted_date(now))} AS created_at,
130
- #{connection.quote(connection.quoted_date(now))} AS updated_at
131
- FROM #{model.quoted_table_name}
132
- SQL
122
+ expected_sql = <<-SQL.strip_heredoc
123
+ INSERT INTO #{PgSearch::Document.quoted_table_name} (searchable_type, searchable_id, content, created_at, updated_at)
124
+ SELECT #{connection.quote(model.name)} AS searchable_type,
125
+ #{model.quoted_table_name}.id AS searchable_id,
126
+ (
127
+ coalesce(#{model.quoted_table_name}.title::text, '')
128
+ ) AS content,
129
+ #{connection.quote(connection.quoted_date(now))} AS created_at,
130
+ #{connection.quote(connection.quoted_date(now))} AS updated_at
131
+ FROM #{model.quoted_table_name}
132
+ SQL
133
133
 
134
134
  statements = []
135
135
  connection.stub(:execute) { |sql| statements << sql }
@@ -146,17 +146,17 @@ INSERT INTO #{PgSearch::Document.quoted_table_name} (searchable_type, searchable
146
146
  end
147
147
 
148
148
  it "should generate the proper SQL code" do
149
- expected_sql = <<-SQL
150
- INSERT INTO #{PgSearch::Document.quoted_table_name} (searchable_type, searchable_id, content, created_at, updated_at)
151
- SELECT #{connection.quote(model.name)} AS searchable_type,
152
- #{model.quoted_table_name}.id AS searchable_id,
153
- (
154
- coalesce(#{model.quoted_table_name}.title::text, '') || ' ' || coalesce(#{model.quoted_table_name}.content::text, '')
155
- ) AS content,
156
- #{connection.quote(connection.quoted_date(now))} AS created_at,
157
- #{connection.quote(connection.quoted_date(now))} AS updated_at
158
- FROM #{model.quoted_table_name}
159
- SQL
149
+ expected_sql = <<-SQL.strip_heredoc
150
+ INSERT INTO #{PgSearch::Document.quoted_table_name} (searchable_type, searchable_id, content, created_at, updated_at)
151
+ SELECT #{connection.quote(model.name)} AS searchable_type,
152
+ #{model.quoted_table_name}.id AS searchable_id,
153
+ (
154
+ coalesce(#{model.quoted_table_name}.title::text, '') || ' ' || coalesce(#{model.quoted_table_name}.content::text, '')
155
+ ) AS content,
156
+ #{connection.quote(connection.quoted_date(now))} AS created_at,
157
+ #{connection.quote(connection.quoted_date(now))} AS updated_at
158
+ FROM #{model.quoted_table_name}
159
+ SQL
160
160
 
161
161
  statements = []
162
162
  connection.stub(:execute) { |sql| statements << sql }
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_search
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Grant Hutchins
@@ -9,36 +10,152 @@ authors:
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2013-04-02 00:00:00.000000000 Z
13
+ date: 2013-04-08 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: activerecord
16
17
  requirement: !ruby/object:Gem::Requirement
18
+ none: false
17
19
  requirements:
18
- - - '>='
20
+ - - ! '>='
19
21
  - !ruby/object:Gem::Version
20
22
  version: '3.1'
21
23
  type: :runtime
22
24
  prerelease: false
23
25
  version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
24
27
  requirements:
25
- - - '>='
28
+ - - ! '>='
26
29
  - !ruby/object:Gem::Version
27
30
  version: '3.1'
28
31
  - !ruby/object:Gem::Dependency
29
32
  name: activesupport
30
33
  requirement: !ruby/object:Gem::Requirement
34
+ none: false
31
35
  requirements:
32
- - - '>='
36
+ - - ! '>='
33
37
  - !ruby/object:Gem::Version
34
38
  version: '3.1'
35
39
  type: :runtime
36
40
  prerelease: false
37
41
  version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
38
43
  requirements:
39
- - - '>='
44
+ - - ! '>='
40
45
  - !ruby/object:Gem::Version
41
46
  version: '3.1'
47
+ - !ruby/object:Gem::Dependency
48
+ name: arel
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: rake
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ type: :development
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ - !ruby/object:Gem::Dependency
80
+ name: rdoc
81
+ requirement: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ type: :development
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: pry
97
+ requirement: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ - !ruby/object:Gem::Dependency
128
+ name: with_model
129
+ requirement: !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ type: :development
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ - !ruby/object:Gem::Dependency
144
+ name: will_paginate
145
+ requirement: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ! '>='
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ type: :development
152
+ prerelease: false
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
42
159
  description: PgSearch builds Active Record named scopes that take advantage of PostgreSQL's
43
160
  full text search
44
161
  email:
@@ -64,6 +181,7 @@ files:
64
181
  - lib/pg_search/configuration/column.rb
65
182
  - lib/pg_search/configuration/foreign_column.rb
66
183
  - lib/pg_search/document.rb
184
+ - lib/pg_search/extensions/arel.rb
67
185
  - lib/pg_search/features.rb
68
186
  - lib/pg_search/features/dmetaphone.rb
69
187
  - lib/pg_search/features/feature.rb
@@ -85,8 +203,11 @@ files:
85
203
  - lib/pg_search/version.rb
86
204
  - pg_search.gemspec
87
205
  - spec/integration/associations_spec.rb
206
+ - spec/integration/pagination_spec.rb
88
207
  - spec/integration/pg_search_spec.rb
208
+ - spec/lib/pg_search/configuration/column_spec.rb
89
209
  - spec/lib/pg_search/document_spec.rb
210
+ - spec/lib/pg_search/features/dmetaphone_spec.rb
90
211
  - spec/lib/pg_search/features/trigram_spec.rb
91
212
  - spec/lib/pg_search/features/tsearch_spec.rb
92
213
  - spec/lib/pg_search/multisearch/rebuilder_spec.rb
@@ -103,32 +224,36 @@ files:
103
224
  homepage: https://github.com/Casecommons/pg_search
104
225
  licenses:
105
226
  - MIT
106
- metadata: {}
107
227
  post_install_message:
108
228
  rdoc_options: []
109
229
  require_paths:
110
230
  - lib
111
231
  required_ruby_version: !ruby/object:Gem::Requirement
232
+ none: false
112
233
  requirements:
113
- - - '>='
234
+ - - ! '>='
114
235
  - !ruby/object:Gem::Version
115
236
  version: '0'
116
237
  required_rubygems_version: !ruby/object:Gem::Requirement
238
+ none: false
117
239
  requirements:
118
- - - '>='
240
+ - - ! '>='
119
241
  - !ruby/object:Gem::Version
120
242
  version: '0'
121
243
  requirements: []
122
244
  rubyforge_project:
123
- rubygems_version: 2.0.3
245
+ rubygems_version: 1.8.25
124
246
  signing_key:
125
- specification_version: 4
247
+ specification_version: 3
126
248
  summary: PgSearch builds Active Record named scopes that take advantage of PostgreSQL's
127
249
  full text search
128
250
  test_files:
129
251
  - spec/integration/associations_spec.rb
252
+ - spec/integration/pagination_spec.rb
130
253
  - spec/integration/pg_search_spec.rb
254
+ - spec/lib/pg_search/configuration/column_spec.rb
131
255
  - spec/lib/pg_search/document_spec.rb
256
+ - spec/lib/pg_search/features/dmetaphone_spec.rb
132
257
  - spec/lib/pg_search/features/trigram_spec.rb
133
258
  - spec/lib/pg_search/features/tsearch_spec.rb
134
259
  - spec/lib/pg_search/multisearch/rebuilder_spec.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 953137586cb6148bd40249e053348adc9d1e4c4e
4
- data.tar.gz: bd82cbede7a515ea77280bb2667617abcbb3ba6a
5
- SHA512:
6
- metadata.gz: 4054d7eb7e376aee61ed698ccda4f8573752823e4b8de9e7bc192eefc84845aa2f3b0162f8de12704f5696367187bc1db2202f03c28aca1816128145e6aeebf9
7
- data.tar.gz: 3a2031283e5b9a8e80e19607dc1b6bf044c4bd9340febdc0fd6606dffeff9729be7a36e214dddd877a915e6ae02e61b9099aab4b6d972d8a43afd314fc218dd0