default_where 2.2.0 → 2.3.0

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
  SHA256:
3
- metadata.gz: 2b85a4951acd26f1a6797d490d439eee08d8c67e3ffb85b448b575e397944198
4
- data.tar.gz: 4170d4c7ef435d25c74ba47baf650d55b2bf452552be983a853df4be470a7034
3
+ metadata.gz: b496f6c6778aac3b2e8ef9d0a47f8d7e8557f2080aeaa0dc15605f80266c3760
4
+ data.tar.gz: 0320e5570248726e1a4716f852ba951480fccb386b298db0d1118181fb1180eb
5
5
  SHA512:
6
- metadata.gz: fdd9c0a69cb31188ce01230ace81e618e4c14ad92f88f9e6622d2857c253ca6363c34d17bd5c1269cf8a7c7f7338e4a4d463cfde03950616e274ad6dd6129de3
7
- data.tar.gz: eb48499fae1cbe71cb4adb659982b31145a1f29a3d22ce950e25735ac4a2df6e3614641b9b419da35e677a75b84c22358a166a0da2abaaa77857f18613c70a40
6
+ metadata.gz: 0fec4d669be1436bdf7cb217bdb0cee4a30fdd4e7dd4e8b201a9c444da07bc3a5ef100a0329a7c4c3c679af045aa08e48ef2137105b24cc15adcc44f69af7ddf
7
+ data.tar.gz: 2633a6a9cab857a51fc321efce967f7fe4c7fbcc835abed292066a2c90367ad4f6a2746e76bdf4a8418f62f18707851c944ecff1a93a7dec73987d98e37a8fdc
@@ -1,4 +1,4 @@
1
- Copyright 2015 qinmingyuan<mingyuan0715@foxmail.com>
1
+ Copyright (c) 2015-Present Mingyuan Qin <mingyuan0715@foxmail.com>
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -1,10 +1,21 @@
1
1
  ## DefaultWhere
2
2
 
3
- This Library set default params process for where query in ActiveRecord
3
+
4
+ `default_where` set default params process for where query in ActiveRecord
4
5
 
5
6
  It's a wise decision to use `default_where` with [default_form](https://github.com/qinmingyuan/default_form) to replace `ransack`
6
7
 
7
- ## Features and Usage
8
+ ## 使用说明
9
+
10
+
11
+ ### 语法概览
12
+
13
+ * 等于:key: value
14
+ * 范围:key-gte: value,
15
+ * 排序:key-asc: 1, key-desc: 2
16
+ * 排除:key-not: value
17
+ #### 对于postgresql 数据库
18
+ * 包含任一值:key-any: value
8
19
 
9
20
  ### Normal equal params
10
21
 
@@ -62,8 +73,27 @@ users = users.where(age: params[:age]) if params[:age]
62
73
  ```ruby
63
74
  User.default_where(params)
64
75
 
65
- # also can control which blank value can use
66
- User.default_where(params, { allow: [nil] })
76
+ ```
77
+
78
+ ### allow
79
+ you can control which blank value can use
80
+
81
+ ```ruby
82
+ {
83
+ name: nil,
84
+ allow: { name: nil }
85
+ }
86
+ ```
87
+
88
+ ### OR
89
+ ```ruby
90
+ params = {
91
+ or: {
92
+ 'users.email-not': 'qin',
93
+ 'name': 'qin'
94
+ }
95
+ }
96
+
67
97
  ```
68
98
 
69
99
  ### Auto call strip for string
@@ -80,7 +110,13 @@ User.where(name: params[:name].strip)
80
110
  User.default_where(params)
81
111
 
82
112
  # also can control whether use strip
83
- User.default_where(params, { strip: false })
113
+
114
+ {
115
+ name: ' qin',
116
+ strip: {
117
+ name: false
118
+ }
119
+ }
84
120
  ```
85
121
 
86
122
  ### Order params
@@ -97,10 +133,30 @@ User.order(age: :asc, last_login_at: :asc)
97
133
  User.default_where(params)
98
134
  ```
99
135
 
136
+ ## For Postgresql
137
+ * support JSONB filter,just use like this: `column_name/json_key`, just notice jsonb all value is string type;
138
+ ```ruby
139
+ # before
140
+ Order.where("extra->>'maintain_id' = :key", key: id.to_s)
141
+ # after
142
+ Order.default_where('extra/maintain_id': id.to_s)
143
+ ```
144
+
100
145
  ## A sample with all params above
101
146
  * Params
102
147
  ```ruby
103
- { name: 'dhh', 'role.id': 2, 'age-lte': 2, 'age-asc': '1', 'last_login_at-asc': '2' }
148
+ {
149
+ name: 'dhh',
150
+ 'role.id': 2,
151
+ 'age-lte': 2,
152
+ 'age-asc': '1',
153
+ 'last_login_at-asc': '2',
154
+ or: {
155
+ name: 'dhh',
156
+ email: 'dhh'
157
+ },
158
+ allow: { name: nil }
159
+ }
104
160
  ```
105
161
  * Before use `default_where`
106
162
  ```ruby
@@ -109,4 +165,7 @@ User.includes(:role).where(name: params[:name], 'roles.id': params[:'role.id']).
109
165
  * After use `default_where`
110
166
  ```ruby
111
167
  User.default_where(params)
112
- ```
168
+ ```
169
+
170
+ ## 许可证
171
+ 遵循 MIT 协议
data/Rakefile CHANGED
@@ -8,25 +8,29 @@ require 'rdoc/task'
8
8
 
9
9
  RDoc::Task.new(:rdoc) do |rdoc|
10
10
  rdoc.rdoc_dir = 'rdoc'
11
- rdoc.title = 'QueryScope'
11
+ rdoc.title = 'DefaultWhere'
12
12
  rdoc.options << '--line-numbers'
13
- rdoc.rdoc_files.include('README.rdoc')
13
+ rdoc.rdoc_files.include('README.md')
14
14
  rdoc.rdoc_files.include('lib/**/*.rb')
15
15
  end
16
16
 
17
-
18
-
19
-
20
17
  Bundler::GemHelper.install_tasks
21
18
 
22
19
  require 'rake/testtask'
23
20
 
24
- Rake::TestTask.new(:test) do |t|
25
- t.libs << 'lib'
21
+ Rake::TestTask.new(test: :environment) do |t|
26
22
  t.libs << 'test'
27
23
  t.pattern = 'test/**/*_test.rb'
28
24
  t.verbose = false
29
25
  end
30
26
 
27
+ task :environment do
28
+ ActiveRecord::Tasks::DatabaseTasks.database_configuration = YAML.load_file('test/config/database.yml')
29
+ ActiveRecord::Tasks::DatabaseTasks.env = 'test'
30
+ ActiveRecord::Tasks::DatabaseTasks.root = __dir__
31
+ ActiveRecord::Tasks::DatabaseTasks.migrations_paths = ['test/migrations']
32
+ ActiveRecord::Base.configurations = ActiveRecord::Tasks::DatabaseTasks.database_configuration
33
+ ActiveRecord::Base.establish_connection :test
34
+ end
31
35
 
32
- task default: :test
36
+ load 'active_record/railties/databases.rake'
data/lib/default_where.rb CHANGED
@@ -1,88 +1,69 @@
1
- require 'default_where/not'
2
- require 'default_where/range'
3
- require 'default_where/like'
1
+ # frozen_string_literal: true
2
+
3
+ require 'default_where/scope'
4
4
  require 'default_where/order'
5
+ require 'default_where/params'
6
+ require 'default_where/group'
5
7
 
6
8
  module DefaultWhere
7
- include DefaultWhere::Not
8
- include DefaultWhere::Range
9
- include DefaultWhere::Order
10
- include DefaultWhere::Like
9
+ include Scope
10
+ include Order
11
+ include Params
12
+ include Group
11
13
 
12
- REJECT = ['', ' ', nil]
14
+ REJECT = ['', nil].freeze
13
15
  STRIP = true
14
16
 
15
- def default_where(params = {}, options = {})
17
+ def default_where(params = {})
16
18
  return all if params.blank?
17
19
 
18
- params, refs, tables = params_with_table(params, options)
20
+ params = params.to_h
21
+ options = {}
22
+ [:strip, :allow, :reject].each do |key|
23
+ options[key] = params.delete(key) if params[key].respond_to?(:to_hash)
24
+ end
25
+ or_params = {}
26
+ or_params = params.delete(:or) if params[:or].respond_to?(:to_hash)
19
27
 
20
- range_params = filter_range(params)
21
- order_params = filter_order(params)
22
- not_params = filter_not(params)
23
- like_params = filter_like(params)
28
+ and_params, and_refs, and_tables = default_where_params(params, options)
29
+ order_params = default_where_order_filter(and_params)
30
+ and_params.except!(*order_params.keys)
24
31
 
25
- equal_params = params.except!(*range_params.keys, *order_params.keys, *not_params.keys, *like_params.keys)
32
+ or_params, or_refs, or_tables = default_where_params(or_params, options)
33
+ refs = and_refs + or_refs
34
+ tables = and_tables + or_tables
26
35
 
27
- includes(refs).where(equal_params).references(tables)
28
- .not_scope(not_params)
29
- .like_scope(like_params)
30
- .range_scope(range_params)
31
- .order_scope(order_params)
36
+ includes(refs).default_where_and(and_params).default_where_or(or_params).default_where_order(order_params).references(tables)
32
37
  end
33
38
 
34
- def params_with_table(params = {}, options = {})
35
- if options[:reject]
36
- default_reject = [options[:reject]].flatten
37
- elsif options[:allow]
38
- default_reject = REJECT - [options[:allow]].flatten
39
- else
40
- default_reject = REJECT
41
- end
39
+ def default_where_and(params = {})
40
+ return current_scope if params.blank?
42
41
 
43
- unless options.has_key? :strip
44
- options[:strip] = STRIP
42
+ equal_params = {}
43
+ params.each do |key, _|
44
+ equal_params[key] = params.delete(key) unless key.match? /[-\/]/
45
45
  end
46
+ where_string, where_hash = default_where_scope(params)
47
+ where_string = where_string.join ' AND '
46
48
 
47
- params = params.to_h
48
- params.stringify_keys!
49
- params.reject! { |_, value| default_reject.include?(value) }
50
-
51
- refs = []
52
- tables = []
53
- final_params = {}
54
-
55
- params.each do |key, value|
56
- value = value.strip if value.is_a?(String) && options[:strip]
57
-
58
- if key =~ /\./
59
- table, col = key.split('.')
60
- as_model = reflections[table]
61
- f_col, _ = col.split('-')
62
-
63
- if as_model && as_model.klass.column_names.include?(f_col)
64
- final_params["#{as_model.table_name}.#{col}"] = value
65
- tables << as_model.table_name
66
- refs << table.to_sym
67
- elsif connection.data_sources.include? table
68
- final_params["#{table}.#{col}"] = value
69
- tables << table
70
- keys = reflections.select { |_, v| !v.polymorphic? && v.table_name == table }.keys
71
- if keys && keys.size == 1
72
- refs << keys.first.to_sym
73
- end
74
- end
75
- else
76
- f_key, _ = key.split('-')
77
- if column_names.include?(f_key)
78
- final_params["#{key}"] = value
79
- end
80
- end
81
- end
49
+ where(equal_params).where(where_string, where_hash)
50
+ end
51
+
52
+ def default_where_or(params = {})
53
+ return current_scope if params.blank?
54
+
55
+ where_string, where_hash = default_where_scope(params)
56
+ where_string = where_string.join ' OR '
82
57
 
83
- [final_params, refs, tables]
58
+ where(where_string, where_hash)
59
+ end
60
+
61
+ def logger
62
+ ::ActiveRecord::Base.logger
84
63
  end
85
64
 
86
65
  end
87
66
 
88
- ActiveRecord::Base.extend DefaultWhere
67
+ ActiveSupport.on_load :active_record do
68
+ extend DefaultWhere
69
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DefaultWhere
4
+ module Group
5
+
6
+ # {
7
+ # select: 'sum(total_amount)',
8
+ # select: {
9
+ # a: 'sum(total_amount)',
10
+ # b: 'sum()'
11
+ # }
12
+ # }
13
+ # group: 'date(created_at)',
14
+ def default_group(*group, select:)
15
+ if select.respond_to?(:to_hash)
16
+ selected = select.map do |k, v|
17
+ "#{v} AS #{k}"
18
+ end
19
+ else
20
+ selected = Array(select)
21
+ end
22
+
23
+ unscoped.select(*selected, *group).group(*select.values)
24
+ end
25
+
26
+ end
27
+ end
@@ -1,23 +1,26 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DefaultWhere
2
4
  module Order
5
+ PATTERN = {
6
+ '-asc': :asc,
7
+ '-desc': :desc
8
+ }
3
9
 
4
- def order_scope(params)
5
- order_array = []
6
-
7
- params.select{ |key, _| key.end_with?('-asc') }.each do |k, _|
8
- order_array << k.sub(/-asc$/, ' ASC')
9
- end
10
+ def default_where_order(params)
11
+ order_hash = {}
10
12
 
11
- params.select{ |key, _| key.end_with?('-desc') }.each do |k, _|
12
- order_array << k.sub(/-desc$/, ' DESC')
13
+ params.sort_by{ |_, v| v.to_i }.each do |i|
14
+ k, v = i[0].split('-')
15
+ order_hash[k] = v
13
16
  end
14
17
 
15
- order(order_array)
18
+ order(order_hash)
16
19
  end
17
20
 
18
- def filter_order(params)
21
+ def default_where_order_filter(params)
19
22
  params.select do |k, v|
20
- k.end_with?('-asc', '-desc') && v =~ /^[1-9]$/
23
+ k.end_with?('-asc', '-desc') && String(v) =~ /^[1-9]$/
21
24
  end
22
25
  end
23
26
 
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DefaultWhere
4
+ module Params
5
+
6
+ def default_where_params(params = {}, options = {})
7
+ refs = []
8
+ tables = []
9
+ final_params = {}
10
+
11
+ params.each do |key, value|
12
+ # strip, if assign key to false, will not works
13
+ strip = options.fetch(:strip, {}).fetch(key, STRIP)
14
+ value = value.strip if value.is_a?(String) && strip
15
+
16
+ # reject
17
+ if options.key?(:reject)
18
+ reject = options.fetch(:reject, {}).fetch(key, REJECT)
19
+ if reject == nil
20
+ reject = [nil]
21
+ elsif reject == []
22
+ reject = [[]]
23
+ else
24
+ reject = Array(reject)
25
+ end
26
+ else
27
+ allow = options.fetch(:allow, {}).fetch(key, [])
28
+ if allow == nil
29
+ allow = [nil]
30
+ else
31
+ allow = Array(allow)
32
+ end
33
+ reject = REJECT - allow
34
+ end
35
+ next if reject.include?(value)
36
+
37
+ items = key.to_s.split('.')
38
+ column = items[-1]
39
+ real_column = column.split(/[-\/]/)[0]
40
+
41
+ if items.size == 1
42
+ next unless column_names.include?(real_column)
43
+ table = nil
44
+ else
45
+ prefix = items[0]
46
+ ref = reflections[prefix]
47
+
48
+ # 检查 prefix 是否为关联关系的名称
49
+ if ref && !ref.polymorphic?
50
+ table = ref.table_name
51
+ # 检查 prefix 是否为表名,且表中存在 real_column 字段
52
+ elsif connection.data_sources.include?(prefix) && connection.column_exists?(prefix, real_column)
53
+ possible_refs = reflections.select { |_, v| v.table_name == prefix }
54
+ if possible_refs.size < 1
55
+ ref = nil
56
+ elsif possible_refs.size == 1
57
+ ref = possible_refs[0]
58
+ else
59
+ raise "#{key} makes confused, please use reflection name!"
60
+ end
61
+
62
+ table = prefix
63
+ else
64
+ next
65
+ end
66
+
67
+ if ref && !ref.klass.column_names.include?(real_column)
68
+ next
69
+ end
70
+
71
+ if ref && !refs.include?(ref.name)
72
+ refs << ref.name
73
+ end
74
+
75
+ unless tables.include?(table)
76
+ tables << table
77
+ end
78
+ end
79
+
80
+ if table
81
+ final_params["#{table}.#{column}"] = value
82
+ else
83
+ final_params[column] = value
84
+ end
85
+ end
86
+
87
+ [final_params, refs, tables]
88
+ end
89
+
90
+ end
91
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DefaultWhere
4
+ module Scope
5
+ PATTERN = {
6
+ gt: '>',
7
+ gte: '>=',
8
+ lt: '<',
9
+ lte: '<=',
10
+ not: '!=',
11
+ like: 'LIKE',
12
+ rl: 'LIKE',
13
+ ll: 'LIKE',
14
+ :'' => '='
15
+ }.freeze
16
+
17
+ def default_where_scope(params)
18
+ where_string = []
19
+ where_hash = {}
20
+
21
+ params.each do |key, value|
22
+ real_key, sign_str = key.split('-')
23
+ agent_key = key.gsub(/[-.\/]/, '_')
24
+
25
+ if value.nil? || value == []
26
+ if sign_str == 'not'
27
+ where_string << "#{real_key} IS NOT NULL"
28
+ elsif sign_str.nil?
29
+ where_string << "#{real_key} IS NULL"
30
+ else
31
+ raise "#{key}'s value can not be nil"
32
+ end
33
+ elsif sign_str == 'any' # 支持 postgres array 查询
34
+ where_string << ":#{agent_key} = ANY(#{real_key})"
35
+ where_hash.merge! agent_key.to_sym => value
36
+ elsif real_key.match?(/.\/./) # 支持 postgres json 查询
37
+ real_key, i18n_key = key.split('/')
38
+ where_string << "#{real_key}->>'#{i18n_key}' = :#{agent_key}"
39
+ where_hash.merge! agent_key.to_sym => value
40
+ else
41
+ case sign_str
42
+ when 'll'
43
+ real_value = "#{value}%"
44
+ when 'rl'
45
+ real_value = "%#{value}"
46
+ when 'like'
47
+ real_value = "%#{value}%"
48
+ else
49
+ real_value = value
50
+ end
51
+
52
+ where_string << "#{table_name}.#{real_key} #{PATTERN[sign_str.to_s.to_sym]} :#{agent_key}"
53
+ where_hash.merge! agent_key.to_sym => real_value
54
+ end
55
+ end
56
+
57
+ [where_string, where_hash]
58
+ end
59
+
60
+ end
61
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DefaultWhere
2
- VERSION = '2.2.0'
3
- end
4
+ VERSION = '2.3.0'
5
+ end
@@ -0,0 +1,32 @@
1
+ default: &default
2
+ adapter: mysql2
3
+ encoding: utf8
4
+ pool: 5
5
+ username: root
6
+ password: root123_ROOT
7
+ socket: /tmp/mysql.sock
8
+
9
+ development:
10
+ <<: *default
11
+ database: default_where_development
12
+
13
+ test:
14
+ <<: *default
15
+ database: default_where_test
16
+
17
+ sqlite:
18
+ adapter: sqlite3
19
+ database: "file:memdb1?mode=memory&cache=shared"
20
+
21
+ mysql:
22
+ adapter: mysql2
23
+ username: root
24
+ password: root
25
+ database: default_where
26
+
27
+ postgresql:
28
+ adapter: postgresql
29
+ username: postgres
30
+ password:
31
+ database: default_where
32
+ min_messages: ERROR
@@ -0,0 +1,32 @@
1
+ default: &default
2
+ adapter: mysql2
3
+ encoding: utf8
4
+ pool: 5
5
+ username: root
6
+ password: root123_ROOT
7
+ socket: /tmp/mysql.sock
8
+
9
+ development:
10
+ <<: *default
11
+ database: default_where_development
12
+
13
+ test:
14
+ <<: *default
15
+ database: default_where_test
16
+
17
+ sqlite:
18
+ adapter: sqlite3
19
+ database: "file:memdb1?mode=memory&cache=shared"
20
+
21
+ mysql:
22
+ adapter: mysql2
23
+ username: root
24
+ password: root
25
+ database: default_where
26
+
27
+ postgresql:
28
+ adapter: postgresql
29
+ username: postgres
30
+ password:
31
+ database: default_where
32
+ min_messages: ERROR
@@ -1,16 +1,19 @@
1
1
  require 'helper'
2
+ require 'models/user'
2
3
 
3
4
  class DefaultWhereTest < ActiveSupport::TestCase
4
5
 
5
- test "truth" do
6
+ test 'truth' do
6
7
  assert_kind_of Module, DefaultWhere
7
8
  end
8
9
 
9
- test "" do
10
+ test 'basic' do
11
+ create :user
10
12
  params = { id: 1, uid: 2, name: 3 }
11
13
  options = { signs: 'name' }
12
14
 
13
-
15
+ count = User.default_where(name: 'qinmingyuan').count
16
+ assert_equal 1, count
14
17
  end
15
18
 
16
19
  end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+
3
+ factory :user do
4
+ name 'qinmingyuan'
5
+ end
6
+
7
+ end
data/test/helper.rb CHANGED
@@ -1,24 +1,25 @@
1
- # $DEBUG = true
1
+ require 'active_record'
2
+ require 'minitest/autorun'
3
+ require 'factory_bot'
2
4
 
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
5
+ ActiveRecord::Schema.verbose = false
6
+ ActiveRecord::Tasks::DatabaseTasks.database_configuration = YAML.load_file('test/config/database.yml')
7
+ ActiveRecord::Base.configurations = ActiveRecord::Tasks::DatabaseTasks.database_configuration
8
+ ActiveRecord::Base.establish_connection :test
9
+
10
+ if defined?(FactoryBot)
11
+ FactoryBot.definition_file_paths << File.expand_path('test/factories', __dir__)
12
+ FactoryBot.find_definitions
11
13
  end
12
- require "active_record"
13
- require "minitest/autorun"
14
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
15
+ class ActiveSupport::TestCase
16
+ include FactoryBot::Syntax::Methods
17
+ end
18
18
 
19
19
  def teardown_db
20
20
  tables = ActiveRecord::Base.connection.data_sources
21
21
  tables.each do |table|
22
- ActiveRecord::Base.connection.drop_table(table)
22
+ ActiveRecord::Base.connection.truncate(table)
23
23
  end
24
- end
24
+ end
25
+ teardown_db
@@ -0,0 +1,12 @@
1
+ class TestInit < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :users do |t|
4
+ t.string :name
5
+ end
6
+
7
+ create_table :posts do |t|
8
+ t.string :title
9
+ t.references :user
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+ require 'default_where'
3
+ class User < ActiveRecord::Base
4
+ extend DefaultWhere
5
+
6
+ end
7
+
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.2.0
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - qinmingyuan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-02 00:00:00.000000000 Z
11
+ date: 2021-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,61 +16,71 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 4.0.0
19
+ version: '4.0'
20
+ - - "<="
21
+ - !ruby/object:Gem::Version
22
+ version: '7.0'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
27
  - - ">="
25
28
  - !ruby/object:Gem::Version
26
- version: 4.0.0
29
+ version: '4.0'
30
+ - - "<="
31
+ - !ruby/object:Gem::Version
32
+ version: '7.0'
27
33
  - !ruby/object:Gem::Dependency
28
- name: rdoc
34
+ name: sdoc
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
- - - ">="
37
+ - - "~>"
32
38
  - !ruby/object:Gem::Version
33
- version: '0'
39
+ version: '1.0'
34
40
  type: :development
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
- - - ">="
44
+ - - "~>"
39
45
  - !ruby/object:Gem::Version
40
- version: '0'
46
+ version: '1.0'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: rake
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
- - - ">="
51
+ - - "~>"
46
52
  - !ruby/object:Gem::Version
47
- version: '0'
53
+ version: '12.3'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
- - - ">="
58
+ - - "~>"
53
59
  - !ruby/object:Gem::Version
54
- version: '0'
55
- description: Description of QueryScope.
60
+ version: '12.3'
61
+ description: Default where
56
62
  email:
57
63
  - mingyuan0715@foxmail.com
58
64
  executables: []
59
65
  extensions: []
60
66
  extra_rdoc_files: []
61
67
  files:
62
- - MIT-LICENSE
68
+ - LICENSE
63
69
  - README.md
64
70
  - Rakefile
65
71
  - lib/default_where.rb
66
- - lib/default_where/like.rb
67
- - lib/default_where/not.rb
72
+ - lib/default_where/group.rb
68
73
  - lib/default_where/order.rb
69
- - lib/default_where/range.rb
74
+ - lib/default_where/params.rb
75
+ - lib/default_where/scope.rb
70
76
  - lib/default_where/version.rb
71
- - test/database.yml
77
+ - test/config/database.yml
78
+ - test/config/database.yml.example
72
79
  - test/default_where_test.rb
80
+ - test/factories/users.rb
73
81
  - test/helper.rb
82
+ - test/migrations/20180508082145_test_init.rb
83
+ - test/models/user.rb
74
84
  homepage: https://github.com/qinmingyuan/default_where
75
85
  licenses:
76
86
  - MIT
@@ -90,12 +100,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
100
  - !ruby/object:Gem::Version
91
101
  version: '0'
92
102
  requirements: []
93
- rubyforge_project:
94
- rubygems_version: 2.7.6
103
+ rubygems_version: 3.2.22
95
104
  signing_key:
96
105
  specification_version: 4
97
106
  summary: default process params for where
98
107
  test_files:
108
+ - test/config/database.yml
109
+ - test/config/database.yml.example
99
110
  - test/default_where_test.rb
111
+ - test/factories/users.rb
100
112
  - test/helper.rb
101
- - test/database.yml
113
+ - test/migrations/20180508082145_test_init.rb
114
+ - test/models/user.rb
@@ -1,37 +0,0 @@
1
- module DefaultWhere
2
- module Like
3
-
4
- def like_scope(params)
5
- where_string = []
6
- where_hash = {}
7
-
8
- params.select{ |k, _| k.end_with?('-like') }.each do |key, value|
9
- real_key = key.sub(/-like$/, '')
10
- agent_key = key.gsub(/[-.]/, '_')
11
-
12
- if column_names.include?(real_key)
13
- real_key = "#{table_name}.#{real_key}"
14
- end
15
-
16
- where_string << "#{real_key} like :#{agent_key}"
17
- where_hash.merge! agent_key.to_sym => '%' + value.to_s + '%'
18
- end
19
-
20
- where_string = where_string.join ' AND '
21
-
22
- if where_string.present?
23
- condition = [where_string, where_hash]
24
- where(condition)
25
- else
26
- all
27
- end
28
- end
29
-
30
- def filter_like(params)
31
- params.select do |k, _|
32
- k.end_with?('-like')
33
- end
34
- end
35
-
36
- end
37
- end
@@ -1,32 +0,0 @@
1
- module DefaultWhere
2
- module Not
3
-
4
- def not_scope(params)
5
- where_hash = {}
6
-
7
- params.each do |key, value|
8
- real_key = key.sub(/-not$/, '')
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
15
- end
16
-
17
- if where_hash.present?
18
- where.not(where_hash)
19
- else
20
- all
21
- end
22
- end
23
-
24
- def filter_not(params)
25
- params.select do |k, _|
26
- k.end_with?('-not')
27
- end
28
- end
29
-
30
- end
31
- end
32
-
@@ -1,50 +0,0 @@
1
- module DefaultWhere
2
- module Range
3
-
4
- PATTERN = {
5
- '-gt' => '>',
6
- '-gte' => '>=',
7
- '-lt' => '<',
8
- '-lte' => '<='
9
- }
10
-
11
- def range_scope(params)
12
- where_string = []
13
- where_hash = {}
14
-
15
- PATTERN.each do |char, sign|
16
- options = params.select{ |key, _| key.end_with?(char) }
17
-
18
- options.each do |key, value|
19
- exp = Regexp.new(char + '$')
20
- real_key = key.sub(exp, '')
21
- agent_key = key.gsub(/[-.]/, '_')
22
-
23
- if column_names.include?(real_key)
24
- real_key = "#{table_name}.#{real_key}"
25
- end
26
-
27
- where_string << "#{real_key} #{sign} :#{agent_key}"
28
-
29
- where_hash.merge! agent_key.to_sym => value
30
- end
31
- end
32
-
33
- where_string = where_string.join ' AND '
34
-
35
- if where_string.present?
36
- condition = [where_string, where_hash]
37
- where(condition)
38
- else
39
- all
40
- end
41
- end
42
-
43
- def filter_range(params)
44
- params.select do |k, _|
45
- k.end_with?(*PATTERN.keys)
46
- end
47
- end
48
-
49
- end
50
- end
data/test/database.yml DELETED
@@ -1,16 +0,0 @@
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