default_where 2.2.0 → 2.3.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 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