isis-plugin-scheduler 1.0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bcb026e04d666ab21f0d32f206c53a46fb97f06f
4
+ data.tar.gz: 32502af1a395a555eef546cc26a7f9545e909f6a
5
+ SHA512:
6
+ metadata.gz: 2478549595d26529c14e158793f1421e84948f36d0065eb46ede2a214176e5efd9fece729362847e031d372afc68d9e05dcfb51b5690cb5f8b00f76228ffb2f0
7
+ data.tar.gz: bf43f6eb1eb0d873dfef6450adcac9b210f09b3ce2182df87353803cbdff5ecda96bd2bead7d2cd66eeca6b1bb708be3b6fc4a35c2317776e9416650d33c202c
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ tags
11
+ *.gem
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.5
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in isis-plugin-scheduler.gemspec
4
+ gemspec
@@ -0,0 +1,25 @@
1
+ # Isis plugin: Scheduler
2
+
3
+ This plugin adds a scheduler for running time-scheduled chat commands to the [Isis chatbot](https://github.com/silentgrowl/isis)
4
+
5
+ ## Installation
6
+
7
+ Copy config/scheduler.yml.example from the gem repo and save as ```config/scheduler.yml``` in your Isis installation.
8
+
9
+ Add this line to your Isis installation's Gemfile:
10
+
11
+ ``ruby
12
+ gem 'isis-plugin-scheduler'
13
+ ``
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ ## Usage
20
+
21
+ Edit the config/scheduler.yml file to define a list of plugins whose responses you wish to trigger, and when. Follow the format from the example
22
+
23
+ ## Links
24
+
25
+ * [isis-plugin-scheduler on RubyGems](https://rubygems.org/gems/isis-plugin-scheduler)
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "isis/plugin/scheduler"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,17 @@
1
+ ## scheduler.yml
2
+ #
3
+ # Schedule YAML block format
4
+ # --------------------------
5
+ # myname: # arbitrary key name, must be unique
6
+ # plugin: Twitter # class name of plugin, not namespaced
7
+ # time: '13:05' # time to trigger in 24hr clock
8
+ # day: nil # Day of week to trigger (0..6), default: nil
9
+ # weekdays: true # Trigger on all weekdays, default: false
10
+ # weekends: false # Trigger on all weekends, default: false
11
+ # room: 'Room Name' # name or ID of room to speak in
12
+
13
+ hn:
14
+ plugin: HackerNews
15
+ time: '08:00'
16
+ weekdays: true
17
+ room: 'My Room'
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "isis-plugin-scheduler"
7
+ spec.version = "1.0.0"
8
+ spec.authors = ["Brendon Rapp"]
9
+ spec.email = ["brendon@silentgrowl.com"]
10
+ spec.license = 'MIT'
11
+
12
+ spec.summary = %q{Isis plugin: Scheduler}
13
+ spec.description = %q{Isis plugin: Scheduler}
14
+ spec.homepage = "https://github.com/silentgrowl/isis-plugin-scheduler"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = "exe"
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.9"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ end
@@ -0,0 +1,81 @@
1
+ require "time"
2
+
3
+ module Isis
4
+ module Plugin
5
+ class Scheduler < Isis::Plugin::Base
6
+ attr_reader :response_type
7
+
8
+ def setup
9
+ @schedule = []
10
+ puts sprintf('Current time is: %02d:%02d', now.hour, now.min) if ENV['DEBUG']
11
+ load_from_config
12
+ end
13
+
14
+ # This will only return the first not-yet-spoken scheduled match, but we
15
+ # hit this method every few seconds, so items with the same scheduled time
16
+ # will each get their turn, a few seconds apart
17
+ def timer_response(types)
18
+ @schedule.each do |s|
19
+ if speak_now?(s)
20
+ @bot.plugins.each do |p|
21
+ if p.class.to_s.split('::').last == s['plugin']
22
+ response = p.response(types)
23
+ response.room = s['room']
24
+ s['last'] = now
25
+ return response
26
+ end
27
+ end
28
+ end
29
+ end
30
+ nil
31
+ end
32
+
33
+ private
34
+
35
+ def load_from_config
36
+ config_file = File.expand_path(File.join('config', 'scheduler.yml'))
37
+ raise Isis::Plugin::PluginSetupError, 'config/scheduler.yml config file not found' unless File.exists?(config_file)
38
+ config = YAML.load(File.read(config_file))
39
+ config.each do |key, item|
40
+ next unless valid_item(item)
41
+ t = Time.parse(item['time'])
42
+ defaults = { 'hour' => t.hour, 'min' => t.min, 'day' => nil, 'weekdays' => false,
43
+ 'weekends' => false, 'last' => nil }
44
+ add_to_schedule(defaults.merge(item))
45
+ end
46
+ end
47
+
48
+ def add_to_schedule(item)
49
+ @schedule << item
50
+ end
51
+
52
+ def valid_item(item)
53
+ item['plugin'].blank? || item['time'].blank? ? false : true
54
+ end
55
+
56
+ def speak_now?(s)
57
+ return false if s['last'] && today?(s['last'])
58
+ return false unless now.hour == s['hour'] && now.min == s['min']
59
+ return false unless speak_day?(s) || speak_weekday?(s) || speak_weekend?(s)
60
+ true
61
+ end
62
+
63
+ def today?(previous)
64
+ last = previous.to_date
65
+ last.day == now.day && last.month == now.month && last.year == now.year
66
+ end
67
+
68
+ def speak_day?(s)
69
+ s['day'] == now.wday
70
+ end
71
+
72
+ def speak_weekday?(s)
73
+ s['weekdays'] && (1..5).include?(now.wday)
74
+ end
75
+
76
+ def speak_weekend?(s)
77
+ s['weekends'] && [0, 6].include?(now.wday)
78
+ end
79
+ end
80
+ end
81
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: isis-plugin-scheduler
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Brendon Rapp
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-05-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.9'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.9'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: 'Isis plugin: Scheduler'
42
+ email:
43
+ - brendon@silentgrowl.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".gitignore"
49
+ - ".travis.yml"
50
+ - Gemfile
51
+ - README.md
52
+ - Rakefile
53
+ - bin/console
54
+ - bin/setup
55
+ - config/scheduler.yml.example
56
+ - isis-plugin-scheduler.gemspec
57
+ - lib/isis/plugin/scheduler.rb
58
+ homepage: https://github.com/silentgrowl/isis-plugin-scheduler
59
+ licenses:
60
+ - MIT
61
+ metadata: {}
62
+ post_install_message:
63
+ rdoc_options: []
64
+ require_paths:
65
+ - lib
66
+ required_ruby_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ requirements: []
77
+ rubyforge_project:
78
+ rubygems_version: 2.2.2
79
+ signing_key:
80
+ specification_version: 4
81
+ summary: 'Isis plugin: Scheduler'
82
+ test_files: []
83
+ has_rdoc: