wink_scheduler 0.0.4 → 0.0.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8c4c103d9560e9ab6289aebb057cece51f4bd069
4
- data.tar.gz: e0c716000fcf8b322943729abf78e3d15c9c39a1
3
+ metadata.gz: b2ff30735de7c01df6a4f32dcc45e31aea1cf011
4
+ data.tar.gz: 0c4974a6528f78eaddbec636fa168db779f88dd0
5
5
  SHA512:
6
- metadata.gz: 87e299fc57d4d491b5fd276ca735df98c9485bf2e3402b773c222d2e5eef93e7a02ca00798f8f41322e764d203fbc7be89bde378b25b409a34133437627e8534
7
- data.tar.gz: 2b3659bf153bab01ef4dd33483a9b0802ca694fb6a27be8e3cfc1745dd49e2f542affbb9750f9bb4a6b718dc4befa4e974b2bddd72af874741b00c48cbc25144
6
+ metadata.gz: 780e6e6635e9869a29398c3445f1a42fb515fb67dd4c3783b126588851f779e53b92883eece3bad0ca0b6a9966dc4df1a72f3276e059c9c3023b0f632af02df2
7
+ data.tar.gz: e254e9ff147d319d224d1b2e1805a33b34d6022eac26f6e13d0a43cab056ba0eaae40f550fdd4d7ee34e26e4baf127bbe0a267b610ec2211c8f4e9f7c0f693c6
data/bin/wink_scheduler CHANGED
@@ -1,24 +1,28 @@
1
1
  #! /usr/bin/env ruby
2
2
 
3
3
  require 'wink_scheduler'
4
+ require 'logger'
4
5
 
5
6
  $stdout.sync = true
6
7
  $stderr.sync = true
7
8
 
9
+ logger = Logger.new(STDOUT)
10
+ logger.level = Logger::INFO
11
+
8
12
  if ARGV[0]
9
13
  begin
10
14
  conf = YAML.load_file(ARGV[0])
11
- w = WinkScheduler::Client.new(conf)
15
+ w = WinkScheduler::Client.new(conf, logger)
12
16
  w.run
13
- rescue Psych::SyntaxError => e1
14
- $stderr.puts "ERROR -- invalid configuration file #{e1.message}"
15
- exit 1
16
- rescue => e2
17
- $stderr.puts "ERROR -- #{e2.message}"
18
- exit 1
19
17
  rescue SystemExit, Interrupt
20
18
  exit 1
19
+ rescue Psych::SyntaxError => e1
20
+ logger.fatal "Invalid configuration file #{e1.message}"
21
+ exit 2
22
+ rescue => e2
23
+ logger.fatal e2.message
24
+ exit 3
21
25
  end
22
26
  else
23
- $stderr.puts "ERROR: must provide configuration file"
27
+ logger.fatal "Configuration file must be provided."
24
28
  end
@@ -3,9 +3,10 @@ require 'wink_scheduler/schedule'
3
3
 
4
4
  module WinkScheduler
5
5
  class Client
6
- def initialize(conf)
6
+ def initialize(conf, logger)
7
7
  @auth = conf["auth"]
8
8
  @schedules = conf["schedules"]
9
+ @logger = logger
9
10
 
10
11
  Winker.configure do |wink|
11
12
  wink.client_id = @auth["client_id"]
@@ -25,9 +26,10 @@ module WinkScheduler
25
26
  threads = []
26
27
  devices = Winker.devices
27
28
  groups = Winker.groups
29
+ context = { :devices => devices, :groups => groups, :logger => @logger }
28
30
  @schedules.each do |s|
29
31
  threads << Thread.new do
30
- w = WinkScheduler::Schedule.new(s, devices, groups)
32
+ w = WinkScheduler::Schedule.new(context, s)
31
33
  w.run
32
34
  end
33
35
  end
@@ -7,8 +7,13 @@ require 'rufus-scheduler'
7
7
 
8
8
  module WinkScheduler
9
9
  class Schedule
10
- def initialize(opts, devices, groups)
10
+ def initialize(context, opts)
11
11
  @scheduler = Rufus::Scheduler.new
12
+
13
+ @logger = context[:logger]
14
+ devices = context[:devices]
15
+ groups = context[:groups]
16
+
12
17
  if opts["device"]
13
18
  @object = devices.select { |d| next if d == nil; d.name == opts["device"] }[0]
14
19
  raise "device \"#{opts["device"]}\" not found" unless @object
@@ -34,6 +39,25 @@ module WinkScheduler
34
39
  raise "Schedule must define 'method' option"
35
40
  end
36
41
 
42
+ if opts["method_args"]
43
+ arity = @object.method(@method).arity
44
+ if arity == 0
45
+ raise "#{@method} does not take arguments. 'method_args' must be nil"
46
+ elsif arity > 0
47
+ if opts["method_args"].length == arity
48
+ @method_args = opts["method_args"]
49
+ else
50
+ raise "#{@method} requires #{arity} argument(s). Invalid 'method_args' option"
51
+ end
52
+ elsif arity < 0
53
+ if opts["method_args"].length >= arity.abs
54
+ @method_args = opts["method_args"]
55
+ else
56
+ raise "#{@method} requires at least #{arity} argument(s). Invalid 'method_args' option"
57
+ end
58
+ end
59
+ end
60
+
37
61
  if opts["time"]
38
62
  @time = opts["time"]
39
63
  else
@@ -87,12 +111,16 @@ module WinkScheduler
87
111
 
88
112
  def execute
89
113
  next_time = get_next_time
90
- puts "Scheduled \"#{@method}\" on #{@type} \"#{@object.name}\" at #{next_time}."
114
+ @logger.info "Scheduled \"#{@method}#{"(" + @method_args.join(",") + ")" if @method_args}\" on #{@type} \"#{@object.name}\" at #{next_time}."
91
115
  @scheduler.at next_time do
92
- @object.send(@method)
116
+ if @method_args
117
+ @object.send(@method, *@method_args)
118
+ else
119
+ @object.send(@method)
120
+ end
93
121
  end
94
122
  @scheduler.join
95
- puts "Executed \"#{@method}\" on #{@type} \"#{@object.name}\" at #{next_time}."
123
+ @logger.info "Executed \"#{@method}\" on #{@type} \"#{@object.name}\"."
96
124
  end
97
125
 
98
126
  def get_next_time
@@ -1,3 +1,3 @@
1
1
  module WinkScheduler
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wink_scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe Lanford