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 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
 
@@ -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) #=> [:id, :name, :created_at]
133
- # results.filter(:select, :only => :name) #=> :name
134
- # results.filter(:select, :only => [:other, :name] #=> [:name]
135
- # results.filter(:other, :default) #=> :default
136
- # results.filter(:other) #=> KeyError
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)
@@ -1,4 +1,4 @@
1
1
  module Muster
2
2
  # Current version of Muster
3
- VERSION = "0.0.4"
3
+ VERSION = "0.0.5"
4
4
  end
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'
@@ -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
@@ -3,6 +3,7 @@ if ENV['COVERAGE']
3
3
  SimpleCov.start
4
4
  end
5
5
 
6
+ require 'pry'
6
7
  require 'rack/mock'
7
8
  require 'muster'
8
9
 
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
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-10-06 00:00:00.000000000 Z
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: &70339120081800 !ruby/object:Gem::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: *70339120081800
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: &70339120081080 !ruby/object:Gem::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: *70339120081080
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: &70339120080560 !ruby/object:Gem::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: *70339120080560
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: &70339120080100 !ruby/object:Gem::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: *70339120080100
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: &70339120079660 !ruby/object:Gem::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: *70339120079660
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: &70339120079120 !ruby/object:Gem::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: *70339120079120
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.16
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.