ruboty-rss 0.0.1
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 +7 -0
- data/.gitignore +23 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +2 -0
- data/example/rss_server.rb +24 -0
- data/lib/ruboty/handlers/rss.rb +96 -0
- data/lib/ruboty/rss.rb +9 -0
- data/lib/ruboty/rss/feed.rb +44 -0
- data/lib/ruboty/rss/version.rb +5 -0
- data/ruboty-rss.gemspec +24 -0
- metadata +111 -0
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: 9679b40be64e0daecf36643337c1fd56afad7b28
         | 
| 4 | 
            +
              data.tar.gz: 877e52904b57642af5b97096a57604bc0b8ee4c5
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: d5a1de09c978d00cef4df6c60845ec6d92f2cbb75235a2d7c06da30c6e81e17546d0c3e9b8157f928bce19135648691d620df381bd8c4e733ab1abc0bc6d8a8e
         | 
| 7 | 
            +
              data.tar.gz: 3ebdacc008ef8ccabe53b251cee9c4f73326aad356a8642141d8057f6ee8969f90bcd9ade6404a393a9f0984204caaa5e656f0ccf9f5ea2c2e2e0c44bfc1c2a7
         | 
    
        data/.gitignore
    ADDED
    
    | @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            *.gem
         | 
| 2 | 
            +
            *.rbc
         | 
| 3 | 
            +
            .bundle
         | 
| 4 | 
            +
            .config
         | 
| 5 | 
            +
            .yardoc
         | 
| 6 | 
            +
            Gemfile.lock
         | 
| 7 | 
            +
            InstalledFiles
         | 
| 8 | 
            +
            _yardoc
         | 
| 9 | 
            +
            coverage
         | 
| 10 | 
            +
            doc/
         | 
| 11 | 
            +
            lib/bundler/man
         | 
| 12 | 
            +
            pkg
         | 
| 13 | 
            +
            rdoc
         | 
| 14 | 
            +
            spec/reports
         | 
| 15 | 
            +
            test/tmp
         | 
| 16 | 
            +
            test/version_tmp
         | 
| 17 | 
            +
            tmp
         | 
| 18 | 
            +
            *.bundle
         | 
| 19 | 
            +
            *.so
         | 
| 20 | 
            +
            *.o
         | 
| 21 | 
            +
            *.a
         | 
| 22 | 
            +
            mkmf.log
         | 
| 23 | 
            +
            *.rdb
         | 
    
        data/Gemfile
    ADDED
    
    
    
        data/LICENSE.txt
    ADDED
    
    | @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            Copyright (c) 2014 TODO: Write your name
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            MIT License
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            Permission is hereby granted, free of charge, to any person obtaining
         | 
| 6 | 
            +
            a copy of this software and associated documentation files (the
         | 
| 7 | 
            +
            "Software"), to deal in the Software without restriction, including
         | 
| 8 | 
            +
            without limitation the rights to use, copy, modify, merge, publish,
         | 
| 9 | 
            +
            distribute, sublicense, and/or sell copies of the Software, and to
         | 
| 10 | 
            +
            permit persons to whom the Software is furnished to do so, subject to
         | 
| 11 | 
            +
            the following conditions:
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            The above copyright notice and this permission notice shall be
         | 
| 14 | 
            +
            included in all copies or substantial portions of the Software.
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         | 
| 17 | 
            +
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         | 
| 18 | 
            +
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         | 
| 19 | 
            +
            NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         | 
| 20 | 
            +
            LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         | 
| 21 | 
            +
            OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         | 
| 22 | 
            +
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         | 
    
        data/README.md
    ADDED
    
    | @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            # Ruboty::Rss
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            TODO: Write a gem description
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            ## Installation
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            Add this line to your application's Gemfile:
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                gem 'ruboty-rss'
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            And then execute:
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                $ bundle
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            Or install it yourself as:
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                $ gem install ruboty-rss
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            ## Usage
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            TODO: Write usage instructions here
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            ## Contributing
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            1. Fork it ( https://github.com/[my-github-username]/ruboty-rss/fork )
         | 
| 26 | 
            +
            2. Create your feature branch (`git checkout -b my-new-feature`)
         | 
| 27 | 
            +
            3. Commit your changes (`git commit -am 'Add some feature'`)
         | 
| 28 | 
            +
            4. Push to the branch (`git push origin my-new-feature`)
         | 
| 29 | 
            +
            5. Create a new Pull Request
         | 
    
        data/Rakefile
    ADDED
    
    
| @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            require 'rack'
         | 
| 2 | 
            +
            require 'rss'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            $count = 1
         | 
| 5 | 
            +
             
         | 
| 6 | 
            +
            app = Proc.new do |env|
         | 
| 7 | 
            +
              rss = RSS::Maker.make("1.0") do |maker|
         | 
| 8 | 
            +
                maker.channel.about = "http://example.com/index.rdf"
         | 
| 9 | 
            +
                maker.channel.title = "Example"
         | 
| 10 | 
            +
                maker.channel.description = "Example Site"
         | 
| 11 | 
            +
                maker.channel.link = "http://example.com/"
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                $count.times do |i|
         | 
| 14 | 
            +
                  item = maker.items.new_item
         | 
| 15 | 
            +
                  item.link = "http://example.com#{env['REQUEST_PATH']}/article#{i + 1}.html"
         | 
| 16 | 
            +
                  item.title = "Sample Article#{i + 1}"
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                $count += 1
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
              ['200', {'Content-Type' => 'text/xml'}, [rss.to_s]]
         | 
| 22 | 
            +
            end
         | 
| 23 | 
            +
             
         | 
| 24 | 
            +
            Rack::Handler::WEBrick.run app
         | 
| @@ -0,0 +1,96 @@ | |
| 1 | 
            +
            require 'ruboty/rss'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Ruboty
         | 
| 4 | 
            +
              module Handlers
         | 
| 5 | 
            +
                class Rss < Base
         | 
| 6 | 
            +
                  DEFAULT_INTERVAL = 60 * 15
         | 
| 7 | 
            +
                  NAMESPACE = "rss"
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  on(/subscribe rss (?<url>.+)/, name: "subscribe", description: "Subscribe a new RSS feed")
         | 
| 10 | 
            +
                  on(/unsubscribe rss (?<id>.+)/, name: "unsubscribe", description: "Unsubscribe a new RSS feed")
         | 
| 11 | 
            +
                  on(/list rss feeds/, name: "list", description: "List watching RSS feeds")
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  def initialize(*args)
         | 
| 14 | 
            +
                    super(*args)
         | 
| 15 | 
            +
                    load_feeds
         | 
| 16 | 
            +
                    start_watching
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  def subscribe(message)
         | 
| 20 | 
            +
                    feed = Ruboty::Rss::Feed.new(
         | 
| 21 | 
            +
                      message.original.except(:robot).merge(
         | 
| 22 | 
            +
                        id: generate_id,
         | 
| 23 | 
            +
                        url: message[:url],
         | 
| 24 | 
            +
                      )
         | 
| 25 | 
            +
                    )
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                    feeds[feed.id] = feed
         | 
| 28 | 
            +
                    feed_data[feed.id] = feed.attributes
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                    message.reply("Subscribed.")
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  def unsubscribe(message)
         | 
| 34 | 
            +
                    id = message[:id].to_i
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                    feeds.delete(id)
         | 
| 37 | 
            +
                    feed_data.delete(id)
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                    message.reply("Unsubscribed.")
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  def list(message)
         | 
| 43 | 
            +
                    list = feeds.each_value.reject do |feed|
         | 
| 44 | 
            +
                      feed.from && message.from && feed.from != message.from
         | 
| 45 | 
            +
                    end.map do |feed|
         | 
| 46 | 
            +
                      "#{feed.id}: #{feed.url}"
         | 
| 47 | 
            +
                    end
         | 
| 48 | 
            +
                    if list.empty?
         | 
| 49 | 
            +
                      message.reply("No RSS feed")
         | 
| 50 | 
            +
                    else
         | 
| 51 | 
            +
                      message.reply(list.join("\n"))
         | 
| 52 | 
            +
                    end
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                  private
         | 
| 56 | 
            +
                  def feed_data
         | 
| 57 | 
            +
                    robot.brain.data[NAMESPACE] ||= {}
         | 
| 58 | 
            +
                  end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                  def feeds
         | 
| 61 | 
            +
                    @feeds ||= {}
         | 
| 62 | 
            +
                  end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                  def load_feeds
         | 
| 65 | 
            +
                    feed_data.each_pair do |id, datum|
         | 
| 66 | 
            +
                      feed = Ruboty::Rss::Feed.new(datum)
         | 
| 67 | 
            +
                      feeds[feed.id] = feed
         | 
| 68 | 
            +
                    end
         | 
| 69 | 
            +
                  end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                  def start_watching
         | 
| 72 | 
            +
                    Thread.start do
         | 
| 73 | 
            +
                      while true
         | 
| 74 | 
            +
                        feeds.each_pair do |id, feed|
         | 
| 75 | 
            +
                          feed.new_items.each do |item|
         | 
| 76 | 
            +
                            body = "New Entry: #{item.title}\n#{item.link}"
         | 
| 77 | 
            +
                            Message.new(
         | 
| 78 | 
            +
                              feed.attributes.symbolize_keys.except(:url, :id).merge(robot: robot)
         | 
| 79 | 
            +
                            ).reply(body)
         | 
| 80 | 
            +
                          end
         | 
| 81 | 
            +
                        end
         | 
| 82 | 
            +
                        sleep (ENV["RUBOTY_RSS_INTERVAL"] || DEFAULT_INTERVAL).to_i
         | 
| 83 | 
            +
                      end
         | 
| 84 | 
            +
                    end
         | 
| 85 | 
            +
                  end
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                  def generate_id
         | 
| 88 | 
            +
                    begin
         | 
| 89 | 
            +
                      id = rand(1000)
         | 
| 90 | 
            +
                    end while feeds.has_key?(id)
         | 
| 91 | 
            +
                    id
         | 
| 92 | 
            +
                  end
         | 
| 93 | 
            +
                end
         | 
| 94 | 
            +
              end
         | 
| 95 | 
            +
            end
         | 
| 96 | 
            +
             | 
    
        data/lib/ruboty/rss.rb
    ADDED
    
    
| @@ -0,0 +1,44 @@ | |
| 1 | 
            +
            require 'ruboty/rss'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Ruboty
         | 
| 4 | 
            +
              module Rss
         | 
| 5 | 
            +
                class Feed
         | 
| 6 | 
            +
                  attr_reader :attributes
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def initialize(attributes)
         | 
| 9 | 
            +
                    @attributes = attributes.stringify_keys
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  def id
         | 
| 13 | 
            +
                    attributes['id']
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  def url
         | 
| 17 | 
            +
                    attributes['url']
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  def from
         | 
| 21 | 
            +
                    attributes['from']
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  def to
         | 
| 25 | 
            +
                    attributes['to']
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
                  
         | 
| 28 | 
            +
                  def new_items
         | 
| 29 | 
            +
                    source = open(url) {|f| f.read }
         | 
| 30 | 
            +
                    rss = RSS::Parser.parse(source)
         | 
| 31 | 
            +
                    items = []
         | 
| 32 | 
            +
                    if @last_links
         | 
| 33 | 
            +
                      items = rss.items.reject do |item|
         | 
| 34 | 
            +
                        @last_links.include?(item.link)
         | 
| 35 | 
            +
                      end
         | 
| 36 | 
            +
                    end
         | 
| 37 | 
            +
                    @last_links = rss.items.map {|item| item.link }
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                    items
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
            end
         | 
| 44 | 
            +
             | 
    
        data/ruboty-rss.gemspec
    ADDED
    
    | @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            # coding: utf-8
         | 
| 2 | 
            +
            lib = File.expand_path('../lib', __FILE__)
         | 
| 3 | 
            +
            $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
         | 
| 4 | 
            +
            require 'ruboty/rss/version'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            Gem::Specification.new do |spec|
         | 
| 7 | 
            +
              spec.name          = "ruboty-rss"
         | 
| 8 | 
            +
              spec.version       = Ruboty::Rss::VERSION
         | 
| 9 | 
            +
              spec.authors       = ["Ryota Arai"]
         | 
| 10 | 
            +
              spec.email         = ["ryota.arai@gmail.com"]
         | 
| 11 | 
            +
              spec.summary       = %q{RSS Watcher for Ruboty Chatbot}
         | 
| 12 | 
            +
              spec.homepage      = "https://github.com/ruboty-rss"
         | 
| 13 | 
            +
              spec.license       = "MIT"
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              spec.files         = `git ls-files -z`.split("\x0")
         | 
| 16 | 
            +
              spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
         | 
| 17 | 
            +
              spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
         | 
| 18 | 
            +
              spec.require_paths = ["lib"]
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              spec.add_dependency 'activesupport'
         | 
| 21 | 
            +
              spec.add_dependency "ruboty", "~> 1.0.2"
         | 
| 22 | 
            +
              spec.add_development_dependency "bundler", "~> 1.6"
         | 
| 23 | 
            +
              spec.add_development_dependency "rake"
         | 
| 24 | 
            +
            end
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,111 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: ruboty-rss
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.0.1
         | 
| 5 | 
            +
            platform: ruby
         | 
| 6 | 
            +
            authors:
         | 
| 7 | 
            +
            - Ryota Arai
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 | 
            +
            bindir: bin
         | 
| 10 | 
            +
            cert_chain: []
         | 
| 11 | 
            +
            date: 2014-07-02 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: activesupport
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - ">="
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: '0'
         | 
| 20 | 
            +
              type: :runtime
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - ">="
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: '0'
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: ruboty
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - "~>"
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: 1.0.2
         | 
| 34 | 
            +
              type: :runtime
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 38 | 
            +
                - - "~>"
         | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: 1.0.2
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: bundler
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - "~>"
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '1.6'
         | 
| 48 | 
            +
              type: :development
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - "~>"
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: '1.6'
         | 
| 55 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            +
              name: rake
         | 
| 57 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - ">="
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: '0'
         | 
| 62 | 
            +
              type: :development
         | 
| 63 | 
            +
              prerelease: false
         | 
| 64 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                requirements:
         | 
| 66 | 
            +
                - - ">="
         | 
| 67 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                    version: '0'
         | 
| 69 | 
            +
            description: 
         | 
| 70 | 
            +
            email:
         | 
| 71 | 
            +
            - ryota.arai@gmail.com
         | 
| 72 | 
            +
            executables: []
         | 
| 73 | 
            +
            extensions: []
         | 
| 74 | 
            +
            extra_rdoc_files: []
         | 
| 75 | 
            +
            files:
         | 
| 76 | 
            +
            - ".gitignore"
         | 
| 77 | 
            +
            - Gemfile
         | 
| 78 | 
            +
            - LICENSE.txt
         | 
| 79 | 
            +
            - README.md
         | 
| 80 | 
            +
            - Rakefile
         | 
| 81 | 
            +
            - example/rss_server.rb
         | 
| 82 | 
            +
            - lib/ruboty/handlers/rss.rb
         | 
| 83 | 
            +
            - lib/ruboty/rss.rb
         | 
| 84 | 
            +
            - lib/ruboty/rss/feed.rb
         | 
| 85 | 
            +
            - lib/ruboty/rss/version.rb
         | 
| 86 | 
            +
            - ruboty-rss.gemspec
         | 
| 87 | 
            +
            homepage: https://github.com/ruboty-rss
         | 
| 88 | 
            +
            licenses:
         | 
| 89 | 
            +
            - MIT
         | 
| 90 | 
            +
            metadata: {}
         | 
| 91 | 
            +
            post_install_message: 
         | 
| 92 | 
            +
            rdoc_options: []
         | 
| 93 | 
            +
            require_paths:
         | 
| 94 | 
            +
            - lib
         | 
| 95 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 96 | 
            +
              requirements:
         | 
| 97 | 
            +
              - - ">="
         | 
| 98 | 
            +
                - !ruby/object:Gem::Version
         | 
| 99 | 
            +
                  version: '0'
         | 
| 100 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 101 | 
            +
              requirements:
         | 
| 102 | 
            +
              - - ">="
         | 
| 103 | 
            +
                - !ruby/object:Gem::Version
         | 
| 104 | 
            +
                  version: '0'
         | 
| 105 | 
            +
            requirements: []
         | 
| 106 | 
            +
            rubyforge_project: 
         | 
| 107 | 
            +
            rubygems_version: 2.2.2
         | 
| 108 | 
            +
            signing_key: 
         | 
| 109 | 
            +
            specification_version: 4
         | 
| 110 | 
            +
            summary: RSS Watcher for Ruboty Chatbot
         | 
| 111 | 
            +
            test_files: []
         |