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 +8 -8
- data/lib/rrimm.rb +2 -1
- data/lib/rrimm/config.rb +3 -3
- data/lib/rrimm/{feed.rb → feed_config.rb} +19 -1
- data/lib/rrimm/feed_config_extensions.rb +22 -0
- data/lib/rrimm/fetcher.rb +1 -1
- data/lib/rrimm/item_formatter/mail.rb +1 -0
- data/rrimm.gemspec +2 -2
- data/spec/cache_spec.rb +2 -2
- data/spec/config_spec.rb +3 -3
- data/spec/feed_config_spec.rb +57 -0
- data/spec/fetcher_spec.rb +1 -1
- metadata +10 -9
- data/spec/feed_spec.rb +0 -32
    
        checksums.yaml
    CHANGED
    
    | @@ -1,15 +1,15 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            !binary "U0hBMQ==":
         | 
| 3 3 | 
             
              metadata.gz: !binary |-
         | 
| 4 | 
            -
                 | 
| 4 | 
            +
                NjM4NjM5NDhhMzZiYzc4MjlmZDZmNzE3MzJiZTliODcyYzZkY2VlMA==
         | 
| 5 5 | 
             
              data.tar.gz: !binary |-
         | 
| 6 | 
            -
                 | 
| 6 | 
            +
                NzUyMzkwYWU5ZGIyZDE4YzMzN2FkMDE4ZWI3YWRlOGQ2MzAyMzg1Zg==
         | 
| 7 7 | 
             
            SHA512:
         | 
| 8 8 | 
             
              metadata.gz: !binary |-
         | 
| 9 | 
            -
                 | 
| 10 | 
            -
                 | 
| 11 | 
            -
                 | 
| 9 | 
            +
                Y2YxODJmODFmMzE2YTdkN2M5ZDhhMWI4YTE1YzAxZWU1NGZkODM0NDBmMmM4
         | 
| 10 | 
            +
                YzM0YjY4MWRlYzViMTBjNTM4YWUxM2I2ODJiYzdjOWQzYjRmZGM1OGI4MGE3
         | 
| 11 | 
            +
                OWUzYWE3YmYwODg5MjdiMTk3NDY5MDI0N2I1ZGViNGYzOTlhZDg=
         | 
| 12 12 | 
             
              data.tar.gz: !binary |-
         | 
| 13 | 
            -
                 | 
| 14 | 
            -
                 | 
| 15 | 
            -
                 | 
| 13 | 
            +
                MWQ0MWU5NGQ0ZjM5ZTg1MWFiOGI1NTA1NTZhNDcwMTE5OWYyNmRiZDNmNDk5
         | 
| 14 | 
            +
                MzYwYjEyNmNjOGI1Y2YyOWJlY2Y5ZGI4YjI3YjQ0YjUzN2JiMjlkNzI1MGE2
         | 
| 15 | 
            +
                NGY0ZDRhOTM3NGNiZjkyZjE4Nzk5MWM5OTBmMWUxMjUzNTUwMzc=
         | 
    
        data/lib/rrimm.rb
    CHANGED
    
    
    
        data/lib/rrimm/config.rb
    CHANGED
    
    | @@ -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 ||  | 
| 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 | 
            -
                   | 
| 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 | 
            -
                   | 
| 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  | 
| 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
         | 
    
        data/lib/rrimm/fetcher.rb
    CHANGED
    
    | @@ -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)
         | 
    
        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.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 |  | 
    
        data/spec/cache_spec.rb
    CHANGED
    
    | @@ -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:: | 
| 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:: | 
| 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
         | 
    
        data/spec/config_spec.rb
    CHANGED
    
    | @@ -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:: | 
| 41 | 
            -
                  conf.feeds['3_old'] = RRImm:: | 
| 42 | 
            -
                  conf.feeds['7_recent'] = RRImm:: | 
| 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
         | 
    
        data/spec/fetcher_spec.rb
    CHANGED
    
    | @@ -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:: | 
| 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. | 
| 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- | 
| 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: ' | 
| 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: ' | 
| 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/ | 
| 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/ | 
| 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/ | 
| 203 | 
            +
            - spec/feed_config_spec.rb
         | 
| 203 204 | 
             
            - spec/fetcher_spec.rb
         | 
| 204 205 | 
             
            - spec/spec_helper.rb
         | 
| 205 206 | 
             
            - spec/xkcd.xml
         | 
    
        data/spec/feed_spec.rb
    DELETED
    
    | @@ -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
         |