solr_collection 0.1.3 → 0.1.4

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.1.4
@@ -3,41 +3,44 @@ require 'will_paginate/collection'
3
3
  #Proxy that delegates all calls to contained subject
4
4
  # except solr related methods in MAPPED_FIELDS
5
5
  class SolrCollection
6
- MAPPED_FIELDS = [:facets, :spellcheck, :total_entries]
6
+ SOLR_FIELDS = [:facets, :spellcheck]
7
7
 
8
- def initialize(solr_result, options={})
8
+ def initialize(collection, options={})
9
9
  options = options.dup
10
10
 
11
- #solr result has results in an array called results
12
- results = if solr_result.respond_to?(:results)
13
- solr_result.results
14
- else
15
- solr_result
16
- end
17
-
18
- #get fields from solr_result or set them to nil
11
+ # get fields from solr result-set or set them to nil
19
12
  @solr_data = {}
20
- MAPPED_FIELDS.each do |field|
13
+ SOLR_FIELDS.each do |field|
21
14
  @solr_data[field] = if options[field]
22
15
  options[field]
23
- elsif solr_result.respond_to?(field)
24
- solr_result.send(field)
16
+ elsif collection.respond_to?(field)
17
+ collection.send(field)
25
18
  else
26
19
  nil
27
20
  end
28
21
  end
29
22
 
30
- # always set a total
31
- @solr_data[:total_entries] ||= (results.respond_to?(:total) ? results.total : results.size)
32
-
33
- #build will_paginate collection from given options
23
+ # copy or generate pagination information
24
+ options[:page] ||= (collection.respond_to?(:current_page) ? collection.current_page : nil)
25
+ options[:per_page] ||= (collection.respond_to?(:per_page) ? collection.per_page : nil)
26
+ options[:total_entries] ||= if collection.respond_to?(:total)
27
+ collection.total
28
+ elsif collection.respond_to?(:total_entries)
29
+ collection.total_entries
30
+ else
31
+ collection.size
32
+ end
34
33
  options = fill_page_and_per_page(options)
35
34
 
35
+ # build paginate-able object
36
36
  @subject = WillPaginate::Collection.new(
37
37
  options[:page],
38
38
  options[:per_page],
39
- @solr_data[:total_entries]
39
+ options[:total_entries]
40
40
  )
41
+
42
+ # solr result-set has results in an array called results
43
+ results = (collection.respond_to?(:results) ? collection.results : collection)
41
44
  @subject.replace(results.to_ary)
42
45
  end
43
46
 
@@ -52,6 +55,10 @@ class SolrCollection
52
55
  end
53
56
  end
54
57
 
58
+ def respond_to?(method)
59
+ @solr_data.key?(method) or @subject.respond_to?(method) or super
60
+ end
61
+
55
62
  private
56
63
 
57
64
  def fill_page_and_per_page(options)
@@ -69,7 +76,7 @@ class SolrCollection
69
76
  def method_missing(method, *args, &block)
70
77
  method = method.to_sym
71
78
  if @solr_data.key? method
72
- @solr_data[method]
79
+ @solr_data[method] or (@subject.send(method, *args, &block) rescue nil)
73
80
  else
74
81
  @subject.send(method, *args, &block)
75
82
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{solr_collection}
8
- s.version = "0.1.3"
8
+ s.version = "0.1.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Michael Grosser"]
12
- s.date = %q{2010-12-08}
12
+ s.date = %q{2010-12-24}
13
13
  s.email = %q{grosser.michael@gmail.com}
14
14
  s.files = [
15
15
  "Gemfile",
@@ -26,7 +26,7 @@ Gem::Specification.new do |s|
26
26
  s.homepage = %q{http://github.com/grosser/solr_collection}
27
27
  s.rdoc_options = ["--charset=UTF-8"]
28
28
  s.require_paths = ["lib"]
29
- s.rubygems_version = %q{1.3.6}
29
+ s.rubygems_version = %q{1.3.7}
30
30
  s.summary = %q{Wrapper for solr results sets then behaves/feels like will_paginate collection}
31
31
  s.test_files = [
32
32
  "spec/solr_collection_spec.rb",
@@ -37,7 +37,7 @@ Gem::Specification.new do |s|
37
37
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
38
38
  s.specification_version = 3
39
39
 
40
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
40
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
41
41
  s.add_runtime_dependency(%q<will_paginate>, [">= 0"])
42
42
  else
43
43
  s.add_dependency(%q<will_paginate>, [">= 0"])
@@ -36,13 +36,26 @@ describe SolrCollection do
36
36
  SolrCollection.new([1,2,3]).current_page.should == 1
37
37
  end
38
38
 
39
- it "knows default per_page" do
39
+ it "has a default for per_page" do
40
40
  SolrCollection.new([1,2,3]).per_page.should == 10
41
41
  end
42
42
 
43
43
  it "can set per_page" do
44
44
  SolrCollection.new([1,2,3], :per_page=>3).per_page.should == 3
45
45
  end
46
+
47
+ it "copies pagination information" do
48
+ page = 2
49
+ per_page = 3
50
+ total_entries = 7
51
+ collection = WillPaginate::Collection.new(page, per_page, total_entries)
52
+ collection = collection.replace([1,2,3,4])
53
+ solr = SolrCollection.new(collection)
54
+ solr.per_page.should == per_page
55
+ solr.current_page.should.should == page
56
+ solr.total_pages.should.should == 3
57
+ solr.total_entries.should.should == total_entries
58
+ end
46
59
  end
47
60
 
48
61
  describe "limit and offset" do
@@ -148,4 +161,22 @@ describe SolrCollection do
148
161
  SolrCollection.new([]).facet_field('x').should == nil
149
162
  end
150
163
  end
164
+
165
+ describe :respond_to do
166
+ it "responds to own methods" do
167
+ SolrCollection.new([]).respond_to?(:has_facet_fields?).should == true
168
+ end
169
+
170
+ it "responds to subjects methods" do
171
+ SolrCollection.new([]).respond_to?(:total_pages).should == true
172
+ end
173
+
174
+ it "responds to missing methods" do
175
+ SolrCollection.new([]).respond_to?(:spellcheck).should == true
176
+ end
177
+
178
+ it "does not respond to unknown methods" do
179
+ SolrCollection.new([]).respond_to?(:foo).should == false
180
+ end
181
+ end
151
182
  end
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # ---- requirements
2
2
  require 'rubygems'
3
3
  $LOAD_PATH << File.expand_path("../lib", File.dirname(__FILE__))
4
- require File.expand_path("../init", File.dirname(__FILE__))
4
+ require File.expand_path("../init", File.dirname(__FILE__))
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solr_collection
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 19
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 1
8
- - 3
9
- version: 0.1.3
9
+ - 4
10
+ version: 0.1.4
10
11
  platform: ruby
11
12
  authors:
12
13
  - Michael Grosser
@@ -14,21 +15,23 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-12-08 00:00:00 +01:00
18
+ date: 2010-12-24 00:00:00 +01:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
22
24
  requirements:
23
25
  - - ">="
24
26
  - !ruby/object:Gem::Version
27
+ hash: 3
25
28
  segments:
26
29
  - 0
27
30
  version: "0"
31
+ name: will_paginate
32
+ prerelease: false
28
33
  type: :runtime
29
34
  version_requirements: *id001
30
- prerelease: false
31
- name: will_paginate
32
35
  description:
33
36
  email: grosser.michael@gmail.com
34
37
  executables: []
@@ -58,23 +61,27 @@ rdoc_options:
58
61
  require_paths:
59
62
  - lib
60
63
  required_ruby_version: !ruby/object:Gem::Requirement
64
+ none: false
61
65
  requirements:
62
66
  - - ">="
63
67
  - !ruby/object:Gem::Version
68
+ hash: 3
64
69
  segments:
65
70
  - 0
66
71
  version: "0"
67
72
  required_rubygems_version: !ruby/object:Gem::Requirement
73
+ none: false
68
74
  requirements:
69
75
  - - ">="
70
76
  - !ruby/object:Gem::Version
77
+ hash: 3
71
78
  segments:
72
79
  - 0
73
80
  version: "0"
74
81
  requirements: []
75
82
 
76
83
  rubyforge_project:
77
- rubygems_version: 1.3.6
84
+ rubygems_version: 1.3.7
78
85
  signing_key:
79
86
  specification_version: 3
80
87
  summary: Wrapper for solr results sets then behaves/feels like will_paginate collection