muster 0.0.9 → 0.0.10

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.
@@ -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