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 +4 -4
- data/.gitignore +2 -0
- data/Gemfile.lock +14 -1
- data/bin/rrimm +1 -2
- data/lib/rrimm.rb +0 -2
- data/lib/rrimm/fetcher.rb +15 -10
- data/lib/rrimm/item_formatter/default.rb +1 -1
- data/lib/rrimm/item_formatter/mail.rb +2 -2
- data/rrimm.gemspec +2 -1
- metadata +18 -5
- data/lib/rrimm/generic_feed.rb +0 -20
- data/lib/rrimm/generic_item.rb +0 -38
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe165abd85bdd5c571e37e41e89763e500c94a8e
|
4
|
+
data.tar.gz: 4d1f772e68e92b5a7a6a078aaa5f486919f37522
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a8a4626df8cedb7ffd9677fbfb1c97426755c718cdea89f8fa63c7d5821e322a4ca81925949a912a418779017b5cb318ab05880d21b20f6f2f4ff1a41af44d5
|
7
|
+
data.tar.gz: 610e769fcf85197cae7429e42f57e80e809617b90934dba572bebbf8b92f2aa7f0534765a11d7f919e157635aeaf5f03d59933d7bbaaaaeacecb74a50574f3e4
|
data/.gitignore
ADDED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rrimm (0.
|
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.
|
48
|
+
fetcher.fetch(options['concurrency'])
|
50
49
|
when :show
|
51
50
|
conf.show
|
52
51
|
end
|
data/lib/rrimm.rb
CHANGED
data/lib/rrimm/fetcher.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
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
|
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
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
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
|
@@ -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.
|
32
|
+
pipe.write item.url
|
33
33
|
pipe.write "\n\n"
|
34
|
-
pipe.write item.content
|
34
|
+
pipe.write (item.content || item.summary)
|
35
35
|
pipe.write "\n"
|
36
36
|
end
|
37
37
|
end
|
data/rrimm.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'rrimm'
|
3
|
-
s.version = '0.
|
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.
|
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-
|
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.
|
132
|
+
rubygems_version: 2.2.2
|
120
133
|
signing_key:
|
121
134
|
specification_version: 4
|
122
135
|
summary: RSS to email tool
|
data/lib/rrimm/generic_feed.rb
DELETED
@@ -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
|
data/lib/rrimm/generic_item.rb
DELETED
@@ -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
|