wink_scheduler 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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