rrimm 0.1.1 → 0.2.0

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: 1c13bf813e548a68a49472947ae6c453580548a5
4
- data.tar.gz: 864bdd0041627f75e9a09fa6645d6e73be6dda9d
3
+ metadata.gz: fe165abd85bdd5c571e37e41e89763e500c94a8e
4
+ data.tar.gz: 4d1f772e68e92b5a7a6a078aaa5f486919f37522
5
5
  SHA512:
6
- metadata.gz: 0a1b16871bd6cba0bc09623acea7a34c9584b6ae4d2daa94d52b753c968dcc55677e4bcfa3d959b84dade4c40193ddd21a3c75b976a622220e98f9c3bfea3935
7
- data.tar.gz: 59866fbf2487a5990570a0a90e1e0445d719d57f092824e9fcff4da78f47a1c3f0ce908127d4e751e1a31027794efc3ad7a8ea8a4f882841aca8a879c8c33aef
6
+ metadata.gz: 8a8a4626df8cedb7ffd9677fbfb1c97426755c718cdea89f8fa63c7d5821e322a4ca81925949a912a418779017b5cb318ab05880d21b20f6f2f4ff1a41af44d5
7
+ data.tar.gz: 610e769fcf85197cae7429e42f57e80e809617b90934dba572bebbf8b92f2aa7f0534765a11d7f919e157635aeaf5f03d59933d7bbaaaaeacecb74a50574f3e4
@@ -0,0 +1,2 @@
1
+ coverage/
2
+ *gem
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rrimm (0.1.1)
4
+ rrimm (0.2.0)
5
+ feedzirra
5
6
  open_uri_redirections
6
7
  parallel
7
8
 
@@ -14,10 +15,20 @@ GEM
14
15
  simplecov (>= 0.7)
15
16
  term-ansicolor
16
17
  thor
18
+ curb (0.8.5)
17
19
  diff-lcs (1.2.5)
18
20
  docile (1.1.3)
21
+ feedzirra (0.7.1)
22
+ curb (~> 0.8.1)
23
+ loofah (~> 1.2.1)
24
+ sax-machine (~> 0.2.1)
25
+ loofah (1.2.1)
26
+ nokogiri (>= 1.4.4)
19
27
  mime-types (2.1)
28
+ mini_portile (0.5.2)
20
29
  multi_json (1.9.0)
30
+ nokogiri (1.6.1)
31
+ mini_portile (~> 0.5.0)
21
32
  open_uri_redirections (0.1.4)
22
33
  parallel (0.9.2)
23
34
  rest-client (1.6.7)
@@ -30,6 +41,8 @@ GEM
30
41
  rspec-expectations (2.14.5)
31
42
  diff-lcs (>= 1.1.3, < 2.0)
32
43
  rspec-mocks (2.14.6)
44
+ sax-machine (0.2.1)
45
+ nokogiri (~> 1.6.0)
33
46
  simplecov (0.8.2)
34
47
  docile (~> 1.1.0)
35
48
  multi_json
data/bin/rrimm CHANGED
@@ -11,7 +11,6 @@ require 'optparse'
11
11
  options = {
12
12
  'action' => :sync,
13
13
  'conf_file' => File.join(ENV['HOME'], '.config', 'rrimm', 'rrimm.rb'),
14
- 'concurrency' => 1,
15
14
  }
16
15
 
17
16
  OptionParser.new do |opts|
@@ -46,7 +45,7 @@ fetcher = RRImm::Fetcher.new(conf)
46
45
 
47
46
  case options['action']
48
47
  when :sync
49
- fetcher.parallel_fetch(options['concurrency'])
48
+ fetcher.fetch(options['concurrency'])
50
49
  when :show
51
50
  conf.show
52
51
  end
@@ -3,5 +3,3 @@ require_relative 'rrimm/config'
3
3
  require_relative 'rrimm/fetcher'
4
4
  require_relative 'rrimm/item_formatter'
5
5
  require_relative 'rrimm/cache'
6
- require_relative 'rrimm/generic_item'
7
- require_relative 'rrimm/generic_feed'
@@ -1,4 +1,4 @@
1
- require 'rss'
1
+ require 'feedzirra'
2
2
  require 'open-uri'
3
3
  require 'open_uri_redirections'
4
4
  require 'parallel'
@@ -12,13 +12,21 @@ module RRImm
12
12
  @config = config
13
13
  end
14
14
 
15
+ def fetch(concurrency=nil)
16
+ if concurrency
17
+ parallel_fetch(concurrency)
18
+ else
19
+ linear_fetch
20
+ end
21
+ end
22
+
15
23
  def parallel_fetch(concurrency)
16
24
  Parallel.map(@config.feeds, :in_threads => concurrency) do |name,feed_config|
17
25
  fetch_feed(name, feed_config)
18
26
  end
19
27
  end
20
28
 
21
- def fetch
29
+ def linear_fetch
22
30
  @config.feeds.map do |name,feed_config|
23
31
  fetch_feed(name, feed_config)
24
32
  end
@@ -27,14 +35,11 @@ module RRImm
27
35
  def fetch_feed(name, feed_config)
28
36
  last_read = Time.at(@config.get_cache.read(feed_config))
29
37
  puts name
30
- open(feed_config.uri, :allow_redirections => :safe) do |rss|
31
- feed = RSS::Parser.parse(rss)
32
- feed = GenericFeed.new feed
33
- items = feed.items.select { |item| item.date > last_read }
34
- last_read = items.collect { |item| item.date }.max unless items.empty?
35
- items.each do |item|
36
- feed_config.format(feed, item)
37
- end
38
+ feed = Feedzirra::Feed.fetch_and_parse(feed_config.uri)
39
+ items = feed.entries.select { |item| item.published > last_read }
40
+ last_read = items.collect { |item| item.published }.max unless items.empty?
41
+ items.each do |item|
42
+ feed_config.format(feed, item)
38
43
  end
39
44
  @config.get_cache.save(feed_config, last_read.to_i)
40
45
  end
@@ -2,7 +2,7 @@ module RRImm
2
2
  module ItemFormatter
3
3
  class Default
4
4
  def format(feed, item, feed_config, pipe)
5
- pipe.write "#{feed.channel.title}: #{item.title} (#{item.date})"
5
+ pipe.write "#{feed.title}: #{item.title} (#{item.published})"
6
6
  pipe.write "\n"
7
7
  end
8
8
  end
@@ -29,9 +29,9 @@ module RRImm
29
29
  pipe.write "Subject: #{subject(feed, item, feed_config)}\n"
30
30
  pipe.write "Content-Type: text/html;\n"
31
31
  pipe.write "\n"
32
- pipe.write item.link
32
+ pipe.write item.url
33
33
  pipe.write "\n\n"
34
- pipe.write item.content if item.content
34
+ pipe.write (item.content || item.summary)
35
35
  pipe.write "\n"
36
36
  end
37
37
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'rrimm'
3
- s.version = '0.1.1'
3
+ s.version = '0.2.0'
4
4
  s.licenses = ['Apache Licence v2']
5
5
  s.summary = "RSS to email tool"
6
6
  s.description = "imm reboot in ruby. Retrieve rss feeds and send them by email"
@@ -15,4 +15,5 @@ Gem::Specification.new do |s|
15
15
  s.add_development_dependency 'coveralls'
16
16
  s.add_dependency 'open_uri_redirections'
17
17
  s.add_dependency 'parallel'
18
+ s.add_dependency 'feedzirra'
18
19
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rrimm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Grégoire Seux
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-08 00:00:00.000000000 Z
11
+ date: 2014-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: feedzirra
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  description: imm reboot in ruby. Retrieve rss feeds and send them by email
70
84
  email: rrimm@familleseux.net
71
85
  executables:
@@ -74,6 +88,7 @@ extensions: []
74
88
  extra_rdoc_files: []
75
89
  files:
76
90
  - .coveralls.yml
91
+ - .gitignore
77
92
  - .travis.yml
78
93
  - Gemfile
79
94
  - Gemfile.lock
@@ -86,8 +101,6 @@ files:
86
101
  - lib/rrimm/config.rb
87
102
  - lib/rrimm/feed.rb
88
103
  - lib/rrimm/fetcher.rb
89
- - lib/rrimm/generic_feed.rb
90
- - lib/rrimm/generic_item.rb
91
104
  - lib/rrimm/item_formatter.rb
92
105
  - lib/rrimm/item_formatter/default.rb
93
106
  - lib/rrimm/item_formatter/mail.rb
@@ -116,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
116
129
  version: '0'
117
130
  requirements: []
118
131
  rubyforge_project:
119
- rubygems_version: 2.0.3
132
+ rubygems_version: 2.2.2
120
133
  signing_key:
121
134
  specification_version: 4
122
135
  summary: RSS to email tool
@@ -1,20 +0,0 @@
1
- module RRImm
2
- class GenericFeed
3
- def initialize(feed)
4
- @underlying = feed
5
- @items = feed.items.map {|item| GenericItem.new item }
6
- case feed
7
- when RSS::Rss
8
- @title = feed.channel.title
9
- when RSS::Atom
10
- end
11
- end
12
-
13
- attr_accessor :underlying
14
- attr_accessor :title
15
-
16
- attr_accessor :items
17
-
18
-
19
- end
20
- end
@@ -1,38 +0,0 @@
1
- module RRImm
2
- class GenericItem
3
- def initialize(item)
4
- @underlying = item
5
- case item
6
- when RSS::Rss::Channel::Item
7
- @date = item.date
8
- @title = item.title
9
- @link = item.link
10
- @content = item.description
11
- @author = item.author
12
- when RSS::Atom::Feed::Entry
13
- @date = item.date || item.updated.content
14
- @title = item.title.content
15
- @link = item.link
16
- @content = item.content
17
- @author = item.author
18
- else
19
- puts item.class
20
- fail "Please code this case !"
21
- @updated_date = item.updated_date
22
- @content = item.content
23
- end
24
- end
25
-
26
- attr_accessor :underlying
27
-
28
- attr_accessor :title
29
- attr :updated_date, :date
30
- attr_accessor :link
31
- attr_accessor :content
32
- attr_accessor :author
33
-
34
- def date
35
- @updated_date || @date
36
- end
37
- end
38
- end