laserlemon-search_party 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'echoe'
4
4
 
5
- Echoe.new('search_party', '0.3.2') do |g|
5
+ Echoe.new('search_party', '0.3.3') do |g|
6
6
  g.description = %(Parse your query parameters into more meaningful values)
7
7
  g.url = 'http://github.com/laserlemon/search_party'
8
8
  g.author = 'Steve Richert'
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 3
4
- :patch: 2
4
+ :patch: 3
data/lib/search_party.rb CHANGED
@@ -14,25 +14,31 @@ module LaserLemon
14
14
  end
15
15
 
16
16
  def search_parameters
17
- @search_parameters ||= begin
18
- query_parameters.symbolize_keys.inject({}) do |new_parameters, (key, value)|
19
- parsed_value = parse_search_parameter(value)
20
- if model_name = self.class.search_parameter_models[key]
21
- model = model_name.to_s.classify.constantize
22
- finder = self.class.search_parameter_finders[key]
23
- new_values = [*parsed_value].map{|v| model.send(finder, v) }
24
- new_value = (parsed_value.is_a?(Array) ? new_values.dup : new_values.first)
25
- else
26
- new_value = parsed_value
27
- end
28
- new_parameters.update(key => new_value)
29
- end
30
- end.with_indifferent_access
17
+ @search_parameters ||= parse_hash(query_parameters)
31
18
  end
32
19
 
33
20
  private
34
21
 
35
- def parse_search_parameter(value)
22
+ def parse_hash(hash)
23
+ hash.symbolize_keys.inject({}) do |new_hash, (key, value)|
24
+ parsed_value = case value
25
+ when Hash then parse_hash(value)
26
+ when Array then value.map{|v| parse_value(v) }
27
+ else parse_value(v)
28
+ end
29
+ new_value = if model_name = self.class.search_parameter_models[key]
30
+ model = model_name.to_s.classify.constantize
31
+ finder = self.class.search_parameter_finders[key]
32
+ new_values = [*parsed_value].map{|v| model.send(finder, v) }
33
+ parsed_value.is_a?(Array) ? new_values.dup : new_values.first
34
+ else
35
+ parsed_value
36
+ end
37
+ new_hash.update(key => new_value)
38
+ end.with_indifferent_access
39
+ end
40
+
41
+ def parse_value(value)
36
42
  if p = self.class.search_parameter_patterns.detect{|r,v| r.match(value) }
37
43
  (v = p.last).respond_to?(:call) ? v.call($~) : v
38
44
  else
data/search_party.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{search_party}
5
- s.version = "0.3.2"
5
+ s.version = "0.3.3"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Steve Richert"]
9
- s.date = %q{2009-06-24}
9
+ s.date = %q{2009-07-30}
10
10
  s.description = %q{Parse your query parameters into more meaningful values}
11
11
  s.email = %q{steve@laserlemon.com}
12
12
  s.extra_rdoc_files = ["lib/search_party.rb", "README.rdoc"]
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
15
15
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Search_party", "--main", "README.rdoc"]
16
16
  s.require_paths = ["lib"]
17
17
  s.rubyforge_project = %q{search_party}
18
- s.rubygems_version = %q{1.3.4}
18
+ s.rubygems_version = %q{1.3.5}
19
19
  s.summary = %q{Parse your query parameters into more meaningful values}
20
20
  s.test_files = ["test/search_party_test.rb", "test/test_helper.rb"]
21
21
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: laserlemon-search_party
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steve Richert
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-24 00:00:00 -07:00
12
+ date: 2009-07-30 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -35,6 +35,7 @@ files:
35
35
  - search_party.gemspec
36
36
  has_rdoc: false
37
37
  homepage: http://github.com/laserlemon/search_party
38
+ licenses:
38
39
  post_install_message:
39
40
  rdoc_options:
40
41
  - --line-numbers
@@ -60,7 +61,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
60
61
  requirements: []
61
62
 
62
63
  rubyforge_project: search_party
63
- rubygems_version: 1.2.0
64
+ rubygems_version: 1.3.5
64
65
  signing_key:
65
66
  specification_version: 3
66
67
  summary: Parse your query parameters into more meaningful values