default_where 2.1.0 → 2.2.0
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 +5 -5
- data/README.md +35 -18
- data/lib/default_where.rb +12 -6
- data/lib/default_where/like.rb +5 -1
- data/lib/default_where/not.rb +6 -1
- data/lib/default_where/range.rb +5 -1
- data/lib/default_where/version.rb +1 -1
- data/test/database.yml +16 -0
- data/test/default_where_test.rb +1 -1
- data/test/helper.rb +24 -0
- metadata +35 -5
- data/test/test_helper.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2b85a4951acd26f1a6797d490d439eee08d8c67e3ffb85b448b575e397944198
|
4
|
+
data.tar.gz: 4170d4c7ef435d25c74ba47baf650d55b2bf452552be983a853df4be470a7034
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fdd9c0a69cb31188ce01230ace81e618e4c14ad92f88f9e6622d2857c253ca6363c34d17bd5c1269cf8a7c7f7338e4a4d463cfde03950616e274ad6dd6129de3
|
7
|
+
data.tar.gz: eb48499fae1cbe71cb4adb659982b31145a1f29a3d22ce950e25735ac4a2df6e3614641b9b419da35e677a75b84c22358a166a0da2abaaa77857f18613c70a40
|
data/README.md
CHANGED
@@ -2,12 +2,13 @@
|
|
2
2
|
|
3
3
|
This Library set default params process for where query in ActiveRecord
|
4
4
|
|
5
|
+
It's a wise decision to use `default_where` with [default_form](https://github.com/qinmingyuan/default_form) to replace `ransack`
|
6
|
+
|
5
7
|
## Features and Usage
|
6
8
|
|
7
9
|
### Normal equal params
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
+
* Params:
|
11
12
|
```ruby
|
12
13
|
# rails 4 and later, default_where does nothing
|
13
14
|
params = { role_id: 1, age: 20 }
|
@@ -16,7 +17,7 @@ User.default_where(params)
|
|
16
17
|
|
17
18
|
### Equal params with association
|
18
19
|
|
19
|
-
|
20
|
+
* params
|
20
21
|
```ruby
|
21
22
|
User.belongs_to :role
|
22
23
|
params = { name: 'dhh', 'role.id': 2 }
|
@@ -24,41 +25,40 @@ params = { name: 'dhh', 'role.id': 2 }
|
|
24
25
|
# you can use any table name or reference name
|
25
26
|
params = { name: 'dhh', 'roles.id': 2 }
|
26
27
|
```
|
27
|
-
|
28
|
+
* Before use `default_where`
|
28
29
|
```ruby
|
29
30
|
User.includes(:student).where(name: params[:name], role: {id: params[:'role.id']})
|
30
31
|
```
|
31
|
-
|
32
|
+
* After Use `default_where`
|
32
33
|
```ruby
|
33
34
|
User.default_where(params)
|
34
35
|
```
|
35
36
|
|
36
37
|
### Range params
|
37
|
-
|
38
|
+
* params
|
38
39
|
```ruby
|
39
40
|
params = { 'role_id-lte': 2 }
|
40
41
|
```
|
41
|
-
|
42
|
+
* Before use `default_where`
|
42
43
|
```ruby
|
43
44
|
User.where('role_id >= ?', params[:'role_id-lte'])
|
44
45
|
```
|
45
|
-
|
46
|
+
* After use `default_where`
|
46
47
|
```ruby
|
47
48
|
User.default_where(params)
|
48
49
|
```
|
49
50
|
|
50
51
|
### Auto remove blank params by default, no need write query with `if else`
|
51
|
-
|
52
|
+
* params
|
52
53
|
```ruby
|
53
54
|
params = { age: '', role_id: 1 }
|
54
55
|
```
|
55
|
-
|
56
|
-
- Before use `default_where`
|
56
|
+
* Before use `default_where`
|
57
57
|
```ruby
|
58
58
|
users = User.where(role_id: params[:role_id])
|
59
59
|
users = users.where(age: params[:age]) if params[:age]
|
60
60
|
```
|
61
|
-
|
61
|
+
* After use `default_where`
|
62
62
|
```ruby
|
63
63
|
User.default_where(params)
|
64
64
|
|
@@ -66,30 +66,47 @@ User.default_where(params)
|
|
66
66
|
User.default_where(params, { allow: [nil] })
|
67
67
|
```
|
68
68
|
|
69
|
+
### Auto call strip for string
|
70
|
+
* params
|
71
|
+
```ruby
|
72
|
+
params= { name: ' dhh ' }
|
73
|
+
```
|
74
|
+
* Before use `default_where`
|
75
|
+
```ruby
|
76
|
+
User.where(name: params[:name].strip)
|
77
|
+
```
|
78
|
+
* After use `default_where`
|
79
|
+
```ruby
|
80
|
+
User.default_where(params)
|
81
|
+
|
82
|
+
# also can control whether use strip
|
83
|
+
User.default_where(params, { strip: false })
|
84
|
+
```
|
85
|
+
|
69
86
|
### Order params
|
70
|
-
|
87
|
+
* Params
|
71
88
|
```ruby
|
72
89
|
params = { 'age-asc': '1', 'last_login_at-asc': '2' }
|
73
90
|
```
|
74
|
-
|
91
|
+
* Before use `default_where`
|
75
92
|
```ruby
|
76
93
|
User.order(age: :asc, last_login_at: :asc)
|
77
94
|
```
|
78
|
-
|
95
|
+
* After use `default_where`
|
79
96
|
```ruby
|
80
97
|
User.default_where(params)
|
81
98
|
```
|
82
99
|
|
83
100
|
## A sample with all params above
|
84
|
-
|
101
|
+
* Params
|
85
102
|
```ruby
|
86
103
|
{ name: 'dhh', 'role.id': 2, 'age-lte': 2, 'age-asc': '1', 'last_login_at-asc': '2' }
|
87
104
|
```
|
88
|
-
|
105
|
+
* Before use `default_where`
|
89
106
|
```ruby
|
90
107
|
User.includes(:role).where(name: params[:name], 'roles.id': params[:'role.id']).order(age: :asc, last_login_at: :asc)
|
91
108
|
```
|
92
|
-
|
109
|
+
* After use `default_where`
|
93
110
|
```ruby
|
94
111
|
User.default_where(params)
|
95
112
|
```
|
data/lib/default_where.rb
CHANGED
@@ -10,7 +10,7 @@ module DefaultWhere
|
|
10
10
|
include DefaultWhere::Like
|
11
11
|
|
12
12
|
REJECT = ['', ' ', nil]
|
13
|
-
|
13
|
+
STRIP = true
|
14
14
|
|
15
15
|
def default_where(params = {}, options = {})
|
16
16
|
return all if params.blank?
|
@@ -40,6 +40,10 @@ module DefaultWhere
|
|
40
40
|
default_reject = REJECT
|
41
41
|
end
|
42
42
|
|
43
|
+
unless options.has_key? :strip
|
44
|
+
options[:strip] = STRIP
|
45
|
+
end
|
46
|
+
|
43
47
|
params = params.to_h
|
44
48
|
params.stringify_keys!
|
45
49
|
params.reject! { |_, value| default_reject.include?(value) }
|
@@ -48,20 +52,22 @@ module DefaultWhere
|
|
48
52
|
tables = []
|
49
53
|
final_params = {}
|
50
54
|
|
51
|
-
params.each do |key,
|
55
|
+
params.each do |key, value|
|
56
|
+
value = value.strip if value.is_a?(String) && options[:strip]
|
57
|
+
|
52
58
|
if key =~ /\./
|
53
59
|
table, col = key.split('.')
|
54
60
|
as_model = reflections[table]
|
55
61
|
f_col, _ = col.split('-')
|
56
62
|
|
57
63
|
if as_model && as_model.klass.column_names.include?(f_col)
|
58
|
-
final_params["#{as_model.table_name}.#{col}"] =
|
64
|
+
final_params["#{as_model.table_name}.#{col}"] = value
|
59
65
|
tables << as_model.table_name
|
60
66
|
refs << table.to_sym
|
61
67
|
elsif connection.data_sources.include? table
|
62
|
-
final_params["#{table}.#{col}"] =
|
68
|
+
final_params["#{table}.#{col}"] = value
|
63
69
|
tables << table
|
64
|
-
keys = reflections.select { |_, v| v.table_name == table }.keys
|
70
|
+
keys = reflections.select { |_, v| !v.polymorphic? && v.table_name == table }.keys
|
65
71
|
if keys && keys.size == 1
|
66
72
|
refs << keys.first.to_sym
|
67
73
|
end
|
@@ -69,7 +75,7 @@ module DefaultWhere
|
|
69
75
|
else
|
70
76
|
f_key, _ = key.split('-')
|
71
77
|
if column_names.include?(f_key)
|
72
|
-
final_params["#{
|
78
|
+
final_params["#{key}"] = value
|
73
79
|
end
|
74
80
|
end
|
75
81
|
end
|
data/lib/default_where/like.rb
CHANGED
@@ -7,7 +7,11 @@ module DefaultWhere
|
|
7
7
|
|
8
8
|
params.select{ |k, _| k.end_with?('-like') }.each do |key, value|
|
9
9
|
real_key = key.sub(/-like$/, '')
|
10
|
-
agent_key = key.gsub(/[
|
10
|
+
agent_key = key.gsub(/[-.]/, '_')
|
11
|
+
|
12
|
+
if column_names.include?(real_key)
|
13
|
+
real_key = "#{table_name}.#{real_key}"
|
14
|
+
end
|
11
15
|
|
12
16
|
where_string << "#{real_key} like :#{agent_key}"
|
13
17
|
where_hash.merge! agent_key.to_sym => '%' + value.to_s + '%'
|
data/lib/default_where/not.rb
CHANGED
@@ -6,7 +6,12 @@ module DefaultWhere
|
|
6
6
|
|
7
7
|
params.each do |key, value|
|
8
8
|
real_key = key.sub(/-not$/, '')
|
9
|
-
|
9
|
+
|
10
|
+
if column_names.include?(real_key)
|
11
|
+
real_key = "#{table_name}.#{real_key}"
|
12
|
+
end
|
13
|
+
|
14
|
+
where_hash.merge! real_key => value
|
10
15
|
end
|
11
16
|
|
12
17
|
if where_hash.present?
|
data/lib/default_where/range.rb
CHANGED
@@ -18,7 +18,11 @@ module DefaultWhere
|
|
18
18
|
options.each do |key, value|
|
19
19
|
exp = Regexp.new(char + '$')
|
20
20
|
real_key = key.sub(exp, '')
|
21
|
-
agent_key = key.gsub(/[
|
21
|
+
agent_key = key.gsub(/[-.]/, '_')
|
22
|
+
|
23
|
+
if column_names.include?(real_key)
|
24
|
+
real_key = "#{table_name}.#{real_key}"
|
25
|
+
end
|
22
26
|
|
23
27
|
where_string << "#{real_key} #{sign} :#{agent_key}"
|
24
28
|
|
data/test/database.yml
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
sqlite:
|
2
|
+
adapter: sqlite3
|
3
|
+
database: "file:memdb1?mode=memory&cache=shared"
|
4
|
+
|
5
|
+
mysql:
|
6
|
+
adapter: mysql2
|
7
|
+
username: root
|
8
|
+
password:
|
9
|
+
database: default_where
|
10
|
+
|
11
|
+
postgresql:
|
12
|
+
adapter: postgresql
|
13
|
+
username: postgres
|
14
|
+
password:
|
15
|
+
database: default_where
|
16
|
+
min_messages: ERROR
|
data/test/default_where_test.rb
CHANGED
data/test/helper.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# $DEBUG = true
|
2
|
+
|
3
|
+
require "rubygems"
|
4
|
+
require "bundler/setup"
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
require "active_record"
|
13
|
+
require "minitest/autorun"
|
14
|
+
|
15
|
+
db_config = YAML.load_file(File.expand_path("../database.yml", __FILE__)).fetch(ENV["DB"] || "sqlite")
|
16
|
+
ActiveRecord::Base.establish_connection(db_config)
|
17
|
+
ActiveRecord::Schema.verbose = false
|
18
|
+
|
19
|
+
def teardown_db
|
20
|
+
tables = ActiveRecord::Base.connection.data_sources
|
21
|
+
tables.each do |table|
|
22
|
+
ActiveRecord::Base.connection.drop_table(table)
|
23
|
+
end
|
24
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: default_where
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- qinmingyuan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -24,6 +24,34 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 4.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rdoc
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
27
55
|
description: Description of QueryScope.
|
28
56
|
email:
|
29
57
|
- mingyuan0715@foxmail.com
|
@@ -40,8 +68,9 @@ files:
|
|
40
68
|
- lib/default_where/order.rb
|
41
69
|
- lib/default_where/range.rb
|
42
70
|
- lib/default_where/version.rb
|
71
|
+
- test/database.yml
|
43
72
|
- test/default_where_test.rb
|
44
|
-
- test/
|
73
|
+
- test/helper.rb
|
45
74
|
homepage: https://github.com/qinmingyuan/default_where
|
46
75
|
licenses:
|
47
76
|
- MIT
|
@@ -62,10 +91,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
62
91
|
version: '0'
|
63
92
|
requirements: []
|
64
93
|
rubyforge_project:
|
65
|
-
rubygems_version: 2.6
|
94
|
+
rubygems_version: 2.7.6
|
66
95
|
signing_key:
|
67
96
|
specification_version: 4
|
68
97
|
summary: default process params for where
|
69
98
|
test_files:
|
70
99
|
- test/default_where_test.rb
|
71
|
-
- test/
|
100
|
+
- test/helper.rb
|
101
|
+
- test/database.yml
|
data/test/test_helper.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
# Configure Rails Environment
|
2
|
-
ENV["RAILS_ENV"] = "test"
|
3
|
-
|
4
|
-
require File.expand_path("../../test/dummy/config/environment.rb", __FILE__)
|
5
|
-
ActiveRecord::Migrator.migrations_paths = [File.expand_path("../../test/dummy/db/migrate", __FILE__)]
|
6
|
-
require "rails/test_help"
|
7
|
-
|
8
|
-
# Filter out Minitest backtrace while allowing backtrace from other libraries
|
9
|
-
# to be shown.
|
10
|
-
Minitest.backtrace_filter = Minitest::BacktraceFilter.new
|
11
|
-
|
12
|
-
# Load support files
|
13
|
-
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
14
|
-
|
15
|
-
# Load fixtures from the engine
|
16
|
-
if ActiveSupport::TestCase.method_defined?(:fixture_path=)
|
17
|
-
ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
|
18
|
-
end
|