rrimm 0.11.0 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- M2UwODJmOTk2M2IwMzljZDg3NTc3NmJkZGNkNjRmMWNhNjRjZTM1Mg==
4
+ NjM4NjM5NDhhMzZiYzc4MjlmZDZmNzE3MzJiZTliODcyYzZkY2VlMA==
5
5
  data.tar.gz: !binary |-
6
- MDEyNWQ3NDgzN2ZjM2VmZWVlNDI0ZDZiNTg3YjYxYmFkMjg4YWMwYQ==
6
+ NzUyMzkwYWU5ZGIyZDE4YzMzN2FkMDE4ZWI3YWRlOGQ2MzAyMzg1Zg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NDQyMDk4MWJkZTQ3MjAxOWVlZTgzY2ZiZjAxZTZlODQzMjI0ZGFmMjMyNmZj
10
- NDJiOTIzZDY2NzYzNzE1OWQzYzc0NTk4MDdhNDRkNjQ5MGJhZDFlNmVlMmEz
11
- NWIxMGU1ZTA4NTY3Mjc3YmViOGRhZmQ5NDk5OGQxZWZlYzA2ODA=
9
+ Y2YxODJmODFmMzE2YTdkN2M5ZDhhMWI4YTE1YzAxZWU1NGZkODM0NDBmMmM4
10
+ YzM0YjY4MWRlYzViMTBjNTM4YWUxM2I2ODJiYzdjOWQzYjRmZGM1OGI4MGE3
11
+ OWUzYWE3YmYwODg5MjdiMTk3NDY5MDI0N2I1ZGViNGYzOTlhZDg=
12
12
  data.tar.gz: !binary |-
13
- NTc2NmEwNmE4Y2FiNjljYmM2YzNiNDllOWYxNjZlYzA0NDBjYTRlYzI4MjFj
14
- YmVjY2Y1NDVkYjljNThlYjQ0YmE3ZjgwZmI5NzI5MTg2NDFiYjgzYTVmNWYx
15
- ZDQ4YjQ3YzIwNzYwYjFiYWNmNjNiM2YxYWNkMmQyODkxYjg5YzQ=
13
+ MWQ0MWU5NGQ0ZjM5ZTg1MWFiOGI1NTA1NTZhNDcwMTE5OWYyNmRiZDNmNDk5
14
+ MzYwYjEyNmNjOGI1Y2YyOWJlY2Y5ZGI4YjI3YjQ0YjUzN2JiMjlkNzI1MGE2
15
+ NGY0ZDRhOTM3NGNiZjkyZjE4Nzk5MWM5OTBmMWUxMjUzNTUwMzc=
@@ -1,4 +1,5 @@
1
- require_relative 'rrimm/feed'
1
+ require_relative 'rrimm/feed_config'
2
+ require_relative 'rrimm/feed_config_extensions'
2
3
  require_relative 'rrimm/config'
3
4
  require_relative 'rrimm/fetcher'
4
5
  require_relative 'rrimm/item_formatter'
@@ -62,7 +62,7 @@ module RRImm
62
62
  def evaluate_feed_definition(feed_name, &block)
63
63
  #this allow to redefine feeds if necessary
64
64
  existing_feed = @feeds[feed_name]
65
- new_feed = (existing_feed || Feed.new(feed_name))
65
+ new_feed = (existing_feed || FeedConfig.new(feed_name))
66
66
  new_feed.formatter = default_formatter if default_formatter
67
67
  new_feed.pipe = pipe if pipe
68
68
  new_feed.instance_eval(&block) if block
@@ -89,7 +89,7 @@ module RRImm
89
89
  end
90
90
 
91
91
  def category(cat_name, &block)
92
- Feed.module_eval do
92
+ FeedConfig.module_eval do
93
93
  @@tmp_cat_name = cat_name
94
94
  alias :old_initialize :initialize
95
95
  def initialize(feed_name)
@@ -99,7 +99,7 @@ module RRImm
99
99
  end
100
100
  self.instance_eval(&block) if block
101
101
  ensure
102
- Feed.module_eval do
102
+ FeedConfig.module_eval do
103
103
  alias :initialize :old_initialize
104
104
  end
105
105
  end
@@ -2,21 +2,39 @@ require 'mixlib/shellout'
2
2
  require 'stringio'
3
3
 
4
4
  module RRImm
5
- class Feed
5
+ class FeedConfig
6
6
 
7
7
  attr_accessor :name
8
8
  attr_accessor :uri
9
9
  attr_accessor :formatter_class, :formatter
10
10
  attr_accessor :category
11
11
  attr_accessor :pipe
12
+ attr_accessor :massages
12
13
 
13
14
  def initialize(name, &block)
14
15
  @name = name
15
16
  @uri = name
16
17
  @formatter_class = RRImm::ItemFormatter::Default
18
+ @massages = []
17
19
  self.instance_eval(&block) if block
18
20
  end
19
21
 
22
+ # may apply modifications on feeds
23
+ # must return an enumerable of feeditems
24
+ # massage method applies @massages keys as methods on "feed"
25
+ # it also uses the value as a block if a block is given
26
+ def massage(feed)
27
+ @massages.inject(feed) do |mem, method_with_arg|
28
+ arg = method_with_arg.values.first
29
+ method = method_with_arg.keys.first
30
+ if arg
31
+ mem.send(method, &arg)
32
+ else
33
+ mem.send(method)
34
+ end
35
+ end
36
+ end
37
+
20
38
  def format(feed, item)
21
39
  @formatter ||= @formatter_class.new
22
40
  s = ""
@@ -0,0 +1,22 @@
1
+ require 'mixlib/shellout'
2
+ require 'stringio'
3
+
4
+ module RRImm
5
+ module FeedConfigExtensions
6
+
7
+ def method_missing(name, *args, &block)
8
+ if Enumerable.instance_methods(false).include? name
9
+ @massages << { name => block }
10
+ else
11
+ raise NoMethodError
12
+ end
13
+ end
14
+
15
+ end
16
+ end
17
+
18
+ module RRImm
19
+ class FeedConfig
20
+ include FeedConfigExtensions
21
+ end
22
+ end
@@ -58,7 +58,7 @@ module RRImm
58
58
  if feed.respond_to? :entries
59
59
  items = feed.entries.select { |item| item.published > last_read }
60
60
  last_read = items.collect { |item| item.published }.max unless items.empty?
61
- items.each do |item|
61
+ feed_config.massage(items).each do |item|
62
62
  feed_config.format(feed, item)
63
63
  end
64
64
  @config.get_cache.save(feed_config, last_read.to_i, false)
@@ -13,6 +13,7 @@ module RRImm
13
13
  name = "RRImm"
14
14
  name = feed_config.name unless feed_config.default_name?
15
15
  name = item_author if item_author
16
+ name = name.gsub(/,/, ' ') # clean from field
16
17
  if name.include? '@'
17
18
  name
18
19
  else
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'rrimm'
3
- s.version = '0.11.0'
3
+ s.version = '0.12.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"
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
14
14
  s.add_dependency 'open_uri_redirections'
15
15
  s.add_dependency 'parallel'
16
16
  s.add_dependency 'ruby-progressbar'
17
- s.add_dependency 'feedjira'
17
+ s.add_dependency 'feedjira', '< 2'
18
18
  s.add_dependency 'colorize'
19
19
  s.add_dependency 'mixlib-shellout'
20
20
 
@@ -10,7 +10,7 @@ describe RRImm::Cache do
10
10
  end
11
11
 
12
12
  it 'reads default timestamp if cache is not present' do
13
- feed = RRImm::Feed.new 'http://kernel.org/rss'
13
+ feed = RRImm::FeedConfig.new 'http://kernel.org/rss'
14
14
  Dir.mktmpdir do |dir|
15
15
  cache = RRImm::Cache.new dir
16
16
  expect(cache.read(feed)).to eq RRImm::Cache::DEFAULT_TIMESTAMP
@@ -18,7 +18,7 @@ describe RRImm::Cache do
18
18
  end
19
19
 
20
20
  it 'reads the correct timestamp' do
21
- feed = RRImm::Feed.new 'http://kernel.org/rss'
21
+ feed = RRImm::FeedConfig.new 'http://kernel.org/rss'
22
22
  now = Time.now.to_i
23
23
  Dir.mktmpdir do |dir|
24
24
  cache = RRImm::Cache.new dir
@@ -37,9 +37,9 @@ describe RRImm::Config do
37
37
  ios = StringIO.new
38
38
  allow(RRImm::Cache).to receive(:new).and_return(cache)
39
39
  conf = RRImm::Config.new
40
- conf.feeds['1_very_old'] = RRImm::Feed.new 'very_old'
41
- conf.feeds['3_old'] = RRImm::Feed.new 'old'
42
- conf.feeds['7_recent'] = RRImm::Feed.new 'recent'
40
+ conf.feeds['1_very_old'] = RRImm::FeedConfig.new 'very_old'
41
+ conf.feeds['3_old'] = RRImm::FeedConfig.new 'old'
42
+ conf.feeds['7_recent'] = RRImm::FeedConfig.new 'recent'
43
43
  expect{ conf.status(ios, 5, 3, false) }.not_to raise_error
44
44
  expect(ios.string).to include "#{Time.at(1)} very_old\n".red
45
45
  expect(ios.string).to include "#{Time.at(4)} old\n".yellow
@@ -0,0 +1,57 @@
1
+ require_relative 'spec_helper'
2
+
3
+ describe RRImm::FeedConfig do
4
+ describe "#new" do
5
+ it 'uses the name as uri by default' do
6
+ f = RRImm::FeedConfig.new 'a random feed'
7
+ expect(f.name).to eq('a random feed')
8
+ expect(f.uri).to eq('a random feed')
9
+ expect(f.default_name?).to be true
10
+ end
11
+
12
+ it 'calls the block if one is specifed' do
13
+ f = RRImm::FeedConfig.new 'a another feed' do
14
+ pipe "cat | cat"
15
+ formatter_class RRImm::ItemFormatter::Mail
16
+ end
17
+ expect(f.pipe).to eq "cat | cat"
18
+ expect(f.formatter_class).to eq RRImm::ItemFormatter::Mail
19
+ end
20
+ end
21
+
22
+ describe ".massage" do
23
+ it 'returns argument when no massage' do
24
+ feed = double('test feed')
25
+ f = RRImm::FeedConfig.new 'a random feed'
26
+ expect(f.massage(feed)).to be(feed)
27
+ end
28
+ it 'applies simple massage' do
29
+ feed = (1..5)
30
+ f = RRImm::FeedConfig.new 'a random feed'
31
+ f.massages << {select: Proc.new { |el| el % 2 == 0 }}
32
+ expect(f.massage(feed)).to eq([2,4])
33
+ end
34
+ end
35
+
36
+ describe ".format" do
37
+ it 'calls formatter' do
38
+ formatter = double('formatter')
39
+ f = RRImm::FeedConfig.new 'a random feed'
40
+ f.pipe "cat /dev/null"
41
+ f.formatter = formatter
42
+ expect(formatter).to receive(:format)
43
+ expect { f.format(nil, nil) }.not_to raise_error
44
+ end
45
+ end
46
+ end
47
+
48
+ describe RRImm::FeedConfigExtensions do
49
+ describe 'select' do
50
+ it 'applies select on feed' do
51
+ feed = (1..5)
52
+ f = RRImm::FeedConfig.new 'a random feed'
53
+ f.select { |el| el % 2 == 0 }
54
+ expect(f.massage(feed)).to eq([2,4])
55
+ end
56
+ end
57
+ end
@@ -3,7 +3,7 @@ require_relative 'spec_helper'
3
3
  describe RRImm::Fetcher do
4
4
  let(:basic_conf) do
5
5
  xkcd_file = File.join('file://', File.dirname(__FILE__), 'xkcd.xml')
6
- feed = RRImm::Feed.new xkcd_file do
6
+ feed = RRImm::FeedConfig.new xkcd_file do
7
7
  pipe 'cat > /dev/null'
8
8
  end
9
9
  cache = double('cache_mock')
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.11.0
4
+ version: 0.12.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: 2015-04-25 00:00:00.000000000 Z
11
+ date: 2015-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: open_uri_redirections
@@ -56,16 +56,16 @@ dependencies:
56
56
  name: feedjira
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ! '>='
59
+ - - <
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '2'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ! '>='
66
+ - - <
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '2'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: colorize
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -156,7 +156,8 @@ files:
156
156
  - lib/rrimm.rb
157
157
  - lib/rrimm/cache.rb
158
158
  - lib/rrimm/config.rb
159
- - lib/rrimm/feed.rb
159
+ - lib/rrimm/feed_config.rb
160
+ - lib/rrimm/feed_config_extensions.rb
160
161
  - lib/rrimm/fetcher.rb
161
162
  - lib/rrimm/item_formatter.rb
162
163
  - lib/rrimm/item_formatter/default.rb
@@ -167,7 +168,7 @@ files:
167
168
  - script/test
168
169
  - spec/cache_spec.rb
169
170
  - spec/config_spec.rb
170
- - spec/feed_spec.rb
171
+ - spec/feed_config_spec.rb
171
172
  - spec/fetcher_spec.rb
172
173
  - spec/spec_helper.rb
173
174
  - spec/xkcd.xml
@@ -199,7 +200,7 @@ summary: RSS to email tool
199
200
  test_files:
200
201
  - spec/cache_spec.rb
201
202
  - spec/config_spec.rb
202
- - spec/feed_spec.rb
203
+ - spec/feed_config_spec.rb
203
204
  - spec/fetcher_spec.rb
204
205
  - spec/spec_helper.rb
205
206
  - spec/xkcd.xml
@@ -1,32 +0,0 @@
1
- require_relative 'spec_helper'
2
-
3
- describe RRImm::Feed do
4
- describe "#new" do
5
- it 'uses the name as uri by default' do
6
- f = RRImm::Feed.new 'a random feed'
7
- expect(f.name).to eq('a random feed')
8
- expect(f.uri).to eq('a random feed')
9
- expect(f.default_name?).to be true
10
- end
11
-
12
- it 'calls the block if one is specifed' do
13
- f = RRImm::Feed.new 'a another feed' do
14
- pipe "cat | cat"
15
- formatter_class RRImm::ItemFormatter::Mail
16
- end
17
- expect(f.pipe).to eq "cat | cat"
18
- expect(f.formatter_class).to eq RRImm::ItemFormatter::Mail
19
- end
20
- end
21
-
22
- describe ".format" do
23
- it 'calls formatter' do
24
- formatter = double('formatter')
25
- f = RRImm::Feed.new 'a random feed'
26
- f.pipe "cat /dev/null"
27
- f.formatter = formatter
28
- expect(formatter).to receive(:format)
29
- expect { f.format(nil, nil) }.not_to raise_error
30
- end
31
- end
32
- end