rrimm 0.11.0 → 0.12.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,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