Project

rounders

0.0
No commit activity in last 3 years
No release in over 3 years
bot-ish pluggable incoming mail processing framework
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

>= 0
>= 2.6.4
>= 0
 Project Readme

Rounders Gem Version Build Status Code Climate Coverage Status

日本語README

Rounders is a mail handling framework that emphasizes pluggability. It was made with reference to Bot such as Ruboty,Lita.

Installation

Add this line to your application's Gemfile:

gem 'rounders'

And then execute:

$ bundle

Or install it yourself as:

$ gem install rounders

Usage

create bot

To create a bot, execute the following command.

rounders new [name]

Mail account settings

Set mail account information in bot/config/initiarizers/ mail.rb of the generated bot.

Rounders::Receivers::Mail.configure do |config|
  # please show more option
  #
  config.protocol = :imap
  # メールアカウント情報を設定します。
  config.mail_server_setting = {
    address:    'imap.gmail.com',
    port:       993,
    user_name:  ENV['USER_NAME'],
    password:   ENV['PASSWORD'],
    enable_ssl: true
  }
  config.options = {
    # flag for whether to delete each receive mail after find Default: false
    # delete_after_find: true
  }
end

start bot

You can start the bot with bundle exec rounders start.

Modules

If you want to extend the processing of Rounders. inherit the base class of following modules. it is hooked and can be incorporated into the Rounders.

Handlers

Handlers is a module that handles mails. Create the Matcher instance with the condition passed as the first argument of .on, If there is a matching email, If there is a matching email, It passe to the method that passed as the second argument

The rounders generate handler command create template of handler into ./plugins/handlers/

rounders generate handler [name] [method1, method2...] `
example
module Rounders
  module Handlers
    class MyHandler < Rounders::Handlers::Handler
      # mail.body is include 'exmpale'
      on({ body: 'example' }, :method1)
      # body include 'exmpale' AND subject match the /programing (?<name>.+)$/
      on({ 
        body: 'example',
        subject: /programing (?<name>.+)$/},
        :method2)

      def method1(mail, matches)
       # The return value of BodyMatcher is assign to Handler#matches.
        matches[:body]
        # => #<MatchData "example">
       	# any process
      end

      def method2(mail, matches)
        matches[:subject]
      	# => <MatchData "programing ruby" name:"ruby">
      	matches[:subject][:name]
      	# => "ruby"
      end
    end
  end
end

Matchers

Matcher is a module that performs mail filtering. The Matcher must implement 'match' method, and the value returned by this method which returns value assign to Handler#matches

The rounders generate matchers command create template of matchers into ./plugins/matchers/

rounders generate matchers [name]`

Below is an example of Matcher for filtering / extracting with CSSSelector for HTML mail.

exmaple

/plugins/matchers/css_selector.rb

module Rounders
  module Matchers
    class CssSelector < Rounders::Matchers::Matcher
      attr_reader :pattern

      def initialize(pattern)
        @pattern = pattern
      end

      def match(mail)
        return if mail.html_part.blank?
        html_part = Nokogiri::HTML(mail.html_part.body.to_s)
        node = html_part.css(pattern)
        node.present? ? node : nil
      end
    end
  end
end

/plugins/handlers/your_hander.rb

module Rounders
  module Handlers
    class YourHandler < Rounders::Handlers::Handler
      # css selector match 
      on({ css_selector: 'body .header h2' }, :method1)
		  
      def method1(mail)
        matches[:css_selector]
        # =>[#<Nokogiri::XML::Element:0x3fc6d77f6ccc name="h2" children=[#<Nokogiri::XML::Text:0x3fc6d77f6ad8 " head text ">]>]
        matches[:css_selector].to_s
        # => '<h2> head text </h2>'
      end
    end
  end
end

Gems

Rounder's module can be distributed as Gem.

Store

Store is module that application memory. It can record data like a Hash object. ex: rounders.sotre[{key}] = {value}

example
module Rounders
  module Handlers
    class MyHandler < Rounders::Handlers::Handler
      # mail.body is include 'exmpale'
      on({ body: 'example' }, :method1)

      def method1(mail, matches)
        # initialize :data memory
        count = rounder.store[:access] || 0
	
        count += 1
        Rounders.logger.info count
        # log access count
        rounder.store[:access] = count
      end
    end
  end
end

Gems

reciever

coming soon...

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/rounders. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

The gem is available as open source under the terms of the MIT License.