feed_ninja 0.0.3 → 0.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e232c6d96bcbdfda50a9985ab6430c2275dc1608
4
- data.tar.gz: 2a0d5f1d965290ba077c0bb7eceb176d47a53f55
3
+ metadata.gz: 33efbad5fc0d64ded0e3319aca0f866180264cf6
4
+ data.tar.gz: aa93bcb5af9786308807831e3494d2148aa783e4
5
5
  SHA512:
6
- metadata.gz: 0d3c349beea7ef6835ff680fbc5974f569f2e260fffbc42c55a6b61874a5a5236bc4a1bc6a14311341a2a80982048901daac31e42e0f24a87c25bfeeeb0bc9ab
7
- data.tar.gz: 75e0af1da786f34fcd13c7969c7500c49b00299dcc5d76a1a9ed995bf716d4f5fa858aee035bf584d6b30dbdab1baab5369e7039f52edaa268ca25090593c731
6
+ metadata.gz: e4f48c89a57c342f0c7c4689ba519c73cf4f23a1bfc4d389157506a10453278328688e7cbf2b9e4964b9d1f5a6fc872e2e52bbbfc2887b0ae4e7dce2324acc01
7
+ data.tar.gz: 8717dfcd4f7e361a0df1641420480003849ccbafe523971d078ab250d7156aaaddb5baa5c437e3ce4bb98e07528810592e4065b057ff0b112d147464099f42d9
@@ -4,10 +4,10 @@ class AtomIshWriter
4
4
  @entries = []
5
5
  end
6
6
 
7
- def new_entry
7
+ def new_entry(index)
8
8
  item = Entry.new
9
9
  item = yield item
10
- @entries << item;
10
+ @entries[index] = item
11
11
  end
12
12
 
13
13
  def to_s
@@ -2,14 +2,14 @@ require 'rss'
2
2
  require 'open-uri'
3
3
  require 'nokogiri'
4
4
  require 'time'
5
+ require 'thread'
6
+ require 'thwait'
5
7
 
6
8
  class FeedNinja
7
9
  attr_accessor :uri, :picture_xpath, :text_xpath, :title_regex, :limit
8
- attr_accessor :extractor
9
10
 
10
11
  def initialize
11
- @limit = 2
12
- @extractor = Extractor.new
12
+ @limit = 4
13
13
  @writer = AtomIshWriter.new
14
14
  @ninja_prefix = "N! "
15
15
  end
@@ -43,32 +43,33 @@ class FeedNinja
43
43
  if title_regex
44
44
  items = items.select { |item| title_regex =~ item.title }
45
45
  end
46
- items.first(@limit).each do |item|
47
-
48
- #TODO add multithreading here; be sure to use multiple extractor instances
49
- process_item item, doc.feed_type
46
+ threads = []
47
+ items.first(@limit).each_with_index do |item, index|
48
+ threads << Thread.new { process_item(item, doc.feed_type, index) }
50
49
  end
50
+ ThreadsWait.all_waits(*threads)
51
51
  end
52
52
 
53
- def process_item original, feed_type
54
- @writer.new_entry do |entry|
53
+ def process_item(original, feed_type, index)
54
+ @writer.new_entry(index) do |entry|
55
+ extractor = Extractor.new
55
56
  case feed_type
56
57
  when "atom"
57
58
  entry.title = original.title.content
58
59
  entry.link = original.link.href
59
60
  entry.updated = original.updated
60
61
  entry.id = original.id
61
- @extractor.fetch original.link.href
62
+ extractor.fetch original.link.href
62
63
  when "rss"
63
64
  entry.title = original.title
64
65
  entry.link = original.link
65
66
  entry.updated = original.pubDate ? original.pubDate.xmlschema : DateTime.now.to_s
66
67
  entry.id = entry.link
67
- @extractor.fetch original.link
68
+ extractor.fetch original.link
68
69
  end
69
70
 
70
- entry.images = @extractor.extract_images @picture_xpath
71
- entry.summary = @extractor.extract_xml @text_xpath
71
+ entry.images = extractor.extract_images @picture_xpath
72
+ entry.summary = extractor.extract_xml @text_xpath
72
73
 
73
74
  entry #it's kind of fishy to explicitly have to return the entry here...
74
75
  end
data/lib/feed_ninja.rb CHANGED
@@ -6,7 +6,6 @@ def get (url, &block)
6
6
  ninja = FeedNinja.new
7
7
  ninja.instance_eval(&block)
8
8
  ninja.fetch(url)
9
-
10
- puts "Content-type: application/atom+xml\n"
9
+ puts "Content-type: application/atom+xml\n\n"
11
10
  puts ninja.to_s
12
11
  end
data/spec/atomish_spec.rb CHANGED
@@ -8,7 +8,7 @@ describe AtomIshWriter do
8
8
  writer.link = 'http://example.com/atom'
9
9
  writer.updated = DateTime.now.to_s
10
10
 
11
- writer.new_entry do |entry|
11
+ writer.new_entry(0) do |entry|
12
12
  entry = Entry.new
13
13
  entry.title = "title"
14
14
  entry.link = "http://example.com/one"
@@ -18,7 +18,7 @@ describe AtomIshWriter do
18
18
  entry.updated = DateTime.now.to_s
19
19
  end
20
20
 
21
- writer.new_entry do |entry|
21
+ writer.new_entry(1) do |entry|
22
22
  entry = Entry.new
23
23
  entry.title = "title"
24
24
  entry.link = "http://example.com/two"
@@ -4,25 +4,23 @@ require 'feed_ninja'
4
4
  describe FeedNinja do
5
5
  before :each do
6
6
  @ninja = FeedNinja.new
7
- @extractor = double()
8
- @ninja.extractor = @extractor
9
- @extractor.stub(:extract_images)
10
- @extractor.stub(:extract_xml)
7
+ #Extractor.stub(:extract_images => [])
8
+ #Extractor.stub(:extract_xml => "")
11
9
  end
12
10
 
13
11
  it 'should read an atom feed' do
14
- @extractor.should_receive(:fetch).twice
12
+ Extractor.should_receive(:new).exactly(3).times
15
13
  @ninja.fetch 'spec/feeds/atom.xml'
16
14
  end
17
15
 
18
16
  it 'should read an RSS feed' do
19
- @extractor.should_receive(:fetch).twice
17
+ Extractor.should_receive(:new).exactly(3).times
20
18
  @ninja.fetch 'spec/feeds/rss.xml'
21
19
  end
22
20
 
23
21
  it 'should not read more than the given limit' do
24
22
  @ninja.limit = 1
25
- @extractor.should_receive(:fetch).once
23
+ Extractor.should_receive(:new).once
26
24
  @ninja.fetch 'spec/feeds/rss.xml'
27
25
  end
28
26
  end
data/spec/feeds/atom.xml CHANGED
@@ -25,4 +25,11 @@
25
25
  <summary>summary_two</summary>
26
26
  </entry>
27
27
 
28
+ <entry>
29
+ <title>three</title>
30
+ <link href="http://example.com/three"/>
31
+ <id>3</id>
32
+ <updated>2007-07-13T18:30:02Z</updated>
33
+ <summary>summary_three</summary>
34
+ </entry>
28
35
  </feed>
data/spec/feeds/rss.xml CHANGED
@@ -15,5 +15,10 @@
15
15
  <link>http://example.com/two</link>
16
16
  <description>description_two</description>
17
17
  </item>
18
+ <item>
19
+ <title>three</title>
20
+ <link>http://example.com/three</link>
21
+ <description>description_three</description>
22
+ </item>
18
23
  </channel>
19
24
  </rss>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: feed_ninja
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Latzer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-06 00:00:00.000000000 Z
11
+ date: 2014-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec