muster 0.0.4 → 0.0.5
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.
- data/README.md +1 -0
- data/lib/muster/results.rb +28 -9
- data/lib/muster/version.rb +1 -1
- data/muster.gemspec +1 -0
- data/spec/muster/results_spec.rb +33 -0
- data/spec/spec_helper.rb +1 -0
- metadata +61 -15
data/README.md
CHANGED
@@ -12,6 +12,7 @@ easier consumption in things like AR/DataMapper scopes and queries, making API d
|
|
12
12
|
query = env['muster.query']
|
13
13
|
|
14
14
|
@people = Person.select( query[:select] ).order( query[:order] )
|
15
|
+
@people = Person.select( query.select ).order( query.order )
|
15
16
|
|
16
17
|
## Strategies
|
17
18
|
|
data/lib/muster/results.rb
CHANGED
@@ -7,6 +7,7 @@ module Muster
|
|
7
7
|
# Query parsed results helper class
|
8
8
|
#
|
9
9
|
# As with most Muster classes, all hashes returned and options specified support with indifferent access.
|
10
|
+
# You can also access results using the dot notation for the key name.
|
10
11
|
#
|
11
12
|
# @param data [Hash] the hash of query string results after parsing to load
|
12
13
|
#
|
@@ -17,6 +18,8 @@ module Muster
|
|
17
18
|
#
|
18
19
|
# # Filter values one at a time
|
19
20
|
# results.data #=> { 'select' => [:id, :name, :created_at] }
|
21
|
+
# results[:select] #=> [:id, :name, :created_at]
|
22
|
+
# results.select #=> [:id, :name, :created_at]
|
20
23
|
# results.filter(:select, :only => [:id, :name]) #=> [:id, :name]
|
21
24
|
# results.filter(:select, :except => :created_at) #=> [:id, :name]
|
22
25
|
# results.filter(:page, 1) #=> 1
|
@@ -26,6 +29,8 @@ module Muster
|
|
26
29
|
# results.add_filter(:select, :only => [:id, :name])
|
27
30
|
# results.add_filter(:page, 1)
|
28
31
|
# results.filtered #=> { 'select' => [:id, :name], 'page' => 1 }
|
32
|
+
# results.filtered[:select] #=> [:id, :name]
|
33
|
+
# results.filtered.select #=> [:id, :name]
|
29
34
|
class Results < ActiveSupport::HashWithIndifferentAccess
|
30
35
|
|
31
36
|
# @attribute [r] data
|
@@ -75,8 +80,8 @@ module Muster
|
|
75
80
|
#
|
76
81
|
# @example
|
77
82
|
#
|
78
|
-
# results.add_filter(:select, :only => [:id, :name]
|
79
|
-
# results.add_filter(:select, :except => [:id]
|
83
|
+
# results.add_filter(:select, :only => [:id, :name])
|
84
|
+
# results.add_filter(:select, :except => [:id])
|
80
85
|
# results.add_filter(:page, 1)
|
81
86
|
def add_filter( key, *options )
|
82
87
|
self.filters[key] = options
|
@@ -90,7 +95,7 @@ module Muster
|
|
90
95
|
#
|
91
96
|
# @example
|
92
97
|
#
|
93
|
-
# results.add_filter(:select, :only => [:id, :name]
|
98
|
+
# results.add_filter(:select, :only => [:id, :name])
|
94
99
|
# results.add_dilter(:page, 1)
|
95
100
|
# results.filtered #=> { 'select' => [:id, :name], 'page' => 1 }
|
96
101
|
def filtered
|
@@ -127,13 +132,13 @@ module Muster
|
|
127
132
|
#
|
128
133
|
# @example
|
129
134
|
#
|
130
|
-
# data = { :select => [:id, :name, :created_at]
|
135
|
+
# data = { :select => [:id, :name, :created_at] }
|
131
136
|
# results = Muster::Results.new(data)
|
132
|
-
# results.filter(:select)
|
133
|
-
# results.filter(:select, :only => :name)
|
134
|
-
# results.filter(:select, :only => [:other, :name] #=> [:name]
|
135
|
-
# results.filter(:other, :default)
|
136
|
-
# results.filter(:other)
|
137
|
+
# results.filter(:select) #=> [:id, :name, :created_at]
|
138
|
+
# results.filter(:select, :only => :name) #=> :name
|
139
|
+
# results.filter(:select, :only => [:other, :name]) #=> [:name]
|
140
|
+
# results.filter(:other, :default) #=> :default
|
141
|
+
# results.filter(:other) #=> KeyError
|
137
142
|
def filter( key, *options )
|
138
143
|
if options.present? && options.first.instance_of?(Hash)
|
139
144
|
options = options.first.with_indifferent_access
|
@@ -150,6 +155,20 @@ module Muster
|
|
150
155
|
|
151
156
|
private
|
152
157
|
|
158
|
+
def method_missing(meth, *args, &block)
|
159
|
+
if self.has_key?(meth)
|
160
|
+
value = self[meth]
|
161
|
+
|
162
|
+
if value.kind_of?(Hash)
|
163
|
+
value = OpenStruct.new(value)
|
164
|
+
end
|
165
|
+
|
166
|
+
return value
|
167
|
+
end
|
168
|
+
|
169
|
+
super
|
170
|
+
end
|
171
|
+
|
153
172
|
def filter_excluded_values( key, excluded )
|
154
173
|
value = self[key]
|
155
174
|
excluded = Array.wrap(excluded)
|
data/lib/muster/version.rb
CHANGED
data/muster.gemspec
CHANGED
@@ -18,6 +18,7 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.add_dependency 'activesupport', '~> 3.0'
|
19
19
|
gem.add_dependency 'rack', '~> 1.4'
|
20
20
|
|
21
|
+
gem.add_development_dependency 'pry'
|
21
22
|
gem.add_development_dependency 'rspec', '~> 2.11.0'
|
22
23
|
gem.add_development_dependency 'redcarpet', '~> 2.1'
|
23
24
|
gem.add_development_dependency 'simplecov'
|
data/spec/muster/results_spec.rb
CHANGED
@@ -84,4 +84,37 @@ describe Muster::Results do
|
|
84
84
|
end
|
85
85
|
end
|
86
86
|
end
|
87
|
+
|
88
|
+
describe '#method_missing' do
|
89
|
+
context 'with matching key' do
|
90
|
+
it 'returns the value of the key index' do
|
91
|
+
results.name.should eq results[:name]
|
92
|
+
results.name.should eq [1, 2, 3]
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'returns an OpenStruct for a hash' do
|
96
|
+
data[:pagination] = {:page => 1, :per_page => 10}
|
97
|
+
|
98
|
+
results.pagination.should be_an_instance_of(OpenStruct)
|
99
|
+
results.pagination.page.should eq 1
|
100
|
+
results.pagination.per_page.should eq 10
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context 'without matching key' do
|
105
|
+
it 'returns NoMethodError' do
|
106
|
+
expect{ results.foop }.to raise_error(NoMethodError)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
context 'with filtered results' do
|
111
|
+
it 'returns Results with method_missing support' do
|
112
|
+
data[:name] = [1, 2, 3]
|
113
|
+
|
114
|
+
results.add_filter(:name, :only => [1])
|
115
|
+
results.filtered.name.should eq [1]
|
116
|
+
results.filtered[:name].should eq [1]
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
87
120
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: muster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '3.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: rack
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ~>
|
@@ -32,10 +37,31 @@ dependencies:
|
|
32
37
|
version: '1.4'
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '1.4'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: pry
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
36
62
|
- !ruby/object:Gem::Dependency
|
37
63
|
name: rspec
|
38
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
39
65
|
none: false
|
40
66
|
requirements:
|
41
67
|
- - ~>
|
@@ -43,10 +69,15 @@ dependencies:
|
|
43
69
|
version: 2.11.0
|
44
70
|
type: :development
|
45
71
|
prerelease: false
|
46
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 2.11.0
|
47
78
|
- !ruby/object:Gem::Dependency
|
48
79
|
name: redcarpet
|
49
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
50
81
|
none: false
|
51
82
|
requirements:
|
52
83
|
- - ~>
|
@@ -54,10 +85,15 @@ dependencies:
|
|
54
85
|
version: '2.1'
|
55
86
|
type: :development
|
56
87
|
prerelease: false
|
57
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '2.1'
|
58
94
|
- !ruby/object:Gem::Dependency
|
59
95
|
name: simplecov
|
60
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
61
97
|
none: false
|
62
98
|
requirements:
|
63
99
|
- - ! '>='
|
@@ -65,10 +101,15 @@ dependencies:
|
|
65
101
|
version: '0'
|
66
102
|
type: :development
|
67
103
|
prerelease: false
|
68
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
69
110
|
- !ruby/object:Gem::Dependency
|
70
111
|
name: yard
|
71
|
-
requirement:
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
72
113
|
none: false
|
73
114
|
requirements:
|
74
115
|
- - ~>
|
@@ -76,7 +117,12 @@ dependencies:
|
|
76
117
|
version: 0.8.2
|
77
118
|
type: :development
|
78
119
|
prerelease: false
|
79
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 0.8.2
|
80
126
|
description: Muster is a gem that turns query strings of varying formats into data
|
81
127
|
structures suitable for easier consumption in AR/DataMapper scopes and queries.
|
82
128
|
email:
|
@@ -133,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
179
|
version: '0'
|
134
180
|
requirements: []
|
135
181
|
rubyforge_project:
|
136
|
-
rubygems_version: 1.8.
|
182
|
+
rubygems_version: 1.8.24
|
137
183
|
signing_key:
|
138
184
|
specification_version: 3
|
139
185
|
summary: Muster various query string formats into a more reusable data structure.
|