cast_about_for 0.1.0 → 0.1.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.
- checksums.yaml +4 -4
- data/Gemfile +1 -2
- data/README.md +86 -19
- data/lib/cast_about_for/base.rb +1 -2
- data/lib/cast_about_for/search.rb +27 -9
- data/lib/cast_about_for/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 767ed28a1c4419971645523dc4f7c806995eea5b
|
4
|
+
data.tar.gz: 65fe5b3fbc32d318f17a987a75b076e9412c2b72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8f7def0a88a6d6e7f368faa94eaa80400cc735012c60a37ade4c9c2e1cb4f094754d23a1ee51b51cdab3998b5b49870a374801f66f8f689bf2ad934f6e81431
|
7
|
+
data.tar.gz: a4953ee1aaf64abb56975d115871dc2e21d2ad23f8173137ecd0dcf63d23688de4287aa83c1c88cfc06b9d9f1689c3ae2ea1ecaa15d88d52101e33ad017f291b
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -38,14 +38,14 @@ You can always use the `#cast_about_for` class method to query:
|
|
38
38
|
|
39
39
|
``` ruby
|
40
40
|
def index
|
41
|
-
@products = Product.cast_about_for(params
|
41
|
+
@products = Product.cast_about_for(params)
|
42
42
|
end
|
43
43
|
```
|
44
44
|
|
45
45
|
Want to count records? Simple:
|
46
46
|
|
47
47
|
```ruby
|
48
|
-
Product.cast_about_for(params
|
48
|
+
Product.cast_about_for(params).count
|
49
49
|
```
|
50
50
|
|
51
51
|
## cast_about_for_params Configure
|
@@ -56,7 +56,7 @@ If you want to use a column query the SQL look like `SELECT "products".* FROM "p
|
|
56
56
|
|
57
57
|
``` ruby
|
58
58
|
# params = {name: 'iPhone'}
|
59
|
-
# Product.cast_about_for(params
|
59
|
+
# Product.cast_about_for(params)
|
60
60
|
|
61
61
|
class Product < ActiveRecord::Base
|
62
62
|
cast_about_for_params equal: ['name']
|
@@ -64,11 +64,11 @@ class Product < ActiveRecord::Base
|
|
64
64
|
# ...
|
65
65
|
end
|
66
66
|
```
|
67
|
-
|
67
|
+
Or you want to alias of the `name` argument in `params`
|
68
68
|
|
69
69
|
``` ruby
|
70
70
|
# params = { nick_name: "iPhone"}
|
71
|
-
#
|
71
|
+
# Product.cast_about_for(params)
|
72
72
|
|
73
73
|
class Product < ActiveRecord::Base
|
74
74
|
cast_about_for_params equal: [{name: "nick_name"}]
|
@@ -77,13 +77,11 @@ class Product < ActiveRecord::Base
|
|
77
77
|
end
|
78
78
|
```
|
79
79
|
|
80
|
-
|
81
|
-
|
82
|
-
AND you have other columns, you can do it like below.
|
80
|
+
And you have other alias arguments , you can do it like below.
|
83
81
|
|
84
82
|
``` ruby
|
85
83
|
# params = { nick_name: "iPhone", info: "sales", price: "600"}
|
86
|
-
#
|
84
|
+
# Product.cast_about_for(params)
|
87
85
|
|
88
86
|
class Product < ActiveRecord::Base
|
89
87
|
cast_about_for_params equal: [{name: "nick_name"}, {information: "info"}, price]
|
@@ -99,7 +97,7 @@ If you want to use a column query the SQL look like `SELECT "products".* FROM "p
|
|
99
97
|
|
100
98
|
``` ruby
|
101
99
|
# params = {introduce: 'To'}
|
102
|
-
# Product.cast_about_for(params
|
100
|
+
# Product.cast_about_for(params)
|
103
101
|
|
104
102
|
class Product < ActiveRecord::Base
|
105
103
|
cast_about_for_params like: ['introduce']
|
@@ -108,7 +106,7 @@ class Product < ActiveRecord::Base
|
|
108
106
|
end
|
109
107
|
```
|
110
108
|
|
111
|
-
Suck as `Equal`. If you want alias of
|
109
|
+
Suck as `Equal`. If you want alias of `introduce` argument, you can
|
112
110
|
|
113
111
|
``` ruby
|
114
112
|
class Product < ActiveRecord::Base
|
@@ -122,26 +120,84 @@ end
|
|
122
120
|
If you want to use a column query the SQL look like `SELECT "products".* FROM "products" WHERE (production_date >= '2016-07-05 13:09:00')`, you can pass it as an option:
|
123
121
|
|
124
122
|
``` ruby
|
125
|
-
# params = {
|
126
|
-
# Product.cast_about_for(params
|
123
|
+
# params = {production_started_at: '2016-07-05 13:09:00', by_time: 'production_date'}
|
124
|
+
# Product.cast_about_for(params)
|
125
|
+
|
126
|
+
class Product < ActiveRecord::Base
|
127
|
+
cast_about_for_params after: { field: 'by_time', time: "production_started_at" }
|
128
|
+
|
129
|
+
# ...
|
130
|
+
end
|
131
|
+
```
|
132
|
+
In addition, if your `params` not include `by_time` option. Like `params = {production_started_at: '2016-07-05 13:09:00'}`, the query column will be set the default column `created_at`.
|
133
|
+
|
134
|
+
If you want to use multiple column query the SQL look like `SELECT "products".* FROM "products" WHERE (production_date >= '2016-07-05 13:09:00') AND (created_at >= '2016-07-04')`, you can do it like this:
|
135
|
+
|
136
|
+
``` ruby
|
137
|
+
# params = {production_started_at: '2016-07-05 13:09:00', by_time: 'production_date', create_field: 'created_at', production_created_at: '2016-07-04'}
|
138
|
+
# Product.cast_about_for(params)
|
127
139
|
|
128
140
|
class Product < ActiveRecord::Base
|
129
|
-
cast_about_for_params after: {
|
141
|
+
cast_about_for_params after: [{field: 'by_time', time: "production_started_at"}, { field: 'create_field', time: "production_created_at"}]
|
130
142
|
|
131
143
|
# ...
|
132
144
|
end
|
133
145
|
```
|
146
|
+
If you want more columns to query, you can code it like this pattern: `cast_about_for_params after: [{field: 'by_time', time: "production_started_at"}, { field: 'create_field', time: "production_created_at"}, {field: '..', time: '..'}, {...}, ...]`
|
147
|
+
|
148
|
+
If you want to set the field exact column you can do it like this:
|
149
|
+
|
150
|
+
``` ruby
|
151
|
+
# params = {production_started_at: '2016-07-05 13:09:00'}
|
152
|
+
# Product.cast_about_for(params) # The SQL: `SELECT "products".* FROM "products" WHERE (production_date >= '2016-07-05 13:09:00')`
|
153
|
+
|
154
|
+
class Product < ActiveRecord::Base
|
155
|
+
cast_about_for_params after: [{field: {exact: "production_date"}, time: "production_started_at"}]
|
156
|
+
|
157
|
+
# ...
|
158
|
+
end
|
159
|
+
```
|
160
|
+
|
134
161
|
|
135
162
|
### Before
|
136
163
|
|
164
|
+
Just like the above `After`.
|
137
165
|
If you want to use a column query the SQL look like `SELECT "products".* FROM "products" WHERE (production_date <= '2016-07-05 13:09:00')`, you can pass it as an option:
|
138
166
|
|
139
167
|
``` ruby
|
140
|
-
# params = {
|
141
|
-
# Product.cast_about_for(params
|
168
|
+
# params = {production_ended_at: '2016-07-05 13:09:00', by_time: 'production_date'}
|
169
|
+
# Product.cast_about_for(params)
|
170
|
+
|
171
|
+
class Product < ActiveRecord::Base
|
172
|
+
cast_about_for_params before: {field: 'by_time', time: 'production_ended_at'}
|
173
|
+
|
174
|
+
# ...
|
175
|
+
end
|
176
|
+
```
|
177
|
+
In addition, if your `params` not include `by_time` option. Like `params = {production_ended_at: '2016-07-05 13:09:00'}`, the query column will be set the default column `created_at`.
|
178
|
+
|
179
|
+
If you want to use multiple column query the SQL look like `SELECT "products".* FROM "products" WHERE (production_date <= '2016-07-05 13:09:00') AND (created_at <= '2016-07-04')`, you can do it like this:
|
180
|
+
|
181
|
+
``` ruby
|
182
|
+
# params = {production_ended_at: '2016-07-05 13:09:00', by_time: 'production_date', create_field: 'created_at', production_created_at: '2016-07-04'}
|
183
|
+
# Product.cast_about_for(params)
|
142
184
|
|
143
185
|
class Product < ActiveRecord::Base
|
144
|
-
cast_about_for_params
|
186
|
+
cast_about_for_params after: [{field: 'by_time', time: "production_ended_at"}, { field: 'create_field', time: "production_created_at"}]
|
187
|
+
|
188
|
+
# ...
|
189
|
+
end
|
190
|
+
```
|
191
|
+
If you want more columns to query, you can code it like this pattern: `cast_about_for_params after: [{field: 'by_time', time: "production_ended_at"}, { field: 'create_field', time: "production_created_at"}, {field: '..', time: '..'}, {...}, ...]`
|
192
|
+
|
193
|
+
If you want to set the field exact column you can do it like this:
|
194
|
+
|
195
|
+
``` ruby
|
196
|
+
# params = {production_ended_at: '2016-07-05 13:09:00'}
|
197
|
+
# Product.cast_about_for(params) # The SQL: `SELECT "products".* FROM "products" WHERE (production_date <= '2016-07-05 13:09:00')`
|
198
|
+
|
199
|
+
class Product < ActiveRecord::Base
|
200
|
+
cast_about_for_params after: [{field: {exact: "production_date"}, time: "production_ended_at"}]
|
145
201
|
|
146
202
|
# ...
|
147
203
|
end
|
@@ -153,7 +209,7 @@ If you have a column use enum, you can pass it as an option:
|
|
153
209
|
|
154
210
|
``` ruby
|
155
211
|
# params = {category: "food"}
|
156
|
-
# Product.cast_about_for(params
|
212
|
+
# Product.cast_about_for(params)
|
157
213
|
|
158
214
|
class Product < ActiveRecord::Base
|
159
215
|
enum category: {food: 0}
|
@@ -163,6 +219,18 @@ class Product < ActiveRecord::Base
|
|
163
219
|
end
|
164
220
|
```
|
165
221
|
|
222
|
+
Suck as `Equal`. If you want alias of `category` argument, you can
|
223
|
+
|
224
|
+
``` ruby
|
225
|
+
# params = {other_name: "food"}
|
226
|
+
# Product.cast_about_for(params)
|
227
|
+
|
228
|
+
class Product < ActiveRecord::Base
|
229
|
+
cast_about_for_params enum: [{category: 'other_name'}]
|
230
|
+
|
231
|
+
# ...
|
232
|
+
end
|
233
|
+
```
|
166
234
|
## Advanced Usage
|
167
235
|
|
168
236
|
### JSON API
|
@@ -171,7 +239,6 @@ If you are using `JSON API`, you can set in the `#cast_about_for`:
|
|
171
239
|
|
172
240
|
```ruby
|
173
241
|
Product.cast_about_for(params, jsonapi: true) # JSON API
|
174
|
-
Product.cast_about_for(params, jsonapi: false) # or not
|
175
242
|
```
|
176
243
|
|
177
244
|
### Custom Query by Block
|
data/lib/cast_about_for/base.rb
CHANGED
@@ -14,10 +14,9 @@ module CastAboutFor
|
|
14
14
|
raise ArgumentError, "Unknown cast_about_for key: '#{key}" unless CAST_ABOUT_FOR_KEY.include?(key)
|
15
15
|
end
|
16
16
|
|
17
|
-
validate_keys = options.slice(*CAST_ABOUT_FOR_KEY)
|
17
|
+
validate_keys = options.slice(*CAST_ABOUT_FOR_KEY.first(3))
|
18
18
|
|
19
19
|
validate_keys.each do |key, value|
|
20
|
-
next unless value.is_a?(Array)
|
21
20
|
value.each do |attribute|
|
22
21
|
attribute = attribute.is_a?(Hash) ? attribute.first.first : attribute
|
23
22
|
raise ArgumentError, "Unknown column: #{attribute}" unless self.respond_to?(attribute) || self.column_names.include?(attribute.to_s)
|
@@ -23,7 +23,7 @@ module CastAboutFor
|
|
23
23
|
def cast_about_for_by_equal search_values, params, seach_model
|
24
24
|
search_values.each do |search_value|
|
25
25
|
search_column, search_name = obtain_value(search_value)
|
26
|
-
seach_model = seach_model.where("#{search_column} = ?", params[search_name.to_sym]) if params[search_name.to_sym].present?
|
26
|
+
seach_model = seach_model.where("#{self.to_s.tableize}.#{search_column} = ?", params[search_name.to_sym]) if params.present? && params[search_name.to_sym].present?
|
27
27
|
end
|
28
28
|
seach_model
|
29
29
|
end
|
@@ -31,28 +31,39 @@ module CastAboutFor
|
|
31
31
|
def cast_about_for_by_like search_values, params, seach_model
|
32
32
|
search_values.each do |search_value|
|
33
33
|
search_column, search_name = obtain_value(search_value)
|
34
|
-
seach_model = seach_model.where("#{search_column} LIKE ?", "%#{params[search_name.to_sym]}%") if params[search_name.to_sym].present?
|
34
|
+
seach_model = seach_model.where("#{self.to_s.tableize}.#{search_column} LIKE ?", "%#{params[search_name.to_sym]}%") if params.present? && params[search_name.to_sym].present?
|
35
35
|
end
|
36
36
|
seach_model
|
37
37
|
end
|
38
38
|
|
39
39
|
def cast_about_for_by_after search_values, params, seach_model
|
40
|
-
|
41
|
-
|
40
|
+
step = "after"
|
41
|
+
if search_values.is_a?(Array)
|
42
|
+
search_values.each do |search_value|
|
43
|
+
seach_model = find_records_from_by_star(search_value, params, seach_model, step)
|
44
|
+
end
|
45
|
+
else
|
46
|
+
seach_model = find_records_from_by_star(search_values, params, seach_model, step)
|
47
|
+
end
|
42
48
|
seach_model
|
43
49
|
end
|
44
50
|
|
45
51
|
def cast_about_for_by_before search_values, params, seach_model
|
46
|
-
|
47
|
-
|
48
|
-
|
52
|
+
step = "before"
|
53
|
+
if search_values.is_a?(Array)
|
54
|
+
search_values.each do |search_value|
|
55
|
+
seach_model = find_records_from_by_star(search_value, params, seach_model, step)
|
56
|
+
end
|
57
|
+
else
|
58
|
+
seach_model = find_records_from_by_star(search_values, params, seach_model, step)
|
59
|
+
end
|
49
60
|
seach_model
|
50
61
|
end
|
51
62
|
|
52
63
|
def cast_about_for_by_enum search_values, params, seach_model
|
53
64
|
search_values.each do |search_value|
|
54
65
|
search_column, search_name = obtain_value(search_value)
|
55
|
-
seach_model = seach_model.where("#{search_column} = ?", self.send(search_column.to_s.pluralize.to_sym)[params[search_name.to_sym]]) if params[search_name.to_sym].present?
|
66
|
+
seach_model = seach_model.where("#{self.to_s.tableize}.#{search_column} = ?", self.send(search_column.to_s.pluralize.to_sym)[params[search_name.to_sym]]) if params.present? && params[search_name.to_sym].present?
|
56
67
|
end
|
57
68
|
seach_model
|
58
69
|
end
|
@@ -64,7 +75,14 @@ module CastAboutFor
|
|
64
75
|
end
|
65
76
|
end
|
66
77
|
|
67
|
-
def
|
78
|
+
def find_records_from_by_star(search_value, params, seach_model, step)
|
79
|
+
search_column, search_name = obtain_by_star_value(search_value, params)
|
80
|
+
seach_model = seach_model.send("#{step}", params[search_name.to_sym].to_datetime, field: "#{self.to_s.tableize}.#{search_column.to_s}") if params.present? && params[search_name.to_sym].present?
|
81
|
+
seach_model
|
82
|
+
end
|
83
|
+
|
84
|
+
def obtain_by_star_value(value, params)
|
85
|
+
field = value[:field].present? ? (value[:field].is_a?(Hash) ? value[:field][:exact] : params[value[:field].to_sym]) : nil
|
68
86
|
column = field.present? ? field : :created_at
|
69
87
|
raise ArgumentError, "Unknown column: #{column}" unless self.respond_to?(column) || self.column_names.include?(column.to_s)
|
70
88
|
[column.to_sym, value[:time]]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cast_about_for
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- JeskTop
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-09-
|
11
|
+
date: 2016-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -177,7 +177,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
177
177
|
version: '0'
|
178
178
|
requirements: []
|
179
179
|
rubyforge_project:
|
180
|
-
rubygems_version: 2.
|
180
|
+
rubygems_version: 2.5.1
|
181
181
|
signing_key:
|
182
182
|
specification_version: 4
|
183
183
|
summary: query ActiveRecord? Easy.
|