rrimm 0.1.1 → 0.2.0

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