picky 0.10.4 → 0.10.5

Sign up to get free protection for your applications and to get access to all the features.
data/lib/picky/loader.rb CHANGED
@@ -217,6 +217,7 @@ module Loader
217
217
  load_relative 'sources/db'
218
218
  load_relative 'sources/csv'
219
219
  load_relative 'sources/delicious'
220
+ load_relative 'sources/couch'
220
221
 
221
222
  # Indexes.
222
223
  #
@@ -247,4 +248,4 @@ module Loader
247
248
  load_relative 'generator'
248
249
  end
249
250
 
250
- end
251
+ end
@@ -0,0 +1,43 @@
1
+ module Sources
2
+
3
+ # Describes a Couch database
4
+ # Give it a databse url and optionally username and password
5
+ #
6
+
7
+ class NoCouchDBGiven < StandardError; end
8
+
9
+ class Couch < Base
10
+
11
+ def initialize *field_names, options
12
+ check_gem
13
+ Hash === options && options[:url] || raise_no_db_given(field_names)
14
+ @db = RestClient::Resource.new options.delete(:url), options
15
+ end
16
+
17
+ def check_gem
18
+ require 'rest_client'
19
+ rescue LoadError
20
+ puts "Rest-client gem missing!\nTo use the CouchDB source, you need to:\n 1. Add the following line to Gemfile:\n gem 'rest-client'\n 2. Then, run:\n bundle update\n"
21
+ exit 1
22
+ end
23
+
24
+ # Harvests the data to index.
25
+ #
26
+ def harvest type, field
27
+ get_data do |doc|
28
+ yield doc['_id'].to_i, doc[field.name.to_s] || next
29
+ end
30
+ end
31
+
32
+ def get_data &block
33
+ resp = @db['_all_docs?include_docs=true'].get
34
+ JSON.parse(resp)['rows'].
35
+ map{|row| row['doc']}.
36
+ each &block
37
+ end
38
+
39
+ def raise_no_db_given field_names
40
+ raise NoCouchDBGiven.new field_names.join(', ')
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sources::Couch do
4
+
5
+ context "without database" do
6
+ it "should fail correctly" do
7
+ lambda { @source = Sources::Couch.new(:a, :b, :c) }.should raise_error(Sources::NoCouchDBGiven)
8
+ end
9
+ end
10
+
11
+ context "with database" do
12
+ before(:each) do
13
+ @source = Sources::Couch.new :a, :b, :c, url: 'http://localhost:5984/picky'
14
+ RestClient::Request.should_receive(:execute).any_number_of_times.and_return %{{"rows":[{"doc":{"_id":"7","a":"a data","b":"b data","c":"c data"}}]}}
15
+ end
16
+
17
+ describe "harvest" do
18
+ it "should yield the right data" do
19
+ field = stub :b, :name => :b
20
+ @source.harvest :anything, field do |id, token|
21
+ id.should eql(7)
22
+ token.should eql('b data')
23
+ end.should have(1).item
24
+ end
25
+ end
26
+
27
+ describe "get_data" do
28
+ it "should yield each line" do
29
+ @source.get_data do |data|
30
+ data.should == { "_id" => "7", "a" => "a data", "b" => "b data", "c" => "c data" }
31
+ end.should have(1).item
32
+ end
33
+ end
34
+ end
35
+ end
@@ -41,12 +41,6 @@ describe Sources::Delicious do
41
41
  post1.title = "VIBRAM - FiveFingers"
42
42
  post1.url = URI.parse('http://www.vibramfivefingers.it/')
43
43
 
44
- # post2 = WWW::Delicious::Post.new
45
- # post2.uid = "d0b16f4b7e998a3386052bc95ad0d695"
46
- # post2.tags = ["floating", "title", "scrolling", "css", "javascript", "ui"]
47
- # post2.title = "Floating Title when Scrolling"
48
- # post2.url = URI.parse('http://mesh.scribblelive.com/Event/Value_Judgements_in_Interface_Design5')
49
-
50
44
  delicious = stub :delicious, :posts_recent => [post1]
51
45
 
52
46
  WWW::Delicious.should_receive(:new).and_return delicious
@@ -80,12 +74,6 @@ describe Sources::Delicious do
80
74
  post1.title = "VIBRAM - FiveFingers"
81
75
  post1.url = URI.parse('http://www.vibramfivefingers.it/')
82
76
 
83
- # post2 = WWW::Delicious::Post.new
84
- # post2.uid = "d0b16f4b7e998a3386052bc95ad0d695"
85
- # post2.tags = ["floating", "title", "scrolling", "css", "javascript", "ui"]
86
- # post2.title = "Floating Title when Scrolling"
87
- # post2.url = URI.parse('http://mesh.scribblelive.com/Event/Value_Judgements_in_Interface_Design5')
88
-
89
77
  delicious = stub :delicious, :posts_recent => [post1]
90
78
 
91
79
  WWW::Delicious.should_receive(:new).and_return delicious
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 10
8
- - 4
9
- version: 0.10.4
8
+ - 5
9
+ version: 0.10.5
10
10
  platform: ruby
11
11
  authors:
12
12
  - Florian Hanke
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-11-02 00:00:00 +01:00
17
+ date: 2010-11-03 00:00:00 +01:00
18
18
  default_executable: picky
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -115,6 +115,7 @@ files:
115
115
  - lib/picky/signals.rb
116
116
  - lib/picky/solr/schema_generator.rb
117
117
  - lib/picky/sources/base.rb
118
+ - lib/picky/sources/couch.rb
118
119
  - lib/picky/sources/csv.rb
119
120
  - lib/picky/sources/db.rb
120
121
  - lib/picky/sources/delicious.rb
@@ -205,6 +206,7 @@ files:
205
206
  - spec/lib/results/live_spec.rb
206
207
  - spec/lib/routing_spec.rb
207
208
  - spec/lib/solr/schema_generator_spec.rb
209
+ - spec/lib/sources/couch_spec.rb
208
210
  - spec/lib/sources/csv_spec.rb
209
211
  - spec/lib/sources/db_spec.rb
210
212
  - spec/lib/sources/delicious_spec.rb
@@ -303,6 +305,7 @@ test_files:
303
305
  - spec/lib/results/live_spec.rb
304
306
  - spec/lib/routing_spec.rb
305
307
  - spec/lib/solr/schema_generator_spec.rb
308
+ - spec/lib/sources/couch_spec.rb
306
309
  - spec/lib/sources/csv_spec.rb
307
310
  - spec/lib/sources/db_spec.rb
308
311
  - spec/lib/sources/delicious_spec.rb