muster 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 99866bb235ad97109e1b1a3d2cf79d83c24c8f80
4
+ data.tar.gz: 21cd93ae1d09692932c1acb43ffd7800bbc9e3a6
5
+ SHA512:
6
+ metadata.gz: 0e2332f2f2b14034b6298c8803277565c0820ce1f878c7526567d018cacf53d17183c44203ca622bf4565087d56c45ef3888bcf2aabeb0c607c0dcad28612d7c
7
+ data.tar.gz: 63d92c6acdb5e31848d4a0d3292eb26b2507da6f8d0123f73a776f81ef4065befee3c0175c14050c792c1a140a008c3468b7c650f41dabc5c0e0adb4ddad33b1
data/Authors CHANGED
@@ -1,2 +1,3 @@
1
1
  - Chris Laco <claco@chrislaco.com>
2
2
  - Nikica Jokić <neektza@gmail.com>
3
+ - Doug Yoder <doug@drydevelopment.com>
data/Changes CHANGED
@@ -1,3 +1,7 @@
1
+ = 0.0.10
2
+
3
+ * Added support for 'IS NULL' queries in ActiveRecord Strategy (drydevelopment)
4
+
1
5
  = 0.0.9
2
6
 
3
7
  * Update .gitignore for .ruby-version/gemset files
@@ -29,7 +29,7 @@ module Muster
29
29
  # @return [Muster::Results]
30
30
  #
31
31
  # @example
32
- #
32
+ #
33
33
  # results = strategy.parse('select=id,name&where=status:new&order=name:desc')
34
34
  #
35
35
  # # { 'select' => ['id', 'name'], :where => {'status' => 'new}, :order => 'name desc' }
@@ -97,12 +97,14 @@ module Muster
97
97
  def parse_pagination( query_string )
98
98
  strategy = Muster::Strategies::Pagination.new(:fields => [:pagination, :limit, :offset])
99
99
  results = strategy.parse(query_string)
100
-
100
+
101
101
  return results
102
102
  end
103
103
 
104
104
  # Returns where clauses for AR queries
105
105
  #
106
+ # - In the case a NULL or NIL query string value is included (case insensitive), a `nil` object is substituted for the String value.
107
+ #
106
108
  # @param query_string [String] the original query string to parse where statements from
107
109
  #
108
110
  # @return [Hash]
@@ -110,10 +112,20 @@ module Muster
110
112
  # @example
111
113
  #
112
114
  # value = self.parse_where('where=id:1') #=> {'id' => '1'}
115
+ # value = self.parse_where('where=id:null') #=> {'id' => nil}
116
+ # value = self.parse_where('where=id:nil') #=> {'id' => nil}
113
117
  def parse_where( query_string )
114
118
  strategy = Muster::Strategies::FilterExpression.new(:field => :where)
115
119
  results = strategy.parse(query_string)
116
120
 
121
+ nil_regex = /^(null|nil)$/i
122
+
123
+ if results[:where] && !results[:where].values.grep(nil_regex).empty?
124
+ results[:where].each do |key, value|
125
+ results[:where][key] = nil if value.match(nil_regex)
126
+ end
127
+ end
128
+
117
129
  return results[:where] || {}
118
130
  end
119
131
 
@@ -132,7 +144,7 @@ module Muster
132
144
 
133
145
  return results[:joins] || {}
134
146
  end
135
-
147
+
136
148
  # Returns includes clauses for AR queries
137
149
  #
138
150
  # @param query_string [String] the original query string to parse join statements from
@@ -1,4 +1,4 @@
1
1
  module Muster
2
2
  # Current version of Muster
3
- VERSION = "0.0.9"
3
+ VERSION = "0.0.10"
4
4
  end
@@ -53,7 +53,7 @@ describe Muster::Strategies::ActiveRecord do
53
53
  it 'returns single value in Array' do
54
54
  subject.parse('joins=author')[:joins].should eq ['author']
55
55
  end
56
-
56
+
57
57
  it 'returns multiple values in Array' do
58
58
  subject.parse('joins=author,voter')[:joins].should eq ['author', 'voter']
59
59
  end
@@ -61,7 +61,7 @@ describe Muster::Strategies::ActiveRecord do
61
61
  it 'returns a nested hash of separated values' do
62
62
  subject.parse('joins=author.country.name')[:joins].should eq [{'author' => { 'country' => 'name'}}]
63
63
  end
64
-
64
+
65
65
  it 'returns an array of nested hashes' do
66
66
  subject.parse('joins=author.country.name,activity.rule')[:joins].should eq [{'author' => { 'country' => 'name'}}, {'activity' => 'rule'}]
67
67
  end
@@ -71,7 +71,7 @@ describe Muster::Strategies::ActiveRecord do
71
71
  it 'returns single value in Array' do
72
72
  subject.parse('includes=author')[:includes].should eq ['author']
73
73
  end
74
-
74
+
75
75
  it 'returns multiple values in Array' do
76
76
  subject.parse('includes=author,voter')[:includes].should eq ['author', 'voter']
77
77
  end
@@ -79,7 +79,7 @@ describe Muster::Strategies::ActiveRecord do
79
79
  it 'returns a nested hash of separated values' do
80
80
  subject.parse('includes=author.country.name')[:includes].should eq [{'author' => { 'country' => 'name'}}]
81
81
  end
82
-
82
+
83
83
  it 'returns an array of nested hashes' do
84
84
  subject.parse('includes=author.country.name,activity.rule')[:includes].should eq [{'author' => { 'country' => 'name'}}, {'activity' => 'rule'}]
85
85
  end
@@ -139,6 +139,15 @@ describe Muster::Strategies::ActiveRecord do
139
139
  subject.parse('where=id:1')[:where].should == {'id' => '1'}
140
140
  end
141
141
 
142
+ it 'returns a single value as nil in a hash' do
143
+ subject.parse('where=id:null')[:where].should == {'id' => nil}
144
+ subject.parse('where=id:NULL')[:where].should == {'id' => nil}
145
+ subject.parse('where=id:Null')[:where].should == {'id' => nil}
146
+ subject.parse('where=id:nil')[:where].should == {'id' => nil}
147
+ subject.parse('where=id:NIL')[:where].should == {'id' => nil}
148
+ subject.parse('where=id:Nil')[:where].should == {'id' => nil}
149
+ end
150
+
142
151
  it 'returns values as an Array in a hash' do
143
152
  subject.parse('where=id:1&where=id:2')[:where].should == {'id' => ['1', '2']}
144
153
  end
metadata CHANGED
@@ -1,126 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: muster
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
5
- prerelease:
4
+ version: 0.0.10
6
5
  platform: ruby
7
6
  authors:
8
7
  - Christopher H. Laco
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-10-11 00:00:00.000000000 Z
11
+ date: 2015-08-30 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: activesupport
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '3.0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '3.0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rack
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ~>
31
+ - - "~>"
36
32
  - !ruby/object:Gem::Version
37
33
  version: '1.4'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ~>
38
+ - - "~>"
44
39
  - !ruby/object:Gem::Version
45
40
  version: '1.4'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: pry
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rspec
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ~>
59
+ - - "~>"
68
60
  - !ruby/object:Gem::Version
69
61
  version: 2.11.0
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ~>
66
+ - - "~>"
76
67
  - !ruby/object:Gem::Version
77
68
  version: 2.11.0
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: redcarpet
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ~>
73
+ - - "~>"
84
74
  - !ruby/object:Gem::Version
85
75
  version: '2.1'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ~>
80
+ - - "~>"
92
81
  - !ruby/object:Gem::Version
93
82
  version: '2.1'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: simplecov
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - ">="
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - ">="
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: yard
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ~>
101
+ - - "~>"
116
102
  - !ruby/object:Gem::Version
117
103
  version: 0.8.2
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ~>
108
+ - - "~>"
124
109
  - !ruby/object:Gem::Version
125
110
  version: 0.8.2
126
111
  description: Muster is a gem that turns query strings of varying formats into data
@@ -131,9 +116,9 @@ executables: []
131
116
  extensions: []
132
117
  extra_rdoc_files: []
133
118
  files:
134
- - .gitignore
135
- - .rspec
136
- - .yardopts
119
+ - ".gitignore"
120
+ - ".rspec"
121
+ - ".yardopts"
137
122
  - Authors
138
123
  - Changes
139
124
  - Gemfile
@@ -164,27 +149,26 @@ files:
164
149
  - spec/spec_helper.rb
165
150
  homepage: https://github.com/claco/muster
166
151
  licenses: []
152
+ metadata: {}
167
153
  post_install_message:
168
154
  rdoc_options: []
169
155
  require_paths:
170
156
  - lib
171
157
  required_ruby_version: !ruby/object:Gem::Requirement
172
- none: false
173
158
  requirements:
174
- - - ! '>='
159
+ - - ">="
175
160
  - !ruby/object:Gem::Version
176
161
  version: '0'
177
162
  required_rubygems_version: !ruby/object:Gem::Requirement
178
- none: false
179
163
  requirements:
180
- - - ! '>='
164
+ - - ">="
181
165
  - !ruby/object:Gem::Version
182
166
  version: '0'
183
167
  requirements: []
184
168
  rubyforge_project:
185
- rubygems_version: 1.8.25
169
+ rubygems_version: 2.4.6
186
170
  signing_key:
187
- specification_version: 3
171
+ specification_version: 4
188
172
  summary: Muster various query string formats into a more reusable data structure.
189
173
  test_files:
190
174
  - spec/muster/rack_spec.rb