scoped_search 4.1.6 → 4.1.7

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: c94c65fc191d2afdddd82f3177121d2ade7e6238
4
- data.tar.gz: 36dd864d06aafd40bd3015184a17222a92d5627f
3
+ metadata.gz: 4d5d5ddd90a25434d39644b46bf7ff531a4c3b9f
4
+ data.tar.gz: c6f84e3fa52f86b25d03b0ec6a0cb61fb0be79e9
5
5
  SHA512:
6
- metadata.gz: 2a41edacae0b5140f56dc60bc921c8afb3349132b9ad3453313fc407abbda58b251c08d1da8d56706f9307520882e9e8006f18147833c91b7e3d0995962d843e
7
- data.tar.gz: 31932dcd317193df257a4d0fd0c46fea28866e7670a0cfbd1d840d4477ada8381906d5f83b9289b322de3bbc44048ec249d9bf6af67f605bfc76589be9ccc7e3
6
+ metadata.gz: e798cdc07468120499ae613122e4a96d6e300998cf3868af27e4df65204af23a28aed861cb3144a7b7bdf44097b5024684b91d0db1a9becdb0397c73d0e39cc6
7
+ data.tar.gz: 0da17cd812a2ca5f2802e3cff5835317117426530707d6af6dc1d1d093a9efac13378d1d781b8a1512fd86ca6ab969ef6fe10be6ac6e30356ec988a040cd49d4
@@ -14,8 +14,10 @@ rvm:
14
14
  - "2.0"
15
15
  - "2.1"
16
16
  - "2.2.2"
17
- - "2.3.1"
17
+ - "2.3.7"
18
18
  - "2.4.0"
19
+ - "2.5.0"
20
+ - "2.6.0"
19
21
  - ruby-head
20
22
  - jruby-19mode
21
23
  - jruby-head
@@ -24,6 +26,8 @@ gemfile:
24
26
  - Gemfile.activerecord42
25
27
  - Gemfile.activerecord50
26
28
  - Gemfile.activerecord51
29
+ - Gemfile.activerecord52
30
+ - Gemfile.activerecord52_with_activesupport52
27
31
 
28
32
  matrix:
29
33
  allow_failures:
@@ -39,3 +43,12 @@ matrix:
39
43
  gemfile: Gemfile.activerecord51
40
44
  - rvm: "2.1"
41
45
  gemfile: Gemfile.activerecord51
46
+ - rvm: "2.0"
47
+ gemfile: Gemfile.activerecord52
48
+ - rvm: "2.1"
49
+ gemfile: Gemfile.activerecord52
50
+ - rvm: "2.0"
51
+ gemfile: Gemfile.activerecord52_with_activesupport52
52
+ - rvm: "2.1"
53
+ gemfile: Gemfile.activerecord52_with_activesupport52
54
+
@@ -8,6 +8,12 @@ Please add an entry to the "Unreleased changes" section in your pull requests.
8
8
 
9
9
  - Nothing yet
10
10
 
11
+ === Version 4.1.7
12
+
13
+ - When Active Support is available, we parse time respecting current time zone
14
+ - Allow dots in rename definitions
15
+ - Accept extra value_filter in `complete_for`
16
+
11
17
  === Version 4.1.6
12
18
 
13
19
  - Support for UUID columns on PostgreSQL (#184)
@@ -0,0 +1,17 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
3
+
4
+ gem 'actionview', '~> 5.2.0'
5
+ gem 'activerecord', '~> 5.2.0'
6
+
7
+ platforms :jruby do
8
+ gem 'activerecord-jdbcsqlite3-adapter'
9
+ gem 'activerecord-jdbcmysql-adapter'
10
+ gem 'activerecord-jdbcpostgresql-adapter'
11
+ end
12
+
13
+ platforms :ruby do
14
+ gem 'sqlite3', '~> 1.3.6'
15
+ gem 'mysql2', '>= 0.3.18', '< 0.5'
16
+ gem 'pg', '~> 0.18'
17
+ end
@@ -0,0 +1,18 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
3
+
4
+ gem 'actionview', '~> 5.2.0'
5
+ gem 'activerecord', '~> 5.2.0'
6
+ gem 'activesupport', '~> 5.2.0'
7
+
8
+ platforms :jruby do
9
+ gem 'activerecord-jdbcsqlite3-adapter'
10
+ gem 'activerecord-jdbcmysql-adapter'
11
+ gem 'activerecord-jdbcpostgresql-adapter'
12
+ end
13
+
14
+ platforms :ruby do
15
+ gem 'sqlite3', '~> 1.3.6'
16
+ gem 'mysql2', '>= 0.3.18', '< 0.5'
17
+ gem 'pg', '~> 0.18'
18
+ end
@@ -208,6 +208,7 @@ module ScopedSearch
208
208
  def complete_value_from_db(field, special_values, val)
209
209
  count = 20 - special_values.count
210
210
  completer_scope(field)
211
+ .where(@options[:value_filter])
211
212
  .where(value_conditions(field.quoted_field, val))
212
213
  .select(field.quoted_field)
213
214
  .limit(count)
@@ -238,6 +238,9 @@ module ScopedSearch
238
238
  if field.nil?
239
239
  dotted = name.to_s.split('.')[0]
240
240
  field = fields[dotted.to_sym] unless dotted.blank?
241
+ if field && field.key_relation.nil?
242
+ return nil
243
+ end
241
244
  end
242
245
  field
243
246
  end
@@ -275,6 +278,8 @@ module ScopedSearch
275
278
  # Try to parse a string as a datetime.
276
279
  # Supported formats are Today, Yesterday, Sunday, '1 day ago', '2 hours ago', '3 months ago', '4 weeks from now', 'Jan 23, 2004'
277
280
  # And many more formats that are documented in Ruby DateTime API Doc.
281
+ # In case Time responds to #zone, we know this is Rails environment and we can use Time.zone.parse. The benefit is that the
282
+ # current timezone is respected and does not have to be specified explicitly. That way even relative dates work as expected.
278
283
  def parse_temporal(value)
279
284
  return Date.current if value =~ /\btoday\b/i
280
285
  return 1.day.ago.to_date if value =~ /\byesterday\b/i
@@ -283,7 +288,12 @@ module ScopedSearch
283
288
  return (eval($1.strip.gsub(/\s+/,'.').downcase)).to_date if value =~ /\A\s*(\d+\s+\b(?:days?|weeks?|months?|years?)\b\s+\bago)\b\s*\z/i
284
289
  return (eval($1.strip.gsub(/from\s+now/i,'from_now').gsub(/\s+/,'.').downcase)).to_datetime if value =~ /\A\s*(\d+\s+\b(?:hours?|minutes?)\b\s+\bfrom\s+now)\b\s*\z/i
285
290
  return (eval($1.strip.gsub(/from\s+now/i,'from_now').gsub(/\s+/,'.').downcase)).to_date if value =~ /\A\s*(\d+\s+\b(?:days?|weeks?|months?|years?)\b\s+\bfrom\s+now)\b\s*\z/i
286
- DateTime.parse(value, true) rescue nil
291
+ if Time.respond_to?(:zone) && !Time.zone.nil?
292
+ parsed = Time.zone.parse(value) rescue nil
293
+ parsed && parsed.to_datetime
294
+ else
295
+ DateTime.parse(value, true) rescue nil
296
+ end
287
297
  end
288
298
 
289
299
  # Returns a list of fields that should be searched on by default.
@@ -1,3 +1,3 @@
1
1
  module ScopedSearch
2
- VERSION = "4.1.6"
2
+ VERSION = "4.1.7"
3
3
  end
@@ -17,6 +17,13 @@ ScopedSearch::RSpec::Database.test_databases.each do |db|
17
17
  t.string :other_c
18
18
  end
19
19
 
20
+ ActiveRecord::Migration.create_table(:quxes, :force => true) do |t|
21
+ t.string :related
22
+ t.string :other_a
23
+ t.string :other_b
24
+ t.string :other_c
25
+ end
26
+
20
27
  ActiveRecord::Migration.create_table(:foos, :force => true) do |t|
21
28
  t.string :string
22
29
  t.string :another
@@ -25,6 +32,7 @@ ScopedSearch::RSpec::Database.test_databases.each do |db|
25
32
  t.integer :int
26
33
  t.date :date
27
34
  t.integer :unindexed
35
+ t.integer :qux_id
28
36
 
29
37
  if on_postgresql?
30
38
  t.uuid :uuid
@@ -37,8 +45,13 @@ ScopedSearch::RSpec::Database.test_databases.each do |db|
37
45
  belongs_to :foo
38
46
  end
39
47
 
48
+ class ::Qux < ActiveRecord::Base
49
+ has_many :foos
50
+ end
51
+
40
52
  class ::Foo < ActiveRecord::Base
41
53
  has_many :bars
54
+ belongs_to :qux
42
55
  default_scope { order(:string) }
43
56
 
44
57
  scoped_search :on => [:string, :date, :uuid]
@@ -55,7 +68,10 @@ ScopedSearch::RSpec::Database.test_databases.each do |db|
55
68
  class ::Infoo < ::Foo
56
69
  end
57
70
 
58
- @foo_1 = Foo.create!(:string => 'foo', :another => 'temp 1', :explicit => 'baz', :int => 9 , :date => 'February 8, 2011' , :unindexed => 10)
71
+ @qux_1 = Qux.create!()
72
+ @qux_2 = Qux.create!()
73
+ @foo_1 = Foo.create!(:string => 'foo', :another => 'temp 1', :explicit => 'baz', :int => 9 , :date => 'February 8, 2011' , :unindexed => 10, :qux => @qux_1)
74
+ @foo_2 = Foo.create!(:string => 'foo', :another => 'temp 2', :explicit => 'baz', :int => 10 , :date => 'February 8, 2011' , :unindexed => 10, :qux => @qux_2)
59
75
  Foo.create!(:string => 'bar', :another => 'temp "2"', :explicit => 'baz', :int => 22 , :date => 'February 10, 2011', :unindexed => 10)
60
76
  Foo.create!(:string => 'baz', :another => nil, :explicit => nil , :int => nil, :date => nil , :unindexed => nil)
61
77
  20.times { Foo.create!(:explicit => "aaa") }
@@ -242,5 +258,14 @@ ScopedSearch::RSpec::Database.test_databases.each do |db|
242
258
  Foo.complete_for('int > 2').first.should match(/22/)
243
259
  end
244
260
  end
261
+
262
+ context 'autocompleting with value_filter' do
263
+ it 'should return filtered values' do
264
+ Foo.complete_for('int =', value_filter: { qux_id: @qux_1.id }).should == ['int = 9']
265
+ end
266
+ it 'should return filtered for invalid value' do
267
+ Foo.complete_for('int =', value_filter: { qux_id: 99 }).should == []
268
+ end
269
+ end
245
270
  end
246
271
  end
@@ -33,6 +33,7 @@ require "spec_helper"
33
33
  has_many :keys, :through => :facts
34
34
 
35
35
  scoped_search :relation => :facts, :on => :value, :rename => :facts, :in_key => :keys, :on_key => :name, :complete_value => true
36
+ scoped_search :relation => :facts, :on => :value, :rename => 'myfacts.value', :aliases => ['prefixed', 'prefixed.value']
36
37
  end
37
38
  class ::MyItem < ::Item
38
39
  end
@@ -102,6 +103,20 @@ require "spec_helper"
102
103
  it "should find all bars with a fact name color and fact value gold of descendant class" do
103
104
  MyItem.search_for('facts.color = gold').first.name.should eql('barbary')
104
105
  end
106
+
107
+ describe 'with prefixed aliases' do
108
+ it 'should search by the prefix' do
109
+ Item.search_for('prefixed = green').length.should == 1
110
+ end
111
+
112
+ it 'should search by the full length variant' do
113
+ Item.search_for('prefixed.value = green').length.should == 1
114
+ end
115
+
116
+ it 'should not search by just any key with common prefix' do
117
+ proc { Item.search_for('prefixed.something_which_is_not_defined = green') }.should raise_error(ScopedSearch::QueryNotSupported)
118
+ end
119
+ end
105
120
  end
106
121
  end
107
122
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scoped_search
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.6
4
+ version: 4.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Amos Benari
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2018-11-21 00:00:00.000000000 Z
13
+ date: 2019-05-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord
@@ -85,6 +85,8 @@ files:
85
85
  - Gemfile.activerecord42
86
86
  - Gemfile.activerecord50
87
87
  - Gemfile.activerecord51
88
+ - Gemfile.activerecord52
89
+ - Gemfile.activerecord52_with_activesupport52
88
90
  - LICENSE
89
91
  - README.rdoc
90
92
  - Rakefile