whereable 0.1.1 → 0.1.2
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/CHANGELOG.md +4 -0
- data/README.md +11 -5
- data/lib/whereable.rb +1 -2
- data/lib/whereable/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ea1b122fb55b9fca4d22efd7d32057bbc198ef97f4090bdf8bdaa42da6b15a7f
|
4
|
+
data.tar.gz: 8a0d13ea659a80ca2f34df1e7e970ee6716bed272a36e288472a1827c6b61855
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e66e7d892444322c226af98aedd2639b31d3ebb1444bd6337582c6e40248dd2276b183ad70e6794430f0ed0cfa6618fccc37a9308ddf2a50c53453db74e05ac
|
7
|
+
data.tar.gz: 2552253cb5f31f90d5830a95db7f0f328b05f477e8f31709cb76234ebcfb3782709e322e1fa8c45b48b8645e413ac5d40f0f81045b7521979875d7432fece3bd
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
[](https://badge.fury.io/rb/whereable)
|
2
|
+
|
1
3
|
# Whereable
|
2
4
|
|
3
5
|
Translates where-like filter syntax into an Arel-based ActiveRecord scope, so you can safely use SQL syntax in Rails controller parameters.
|
@@ -47,11 +49,15 @@ User.standard.where("born_on < '1970-11-11'")
|
|
47
49
|
```
|
48
50
|
returns Neo as expected, so we're all good.
|
49
51
|
|
50
|
-
*Meanwhile…* Your black hat API consumer passes in `filter=true) or (
|
52
|
+
*Meanwhile…* Your black hat API consumer passes in `filter=true) or (true`, and …
|
51
53
|
``` ruby
|
52
|
-
User.standard.where("true) or (
|
54
|
+
User.standard.where("true) or (true")
|
55
|
+
```
|
56
|
+
returns **EVERYONE**, because the database query is …
|
57
|
+
``` SQL
|
58
|
+
SELECT "users".* FROM "users" WHERE "users"."role" = 0 AND (true) or (true)
|
53
59
|
```
|
54
|
-
|
60
|
+
*This is how the Matrix gets hacked.*
|
55
61
|
|
56
62
|
Instead add `include Whereable` to your model, and change your controller to:
|
57
63
|
``` ruby
|
@@ -63,11 +69,11 @@ User.standard.whereable("born_on < '1970-11-11'")
|
|
63
69
|
```
|
64
70
|
returns Neo as before, but …
|
65
71
|
``` ruby
|
66
|
-
User.standard.whereable("true) or (
|
72
|
+
User.standard.whereable("true) or (true")
|
67
73
|
```
|
68
74
|
raises exception …
|
69
75
|
``` ruby
|
70
|
-
Whereable::FilterInvalid ('Invalid filter at ) or (
|
76
|
+
Whereable::FilterInvalid ('Invalid filter at ) or (true')
|
71
77
|
```
|
72
78
|
|
73
79
|
### Syntax
|
data/lib/whereable.rb
CHANGED
@@ -4,7 +4,6 @@
|
|
4
4
|
|
5
5
|
require 'whereable/version'
|
6
6
|
require 'active_record'
|
7
|
-
require 'active_support'
|
8
7
|
require 'treetop'
|
9
8
|
require 'whereable.treetop'
|
10
9
|
|
@@ -106,7 +105,7 @@ module Whereable
|
|
106
105
|
)
|
107
106
|
end
|
108
107
|
|
109
|
-
|
108
|
+
module ClassMethods
|
110
109
|
# Parse filter to hash tree using Treetop PEG
|
111
110
|
def whereable_hash_tree(filter)
|
112
111
|
parser = WhereableParser.new
|
data/lib/whereable/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: whereable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mack Earnhardt
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 4.1.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 4.1.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: treetop
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.5.1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 1.5.1
|
41
41
|
description: |
|
42
42
|
Translates where-like filter syntax into an Arel-based ActiveRecord scope,
|
43
43
|
so you can safely use SQL syntax in Rails controller parameters.
|
@@ -69,7 +69,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
69
69
|
requirements:
|
70
70
|
- - ">="
|
71
71
|
- !ruby/object:Gem::Version
|
72
|
-
version: 2.
|
72
|
+
version: 2.3.0
|
73
73
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
75
|
- - ">="
|