solr_collection 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
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