omnibot 0.0.9 → 0.0.10
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.
- data/Rakefile +5 -0
- data/examples/config.yaml +13 -0
- data/lib/omnibot.rb +8 -2
- data/lib/omnibot/amqpconsumer.rb +8 -8
- data/lib/omnibot/launcher.rb +32 -0
- data/lib/omnibot/loggedcommand.rb +18 -0
- data/lib/omnibot/mailchecker.rb +96 -0
- data/lib/omnibot/periodiccommand.rb +12 -14
- data/lib/omnibot/version.rb +1 -1
- metadata +59 -69
    
        data/Rakefile
    CHANGED
    
    | @@ -25,6 +25,11 @@ task :install => :build do | |
| 25 25 | 
             
              system "gem install pkg/#{gemspec.name}-#{gemspec.version}"
         | 
| 26 26 | 
             
            end
         | 
| 27 27 |  | 
| 28 | 
            +
            desc "Install gem locally without documentation"
         | 
| 29 | 
            +
            task :install_nodoc => :build do
         | 
| 30 | 
            +
              system "gem install pkg/#{gemspec.name}-#{gemspec.version} --no-rdoc --no-ri"
         | 
| 31 | 
            +
            end
         | 
| 32 | 
            +
             | 
| 28 33 | 
             
            desc "Push gem"
         | 
| 29 34 | 
             
            task :push => :build do
         | 
| 30 35 | 
             
              system "gem push pkg/#{gemspec.name}-#{gemspec.version}.gem"
         | 
    
        data/examples/config.yaml
    CHANGED
    
    | @@ -5,3 +5,16 @@ config: | |
| 5 5 | 
             
              notifyresource: Adium.*
         | 
| 6 6 | 
             
              periodiccommands: [ 'vnstat' ]
         | 
| 7 7 | 
             
            	logpath: '/tmp/omnibot.log'
         | 
| 8 | 
            +
              mails:
         | 
| 9 | 
            +
                - user: foobar@example.com
         | 
| 10 | 
            +
                  password: secret
         | 
| 11 | 
            +
                  host: pop.example.com
         | 
| 12 | 
            +
                  port: 995
         | 
| 13 | 
            +
                  ssl: true
         | 
| 14 | 
            +
              mailtriggers:
         | 
| 15 | 
            +
                - action: unpack
         | 
| 16 | 
            +
                  for: omni.notify@mail.ru
         | 
| 17 | 
            +
                  if:
         | 
| 18 | 
            +
                    subject: '^Weekly archive.*'
         | 
| 19 | 
            +
                  unpack_to: '/tmp/'
         | 
| 20 | 
            +
                  command_post: 'post-mail'
         | 
    
        data/lib/omnibot.rb
    CHANGED
    
    | @@ -6,9 +6,15 @@ require 'eventmachine' | |
| 6 6 | 
             
            require 'xmpp4r'
         | 
| 7 7 | 
             
            require 'xmpp4r/client'
         | 
| 8 8 | 
             
            require 'xmpp4r/roster'
         | 
| 9 | 
            +
            require 'mail'
         | 
| 9 10 | 
             
            require 'socket'
         | 
| 10 11 | 
             
            require 'date'
         | 
| 12 | 
            +
            require 'tmpdir'
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            module OmniBot
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            	%w[ helpers jabberbot amqpconsumer omnisend launcher loggedcommand periodiccommand mailchecker ].each do |file|
         | 
| 17 | 
            +
            		require "omnibot/#{file}.rb"
         | 
| 18 | 
            +
            	end
         | 
| 11 19 |  | 
| 12 | 
            -
            %w[ helpers jabberbot amqpconsumer omnisend launcher periodiccommand ].each do |file|
         | 
| 13 | 
            -
              require "omnibot/#{file}.rb"
         | 
| 14 20 | 
             
            end
         | 
    
        data/lib/omnibot/amqpconsumer.rb
    CHANGED
    
    | @@ -3,6 +3,8 @@ module OmniBot | |
| 3 3 | 
             
            	# AMQP consumer class
         | 
| 4 4 | 
             
            	class AMQPConsumer
         | 
| 5 5 |  | 
| 6 | 
            +
            		attr_accessor :handlers
         | 
| 7 | 
            +
             | 
| 6 8 | 
             
            		def send_message message
         | 
| 7 9 | 
             
            			begin
         | 
| 8 10 | 
             
            				@omnibot.add_message [Time.now, message]
         | 
| @@ -29,14 +31,12 @@ module OmniBot | |
| 29 31 | 
             
            				@omnibot.set_subscriber Jabber::JID::new(@config['notifyjid']), @config['notifyresource']
         | 
| 30 32 | 
             
            				@omnibot.connect
         | 
| 31 33 |  | 
| 32 | 
            -
            				 | 
| 33 | 
            -
             | 
| 34 | 
            -
            					 | 
| 35 | 
            -
            					 | 
| 36 | 
            -
            					 | 
| 37 | 
            -
            					 | 
| 38 | 
            -
            					periodic_command.start
         | 
| 39 | 
            -
            					pause += 20
         | 
| 34 | 
            +
            				@handlers.each_with_index do |handler, index|
         | 
| 35 | 
            +
            					OmniLog::info "Setup handler #{handler.to_s}..."
         | 
| 36 | 
            +
            					handler.timer_provider = EM
         | 
| 37 | 
            +
            					handler.set_jabber_messenger { |message| send_message message }
         | 
| 38 | 
            +
            					handler.startup_pause = index*10
         | 
| 39 | 
            +
            					handler.start
         | 
| 40 40 | 
             
            				end
         | 
| 41 41 |  | 
| 42 42 | 
             
            			rescue Object => e
         | 
    
        data/lib/omnibot/launcher.rb
    CHANGED
    
    | @@ -15,6 +15,37 @@ module OmniBot | |
| 15 15 | 
             
            			return 'omnibot.log'
         | 
| 16 16 | 
             
            		end
         | 
| 17 17 |  | 
| 18 | 
            +
            		def get_store config
         | 
| 19 | 
            +
            			store_path = config['storepath']
         | 
| 20 | 
            +
            			unless File.directory? store_path
         | 
| 21 | 
            +
            				store_path = ENV['HOME']+'/.omnibot'
         | 
| 22 | 
            +
            				FileUtils.mkdir store_path unless File.directory? store_path
         | 
| 23 | 
            +
            			end
         | 
| 24 | 
            +
            			store_path + '/omnibot.store'
         | 
| 25 | 
            +
            		end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            		def provide_handlers config
         | 
| 28 | 
            +
            			periodic_commands = ([config['periodiccommands']].flatten or [])
         | 
| 29 | 
            +
            			
         | 
| 30 | 
            +
            			mails = ([config['mails']].flatten or [])
         | 
| 31 | 
            +
            			mail_triggers = ([config['mailtriggers']].flatten or [])
         | 
| 32 | 
            +
            			mail_triggers.each do |mt|
         | 
| 33 | 
            +
            				raise 'No mail found for a trigger' unless mails.find { |m| m['user'] == mt['for'] }
         | 
| 34 | 
            +
            				raise 'Not supported action' unless mt['action'] == 'unpack'
         | 
| 35 | 
            +
            			end
         | 
| 36 | 
            +
            			used_mails = mails.select { |m| mail_triggers.find { |mt| m['user'] == mt['for'] } }
         | 
| 37 | 
            +
            			raise 'Sorry but multiple mail addresses is not supported yet' if used_mails.size > 1
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            			[] + 
         | 
| 40 | 
            +
            				periodic_commands.map do |command|
         | 
| 41 | 
            +
            					PeriodicCommand.new command
         | 
| 42 | 
            +
            				end +
         | 
| 43 | 
            +
            				mail_triggers.map do |trigger|
         | 
| 44 | 
            +
            					mail = mails.find { |m| m['user'] == trigger['for'] }
         | 
| 45 | 
            +
            					MailChecker.new mail, trigger
         | 
| 46 | 
            +
            				end
         | 
| 47 | 
            +
            		end
         | 
| 48 | 
            +
             | 
| 18 49 | 
             
            		def start args
         | 
| 19 50 | 
             
            			config_path = get_config_path args
         | 
| 20 51 | 
             
            			puts "Using config at #{config_path}"
         | 
| @@ -26,6 +57,7 @@ module OmniBot | |
| 26 57 | 
             
            			OmniLog::log.level = Logger::DEBUG
         | 
| 27 58 |  | 
| 28 59 | 
             
            			consumer = AMQPConsumer.new config
         | 
| 60 | 
            +
            			consumer.handlers = provide_handlers(config)
         | 
| 29 61 | 
             
            			consumer.start 
         | 
| 30 62 |  | 
| 31 63 | 
             
            			OmniLog::log.close
         | 
| @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            module OmniBot
         | 
| 2 | 
            +
            	module LoggedCommand
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            		def jabber_logged_command banner, command
         | 
| 5 | 
            +
            			body = `#{command}`
         | 
| 6 | 
            +
            			if $? != 0
         | 
| 7 | 
            +
            				@jabber_messenger.call "#{banner} command #{command} failed with an error #{$?}:\n" + body
         | 
| 8 | 
            +
            			end
         | 
| 9 | 
            +
            			if body.strip != '' 
         | 
| 10 | 
            +
            				@jabber_messenger.call "#{banner} command #{command_str} succeeded with:\n" + body
         | 
| 11 | 
            +
            			end			
         | 
| 12 | 
            +
            		end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            		def set_jabber_messenger &block
         | 
| 15 | 
            +
            			@jabber_messenger = block
         | 
| 16 | 
            +
            		end
         | 
| 17 | 
            +
            	end
         | 
| 18 | 
            +
            end
         | 
| @@ -0,0 +1,96 @@ | |
| 1 | 
            +
            module OmniBot
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            	class MailChecker
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            		include LoggedCommand
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            		def on_first_timer
         | 
| 8 | 
            +
            			OmniLog::debug "Okay, it's near of midnight"
         | 
| 9 | 
            +
            			on_periodic_timer
         | 
| 10 | 
            +
            			@timer_provider.add_periodic_timer(3600) { on_periodic_timer }
         | 
| 11 | 
            +
            		end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            		def match_condition m, condition_name, mail_name = condition_name
         | 
| 14 | 
            +
            			values = m.send(mail_name)
         | 
| 15 | 
            +
            			[values].flatten.any? do |value| 
         | 
| 16 | 
            +
            				@conditions[condition_name] && Regexp.new(@conditions[condition_name]).match(value.to_s)
         | 
| 17 | 
            +
            			end
         | 
| 18 | 
            +
            		end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            		def match_conditions m
         | 
| 21 | 
            +
            			%w{ subject from to cc date}.any? { |condition| match_condition m, condition }
         | 
| 22 | 
            +
            		end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            		def on_periodic_timer
         | 
| 25 | 
            +
            			OmniLog::info "Checking mail #{@mail_config['address']}"
         | 
| 26 | 
            +
            			Mail.all.each do |m|
         | 
| 27 | 
            +
            				OmniLog::info "   look at message from #{m.from} about #{m.subject}"
         | 
| 28 | 
            +
            				handle_message(m) if match_conditions m
         | 
| 29 | 
            +
            			end
         | 
| 30 | 
            +
            		end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            		def handle_message m
         | 
| 33 | 
            +
            			OmniLog::info "Matched " + m.inspect.to_s
         | 
| 34 | 
            +
            			attached = m.attachments.find { |a| a.mime_type =~ /application\/x-zip.*/ }
         | 
| 35 | 
            +
            			if attached
         | 
| 36 | 
            +
            				Dir.mktmpdir('omniatt') do |tmpdir|
         | 
| 37 | 
            +
            					filename = tmpdir + '/' + attached.filename
         | 
| 38 | 
            +
            					OmniLog::info "Writing attachment to #{filename}"
         | 
| 39 | 
            +
            					File.open(filename,'w') { |f| f.write attached.read }
         | 
| 40 | 
            +
            					Dir.chdir(@unpack_to) do
         | 
| 41 | 
            +
            						system("unzip -oq '#{filename}'")
         | 
| 42 | 
            +
            						raise "Error extracting file #{filename} to #{@unpack_to}" if $? != 0
         | 
| 43 | 
            +
            					end
         | 
| 44 | 
            +
            					  
         | 
| 45 | 
            +
            					message_body = "Received an email '#{m.subject}' from '#{m.from.join(',')}' with "+
         | 
| 46 | 
            +
            							"an attachment #{attached.filename}. Successfully extracted an attachment to #{@unpack_to}."
         | 
| 47 | 
            +
            					@jabber_messenger.call message_body
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            					jabber_logged_command 'Mail post-receive ', "#{@command_post} #{filename} #{@unpack_to}"
         | 
| 50 | 
            +
            				end
         | 
| 51 | 
            +
            			else
         | 
| 52 | 
            +
            				OmniLog::info "No attachment found" 
         | 
| 53 | 
            +
            			end
         | 
| 54 | 
            +
            		end
         | 
| 55 | 
            +
            		
         | 
| 56 | 
            +
            		def yaml_to_mailhash yaml_config
         | 
| 57 | 
            +
            		 { :address => yaml_config['host'],
         | 
| 58 | 
            +
            		 	 :port => yaml_config['port'],
         | 
| 59 | 
            +
            		 	 :user_name => yaml_config['user'],
         | 
| 60 | 
            +
            		 	 :password => yaml_config['password'],
         | 
| 61 | 
            +
            		 	 :enable_ssl => yaml_config['ssl']
         | 
| 62 | 
            +
            			}
         | 
| 63 | 
            +
            		end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
            	public
         | 
| 66 | 
            +
            		attr_writer :timer_provider
         | 
| 67 | 
            +
            		attr_writer :startup_pause
         | 
| 68 | 
            +
             | 
| 69 | 
            +
            		def initialize mail_config, trigger_config 
         | 
| 70 | 
            +
            			@startup_pause = 0
         | 
| 71 | 
            +
            			@mail_config = mail_config
         | 
| 72 | 
            +
            			@conditions = trigger_config['if']
         | 
| 73 | 
            +
            			@unpack_to = trigger_config['unpack_to']
         | 
| 74 | 
            +
            			@command_post = trigger_config['command_post']
         | 
| 75 | 
            +
            			@send_to = trigger_config['send_to']
         | 
| 76 | 
            +
             | 
| 77 | 
            +
            			mailhash = yaml_to_mailhash(mail_config)
         | 
| 78 | 
            +
            			Mail.defaults do
         | 
| 79 | 
            +
            				retriever_method :pop3, mailhash
         | 
| 80 | 
            +
            			end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
            			raise 'Wrong command' if (@command_post or '') == ''
         | 
| 83 | 
            +
            			raise 'No dir to extract to' unless File.directory? @unpack_to
         | 
| 84 | 
            +
            		end
         | 
| 85 | 
            +
            		
         | 
| 86 | 
            +
            		def to_s
         | 
| 87 | 
            +
            			"Mail checker for #{@send_to}"
         | 
| 88 | 
            +
            		end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
            		def start
         | 
| 91 | 
            +
            			@timer_provider.add_timer(@startup_pause) { on_first_timer }
         | 
| 92 | 
            +
            		end
         | 
| 93 | 
            +
            	end
         | 
| 94 | 
            +
             | 
| 95 | 
            +
            end
         | 
| 96 | 
            +
             | 
| @@ -3,6 +3,8 @@ module OmniBot | |
| 3 3 | 
             
            	# Send to jabber user result of a daily command
         | 
| 4 4 | 
             
            	class PeriodicCommand
         | 
| 5 5 |  | 
| 6 | 
            +
            		include OmniBot::LoggedCommand
         | 
| 7 | 
            +
             | 
| 6 8 | 
             
            		def on_first_timer
         | 
| 7 9 | 
             
            			OmniLog::debug "Okay, it's near of midnight"
         | 
| 8 10 | 
             
            			on_periodic_timer
         | 
| @@ -11,35 +13,31 @@ module OmniBot | |
| 11 13 |  | 
| 12 14 | 
             
            		def on_periodic_timer
         | 
| 13 15 | 
             
            			OmniLog::info "Reporting command #{@command}"
         | 
| 14 | 
            -
            			 | 
| 15 | 
            -
            			raise 'Error launching command ' if $? != 0
         | 
| 16 | 
            -
            			if body.strip != '' 
         | 
| 17 | 
            -
            			  message_body = "Results of daily executed command #{@command}:\n" + body
         | 
| 18 | 
            -
            			  @jabber_messenger.call message_body
         | 
| 19 | 
            -
            			end			
         | 
| 16 | 
            +
            			jabber_logged_command 'Periodic command', @command
         | 
| 20 17 | 
             
            		end
         | 
| 21 18 |  | 
| 22 19 | 
             
            	public
         | 
| 23 20 | 
             
            		attr_writer :timer_provider
         | 
| 21 | 
            +
            		attr_writer :startup_pause
         | 
| 24 22 |  | 
| 25 | 
            -
            		def initialize command | 
| 23 | 
            +
            		def initialize command 
         | 
| 26 24 | 
             
            			@command = command
         | 
| 27 | 
            -
            			@ | 
| 25 | 
            +
            			@startup_pause = 0
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            			raise 'Wrong command' if (@command or '') == ''
         | 
| 28 | 
            +
            		end
         | 
| 28 29 |  | 
| 29 | 
            -
             | 
| 30 | 
            +
            		def to_s
         | 
| 31 | 
            +
            			"Periodic command '#{@command}'"
         | 
| 30 32 | 
             
            		end
         | 
| 31 33 |  | 
| 32 34 | 
             
            		def start
         | 
| 33 35 | 
             
            			now = Time.now
         | 
| 34 36 | 
             
            			tomorrow = DateTime.now+1
         | 
| 35 37 | 
             
            			next_report_time = Time.local(tomorrow.year, tomorrow.month, tomorrow.day, 1, 0, 0)
         | 
| 36 | 
            -
            			next_report_time = next_report_time + @ | 
| 38 | 
            +
            			next_report_time = next_report_time + @startup_pause
         | 
| 37 39 | 
             
            			@timer_provider.add_timer(next_report_time - now) { on_first_timer }
         | 
| 38 40 | 
             
            		end
         | 
| 39 | 
            -
             | 
| 40 | 
            -
            		def set_jabber_messenger &block
         | 
| 41 | 
            -
            			@jabber_messenger = block
         | 
| 42 | 
            -
            		end
         | 
| 43 41 | 
             
            	end
         | 
| 44 42 |  | 
| 45 43 | 
             
            end
         | 
    
        data/lib/omnibot/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,109 +1,99 @@ | |
| 1 | 
            -
            --- !ruby/object:Gem::Specification | 
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: omnibot
         | 
| 3 | 
            -
            version: !ruby/object:Gem::Version | 
| 4 | 
            -
               | 
| 5 | 
            -
               | 
| 6 | 
            -
              - 0
         | 
| 7 | 
            -
              - 0
         | 
| 8 | 
            -
              - 9
         | 
| 9 | 
            -
              version: 0.0.9
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.0.10
         | 
| 5 | 
            +
              prerelease: 
         | 
| 10 6 | 
             
            platform: ruby
         | 
| 11 | 
            -
            authors: | 
| 7 | 
            +
            authors:
         | 
| 12 8 | 
             
            - theirix
         | 
| 13 9 | 
             
            autorequire: 
         | 
| 14 10 | 
             
            bindir: bin
         | 
| 15 11 | 
             
            cert_chain: []
         | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
            dependencies: 
         | 
| 20 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 21 | 
            -
              version_requirements: &id001 !ruby/object:Gem::Requirement 
         | 
| 22 | 
            -
                requirements: 
         | 
| 23 | 
            -
                - - ">="
         | 
| 24 | 
            -
                  - !ruby/object:Gem::Version 
         | 
| 25 | 
            -
                    segments: 
         | 
| 26 | 
            -
                    - 0
         | 
| 27 | 
            -
                    version: "0"
         | 
| 28 | 
            -
              requirement: *id001
         | 
| 12 | 
            +
            date: 2011-10-28 00:00:00.000000000Z
         | 
| 13 | 
            +
            dependencies:
         | 
| 14 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 29 15 | 
             
              name: xmpp4r
         | 
| 30 | 
            -
               | 
| 16 | 
            +
              requirement: &70197902207540 !ruby/object:Gem::Requirement
         | 
| 17 | 
            +
                none: false
         | 
| 18 | 
            +
                requirements:
         | 
| 19 | 
            +
                - - ! '>='
         | 
| 20 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 21 | 
            +
                    version: '0'
         | 
| 31 22 | 
             
              type: :runtime
         | 
| 32 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 33 | 
            -
              version_requirements: &id002 !ruby/object:Gem::Requirement 
         | 
| 34 | 
            -
                requirements: 
         | 
| 35 | 
            -
                - - ">="
         | 
| 36 | 
            -
                  - !ruby/object:Gem::Version 
         | 
| 37 | 
            -
                    segments: 
         | 
| 38 | 
            -
                    - 0
         | 
| 39 | 
            -
                    version: "0"
         | 
| 40 | 
            -
              requirement: *id002
         | 
| 41 | 
            -
              name: eventmachine
         | 
| 42 23 | 
             
              prerelease: false
         | 
| 24 | 
            +
              version_requirements: *70197902207540
         | 
| 25 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 26 | 
            +
              name: eventmachine
         | 
| 27 | 
            +
              requirement: &70197902206760 !ruby/object:Gem::Requirement
         | 
| 28 | 
            +
                none: false
         | 
| 29 | 
            +
                requirements:
         | 
| 30 | 
            +
                - - ! '>='
         | 
| 31 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 32 | 
            +
                    version: '0'
         | 
| 43 33 | 
             
              type: :runtime
         | 
| 44 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 45 | 
            -
              version_requirements: &id003 !ruby/object:Gem::Requirement 
         | 
| 46 | 
            -
                requirements: 
         | 
| 47 | 
            -
                - - ">="
         | 
| 48 | 
            -
                  - !ruby/object:Gem::Version 
         | 
| 49 | 
            -
                    segments: 
         | 
| 50 | 
            -
                    - 0
         | 
| 51 | 
            -
                    version: "0"
         | 
| 52 | 
            -
              requirement: *id003
         | 
| 53 | 
            -
              name: amqp
         | 
| 54 34 | 
             
              prerelease: false
         | 
| 35 | 
            +
              version_requirements: *70197902206760
         | 
| 36 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 37 | 
            +
              name: amqp
         | 
| 38 | 
            +
              requirement: &70197902206040 !ruby/object:Gem::Requirement
         | 
| 39 | 
            +
                none: false
         | 
| 40 | 
            +
                requirements:
         | 
| 41 | 
            +
                - - ! '>='
         | 
| 42 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 43 | 
            +
                    version: '0'
         | 
| 55 44 | 
             
              type: :runtime
         | 
| 56 | 
            -
             | 
| 45 | 
            +
              prerelease: false
         | 
| 46 | 
            +
              version_requirements: *70197902206040
         | 
| 47 | 
            +
            description: Works with AMQP for sending messages at server side.Sends notifications
         | 
| 48 | 
            +
              to an user via XMPP.Can monitor system by performing daily commands.
         | 
| 57 49 | 
             
            email: theirix@gmail.com
         | 
| 58 | 
            -
            executables: | 
| 50 | 
            +
            executables:
         | 
| 59 51 | 
             
            - omnibot
         | 
| 60 52 | 
             
            - omnisend
         | 
| 61 53 | 
             
            extensions: []
         | 
| 62 | 
            -
             | 
| 63 54 | 
             
            extra_rdoc_files: []
         | 
| 64 | 
            -
             | 
| 65 | 
            -
            files: 
         | 
| 55 | 
            +
            files:
         | 
| 66 56 | 
             
            - examples/config.yaml
         | 
| 67 57 | 
             
            - lib/omnibot/amqpconsumer.rb
         | 
| 68 58 | 
             
            - lib/omnibot/helpers.rb
         | 
| 69 59 | 
             
            - lib/omnibot/jabberbot.rb
         | 
| 70 60 | 
             
            - lib/omnibot/launcher.rb
         | 
| 61 | 
            +
            - lib/omnibot/loggedcommand.rb
         | 
| 62 | 
            +
            - lib/omnibot/mailchecker.rb
         | 
| 71 63 | 
             
            - lib/omnibot/omnisend.rb
         | 
| 72 64 | 
             
            - lib/omnibot/periodiccommand.rb
         | 
| 73 65 | 
             
            - lib/omnibot/version.rb
         | 
| 74 66 | 
             
            - lib/omnibot.rb
         | 
| 75 67 | 
             
            - Rakefile
         | 
| 76 68 | 
             
            - README.md
         | 
| 77 | 
            -
             | 
| 69 | 
            +
            - bin/omnibot
         | 
| 70 | 
            +
            - bin/omnisend
         | 
| 78 71 | 
             
            homepage: http://github.com/theirix/omnibot
         | 
| 79 72 | 
             
            licenses: []
         | 
| 80 | 
            -
             | 
| 81 73 | 
             
            post_install_message: 
         | 
| 82 74 | 
             
            rdoc_options: []
         | 
| 83 | 
            -
             | 
| 84 | 
            -
            require_paths: 
         | 
| 75 | 
            +
            require_paths:
         | 
| 85 76 | 
             
            - lib
         | 
| 86 | 
            -
            required_ruby_version: !ruby/object:Gem::Requirement | 
| 87 | 
            -
               | 
| 88 | 
            -
               | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 91 | 
            -
                   | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
               | 
| 96 | 
            -
             | 
| 97 | 
            -
             | 
| 98 | 
            -
                  segments: | 
| 77 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 78 | 
            +
              none: false
         | 
| 79 | 
            +
              requirements:
         | 
| 80 | 
            +
              - - ! '>='
         | 
| 81 | 
            +
                - !ruby/object:Gem::Version
         | 
| 82 | 
            +
                  version: '1.8'
         | 
| 83 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 84 | 
            +
              none: false
         | 
| 85 | 
            +
              requirements:
         | 
| 86 | 
            +
              - - ! '>='
         | 
| 87 | 
            +
                - !ruby/object:Gem::Version
         | 
| 88 | 
            +
                  version: '0'
         | 
| 89 | 
            +
                  segments:
         | 
| 99 90 | 
             
                  - 0
         | 
| 100 | 
            -
                   | 
| 101 | 
            -
            requirements: | 
| 91 | 
            +
                  hash: -556400770793257517
         | 
| 92 | 
            +
            requirements:
         | 
| 102 93 | 
             
            - AMQP-compatible server (for example, RabbitMQ)
         | 
| 103 94 | 
             
            rubyforge_project: nowarning
         | 
| 104 | 
            -
            rubygems_version: 1. | 
| 95 | 
            +
            rubygems_version: 1.8.6
         | 
| 105 96 | 
             
            signing_key: 
         | 
| 106 97 | 
             
            specification_version: 3
         | 
| 107 98 | 
             
            summary: Simple XMPP bot for server monitoring
         | 
| 108 99 | 
             
            test_files: []
         | 
| 109 | 
            -
             |