light_me_up 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +10 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +9 -1
- data/bin/light-me-up +43 -12
- data/lib/light_me_up/api_client.rb +16 -14
- data/lib/light_me_up/error.rb +2 -0
- data/lib/light_me_up/light.rb +5 -2
- data/lib/light_me_up/light_serializer.rb +7 -5
- data/lib/light_me_up/settings_update.rb +10 -25
- data/lib/light_me_up/version.rb +1 -1
- data/lib/light_me_up.rb +0 -1
- metadata +18 -4
- data/lib/light_me_up/option_parser.rb +0 -75
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 500a673faf1257f9237ad66eb5c47cc852e3304f0aa458b137368afd720a9354
|
4
|
+
data.tar.gz: e9bd47febd94eb07be90b4914ad8cf5c2ad9b252751e98ab1fa989a64f77984b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 39f34213c145f83d0dc2db551514599d5b66d0d1db5ea5275e64440b5273e7620c7de8d0d31fa67290a1621cf86c1d976e92ba710145629ad673d6004abaf9d2
|
7
|
+
data.tar.gz: e7b88500d35fe156b9c1fc22e9b9c19ce3cd58cf7b2a7ffdf8fed9a3200f149a306440492768a20f33d5a26755bbdd190c812e64608ff587d882634a2ec7592b
|
data/.rubocop.yml
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
AllCops:
|
2
2
|
TargetRubyVersion: 2.6
|
3
|
+
NewCops: enable
|
3
4
|
|
4
5
|
Style/StringLiterals:
|
5
6
|
Enabled: true
|
@@ -11,3 +12,12 @@ Style/StringLiteralsInInterpolation:
|
|
11
12
|
|
12
13
|
Layout/LineLength:
|
13
14
|
Max: 120
|
15
|
+
|
16
|
+
Style/Documentation:
|
17
|
+
Enabled: false
|
18
|
+
|
19
|
+
Style/TrailingCommaInHashLiteral:
|
20
|
+
EnforcedStyleForMultiline: comma
|
21
|
+
|
22
|
+
Layout/MultilineAssignmentLayout:
|
23
|
+
EnforcedStyle: same_line
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
light_me_up (0.
|
4
|
+
light_me_up (0.2.0)
|
5
|
+
optimist (~> 3.0)
|
5
6
|
|
6
7
|
GEM
|
7
8
|
remote: https://rubygems.org/
|
8
9
|
specs:
|
9
10
|
ast (2.4.2)
|
10
11
|
minitest (5.15.0)
|
12
|
+
optimist (3.0.1)
|
11
13
|
parallel (1.21.0)
|
12
14
|
parser (3.0.3.2)
|
13
15
|
ast (~> 2.4.1)
|
@@ -26,6 +28,10 @@ GEM
|
|
26
28
|
unicode-display_width (>= 1.4.0, < 3.0)
|
27
29
|
rubocop-ast (1.15.0)
|
28
30
|
parser (>= 3.0.1.1)
|
31
|
+
rubocop-minitest (0.17.0)
|
32
|
+
rubocop (>= 0.90, < 2.0)
|
33
|
+
rubocop-rake (0.6.0)
|
34
|
+
rubocop (~> 1.0)
|
29
35
|
ruby-progressbar (1.11.0)
|
30
36
|
unicode-display_width (2.1.0)
|
31
37
|
|
@@ -37,6 +43,8 @@ DEPENDENCIES
|
|
37
43
|
minitest (~> 5.0)
|
38
44
|
rake (~> 13.0)
|
39
45
|
rubocop (~> 1.21)
|
46
|
+
rubocop-minitest (~> 0.17)
|
47
|
+
rubocop-rake (~> 0.6)
|
40
48
|
|
41
49
|
BUNDLED WITH
|
42
50
|
2.2.32
|
data/bin/light-me-up
CHANGED
@@ -1,19 +1,50 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require_relative "../lib/light_me_up"
|
5
|
+
require "optimist"
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
brightness_help = format(
|
8
|
+
"Set the brightness (%<min>d to %<max>d)",
|
9
|
+
min: LightMeUp::Light.min_brightness,
|
10
|
+
max: LightMeUp::Light.max_brightness
|
11
|
+
)
|
12
|
+
temperature_help = format(
|
13
|
+
"Set the temperature (%<min>d to %<max>d)",
|
14
|
+
min: LightMeUp::Light.min_temperature,
|
15
|
+
max: LightMeUp::Light.max_temperature
|
14
16
|
)
|
15
17
|
|
16
|
-
options =
|
18
|
+
options = Optimist.options do
|
19
|
+
banner "Usage: #{$PROGRAM_NAME} [options]"
|
20
|
+
|
21
|
+
opt :toggle, "Toggle whether the lights are on or off", short: "T"
|
22
|
+
opt :on, "Turn the light on"
|
23
|
+
opt :off, "Turn the light off", short: "O"
|
24
|
+
opt :ip_address, "Specify the IP address", type: :string, default: ENV["ELGATO_IP_ADDRESS"]
|
25
|
+
opt :defaults, "Set to default values"
|
26
|
+
opt :brightness, brightness_help, type: :integer
|
27
|
+
opt :temperature, temperature_help, type: :integer
|
28
|
+
end
|
29
|
+
|
30
|
+
options = options.select { |_k, v| v }
|
31
|
+
options[:on] = false if options.delete(:off)
|
32
|
+
if options.delete(:defaults)
|
33
|
+
options.reverse_merge!(
|
34
|
+
brightness: ENV["ELGATO_DEFAULT_BRIGHTNESS"].to_i,
|
35
|
+
temperature: ENV["ELGATO_DEFAULT_TEMPERATURE"].to_i
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
17
39
|
api_client = LightMeUp::ApiClient.new(ip_address: options[:ip_address])
|
18
|
-
|
19
|
-
|
40
|
+
|
41
|
+
begin
|
42
|
+
LightMeUp::SettingsUpdate.new(api_client, options).perform
|
43
|
+
rescue LightMeUp::SettingsUpdate::ToggleIncompatible => e
|
44
|
+
Optimist.die :toggle, e.message
|
45
|
+
rescue LightMeUp::NoOptionsGiven
|
46
|
+
Optimist.educate
|
47
|
+
rescue LightMeUp::Error => e
|
48
|
+
warn e.message
|
49
|
+
exit 1
|
50
|
+
end
|
@@ -1,8 +1,10 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "net/http"
|
4
|
+
require "json"
|
3
5
|
|
4
6
|
module LightMeUp
|
5
|
-
class ApiClient
|
7
|
+
class ApiClient # rubocop:disable Metrics/ClassLength
|
6
8
|
DEFAULT_PORT = 9123
|
7
9
|
LIGHTS_PATH = "/elgato/lights"
|
8
10
|
OPEN_TIMEOUT = 2 # seconds
|
@@ -10,6 +12,7 @@ module LightMeUp
|
|
10
12
|
|
11
13
|
def initialize(ip_address:, port: DEFAULT_PORT)
|
12
14
|
raise Error, "No ip_address specified." unless ip_address && ip_address != ""
|
15
|
+
|
13
16
|
@ip_address = ip_address
|
14
17
|
@port = port
|
15
18
|
end
|
@@ -20,7 +23,7 @@ module LightMeUp
|
|
20
23
|
end
|
21
24
|
|
22
25
|
def toggle
|
23
|
-
with_connection do |
|
26
|
+
with_connection do |_http|
|
24
27
|
current_status = status
|
25
28
|
|
26
29
|
if current_status.on
|
@@ -31,24 +34,24 @@ module LightMeUp
|
|
31
34
|
end
|
32
35
|
end
|
33
36
|
|
34
|
-
def
|
37
|
+
def update(on: nil, brightness: nil, temperature: nil)
|
35
38
|
update_light(Light.new(on: on, brightness: brightness, temperature: temperature))
|
36
39
|
end
|
37
40
|
|
38
41
|
def turn_light_on
|
39
|
-
|
42
|
+
update(on: true)
|
40
43
|
end
|
41
44
|
|
42
45
|
def turn_light_off
|
43
|
-
|
46
|
+
update(on: false)
|
44
47
|
end
|
45
48
|
|
46
|
-
def
|
47
|
-
|
49
|
+
def update_brightness(brightness)
|
50
|
+
update(brightness: brightness)
|
48
51
|
end
|
49
52
|
|
50
|
-
def
|
51
|
-
|
53
|
+
def update_temperature(temperature)
|
54
|
+
update(temperature: temperature)
|
52
55
|
end
|
53
56
|
|
54
57
|
private
|
@@ -67,7 +70,7 @@ module LightMeUp
|
|
67
70
|
def build_light_configuration_data(lights)
|
68
71
|
{
|
69
72
|
numberOfLights: lights.size,
|
70
|
-
lights: lights.map { |l| LightSerializer.serialize(l) }
|
73
|
+
lights: lights.map { |l| LightSerializer.serialize(l) },
|
71
74
|
}
|
72
75
|
end
|
73
76
|
|
@@ -108,7 +111,7 @@ module LightMeUp
|
|
108
111
|
|
109
112
|
def perform_request_with_connection(method, uri, &block)
|
110
113
|
request = build_request(method, uri)
|
111
|
-
request[
|
114
|
+
request["Content-Type"] = "application/json"
|
112
115
|
block.call(request) if block_given?
|
113
116
|
response = connection.request(request)
|
114
117
|
|
@@ -118,7 +121,6 @@ module LightMeUp
|
|
118
121
|
else
|
119
122
|
raise Error, response.body
|
120
123
|
end
|
121
|
-
|
122
124
|
end
|
123
125
|
|
124
126
|
def build_request(method, uri)
|
data/lib/light_me_up/error.rb
CHANGED
data/lib/light_me_up/light.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module LightMeUp
|
2
4
|
class Light
|
3
5
|
attr_reader :on, :brightness, :temperature
|
4
6
|
|
5
|
-
BRIGHTNESS_RANGE = (0..100)
|
6
|
-
TEMPERATURE_RANGE = (143..344)
|
7
|
+
BRIGHTNESS_RANGE = (0..100).freeze
|
8
|
+
TEMPERATURE_RANGE = (143..344).freeze
|
7
9
|
|
8
10
|
class << self
|
9
11
|
def max_brightness
|
@@ -45,6 +47,7 @@ module LightMeUp
|
|
45
47
|
def validate_range(value, range, name)
|
46
48
|
return if value.nil?
|
47
49
|
return if range.include?(value)
|
50
|
+
|
48
51
|
raise Error, "#{name} must be between #{range.first} and #{range.last}"
|
49
52
|
end
|
50
53
|
end
|
@@ -1,12 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module LightMeUp
|
2
4
|
class LightSerializer
|
3
5
|
class << self
|
4
6
|
def serialize(light)
|
5
7
|
on_as_int = if light.on.nil?
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
nil
|
9
|
+
else
|
10
|
+
light.on ? 1 : 0
|
11
|
+
end
|
10
12
|
|
11
13
|
{
|
12
14
|
on: on_as_int,
|
@@ -20,7 +22,7 @@ module LightMeUp
|
|
20
22
|
Light.new(
|
21
23
|
on: light["on"] == 1,
|
22
24
|
brightness: light["brightness"],
|
23
|
-
temperature: light["temperature"]
|
25
|
+
temperature: light["temperature"]
|
24
26
|
)
|
25
27
|
end
|
26
28
|
end
|
@@ -1,42 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module LightMeUp
|
2
4
|
class SettingsUpdate
|
3
|
-
attr_reader :api_client, :options
|
5
|
+
attr_reader :api_client, :options
|
6
|
+
|
7
|
+
class ToggleIncompatible < Error; end
|
8
|
+
class NoOptionsGiven < Error; end
|
4
9
|
|
5
|
-
def initialize(api_client, options
|
10
|
+
def initialize(api_client, options)
|
6
11
|
@api_client = api_client
|
7
12
|
@options = options
|
8
|
-
@help_message = help_message
|
9
|
-
@output_stream = output_stream
|
10
|
-
@error_output_stream = error_output_stream
|
11
13
|
end
|
12
14
|
|
13
15
|
def perform
|
14
|
-
if options[:help]
|
15
|
-
puts parser.help_message
|
16
|
-
return true
|
17
|
-
end
|
18
|
-
|
19
16
|
if options[:toggle]
|
20
|
-
if settings_options.any?
|
21
|
-
error_output_stream.puts "Toggle is not compatible with setting other options."
|
22
|
-
output_stream.puts help_message
|
23
|
-
return false
|
24
|
-
end
|
17
|
+
raise ToggleIncompatible, "is not compatible with setting other options" if settings_options.any?
|
25
18
|
|
26
19
|
api_client.toggle
|
27
|
-
return true
|
28
20
|
end
|
29
21
|
|
30
|
-
if settings_options.any?
|
31
|
-
api_client.set(**settings_options)
|
32
|
-
return true
|
33
|
-
end
|
22
|
+
api_client.set(**settings_options) if settings_options.any?
|
34
23
|
|
35
|
-
|
36
|
-
return false
|
37
|
-
rescue LightMeUp::Error => e
|
38
|
-
error_output_stream.puts e.message
|
39
|
-
return false
|
24
|
+
raise NoOptionsGiven, "provide at least one option"
|
40
25
|
end
|
41
26
|
|
42
27
|
private
|
data/lib/light_me_up/version.rb
CHANGED
data/lib/light_me_up.rb
CHANGED
@@ -4,6 +4,5 @@ require_relative "light_me_up/version"
|
|
4
4
|
require_relative "light_me_up/error"
|
5
5
|
require_relative "light_me_up/light"
|
6
6
|
require_relative "light_me_up/light_serializer"
|
7
|
-
require_relative "light_me_up/option_parser"
|
8
7
|
require_relative "light_me_up/settings_update"
|
9
8
|
require_relative "light_me_up/api_client"
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: light_me_up
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter McCracken
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-01-
|
12
|
-
dependencies:
|
11
|
+
date: 2022-01-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: optimist
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
13
27
|
description: Provides the ability to turn on and off, and adjust brightness and temperature,
|
14
28
|
on a key light.
|
15
29
|
email:
|
@@ -35,7 +49,6 @@ files:
|
|
35
49
|
- lib/light_me_up/error.rb
|
36
50
|
- lib/light_me_up/light.rb
|
37
51
|
- lib/light_me_up/light_serializer.rb
|
38
|
-
- lib/light_me_up/option_parser.rb
|
39
52
|
- lib/light_me_up/settings_update.rb
|
40
53
|
- lib/light_me_up/version.rb
|
41
54
|
homepage: https://github.com/peterjm/light_me_up
|
@@ -45,6 +58,7 @@ metadata:
|
|
45
58
|
homepage_uri: https://github.com/peterjm/light_me_up
|
46
59
|
source_code_uri: https://github.com/peterjm/light_me_up
|
47
60
|
changelog_uri: https://github.com/peterjm/light_me_up/CHANGELOG.md
|
61
|
+
rubygems_mfa_required: 'true'
|
48
62
|
post_install_message:
|
49
63
|
rdoc_options: []
|
50
64
|
require_paths:
|
@@ -1,75 +0,0 @@
|
|
1
|
-
require 'optparse'
|
2
|
-
|
3
|
-
module LightMeUp
|
4
|
-
class OptionParser
|
5
|
-
MESSAGES = {
|
6
|
-
help: "Prints this help message",
|
7
|
-
toggle: "Toggle whether the lights are on or off",
|
8
|
-
on: "Turn the light on",
|
9
|
-
off: "Turn the light off",
|
10
|
-
ip_address: "Specify the IP address",
|
11
|
-
defaults: "Set to default values",
|
12
|
-
brightness: "Set the brightness (%d to %d)" %
|
13
|
-
[LightMeUp::Light.min_brightness, LightMeUp::Light.max_brightness],
|
14
|
-
temperature: "Set the temperature (%d to %d)" %
|
15
|
-
[LightMeUp::Light.min_temperature, LightMeUp::Light.max_temperature],
|
16
|
-
}
|
17
|
-
|
18
|
-
attr_reader :program_name, :options, :default_settings
|
19
|
-
|
20
|
-
def initialize(program_name:, starting_options:, default_settings:)
|
21
|
-
@program_name = program_name
|
22
|
-
@options = starting_options.dup
|
23
|
-
@default_settings = default_settings.dup
|
24
|
-
end
|
25
|
-
|
26
|
-
def parse(input_options)
|
27
|
-
parser.parse!(input_options)
|
28
|
-
options
|
29
|
-
end
|
30
|
-
|
31
|
-
def help_message
|
32
|
-
parser.to_s
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
|
-
def parser
|
38
|
-
@parser ||= ::OptionParser.new do |opts|
|
39
|
-
opts.banner = "Usage: #{program_name} [options]"
|
40
|
-
|
41
|
-
opts.on("-h", "--help", MESSAGES[:help]) do
|
42
|
-
options[:help] = true
|
43
|
-
end
|
44
|
-
|
45
|
-
opts.on("-T", "--toggle", MESSAGES[:toggle]) do
|
46
|
-
options[:toggle] = true
|
47
|
-
end
|
48
|
-
|
49
|
-
opts.on("-o", "--on", MESSAGES[:on]) do
|
50
|
-
options[:on] = true
|
51
|
-
end
|
52
|
-
|
53
|
-
opts.on("-O", "--off", MESSAGES[:off]) do
|
54
|
-
options[:on] = false
|
55
|
-
end
|
56
|
-
|
57
|
-
opts.on("-i", "--ip-address=IP_ADDRESS", MESSAGES[:ip_address]) do |ip_address|
|
58
|
-
options[:ip_address] = ip_address
|
59
|
-
end
|
60
|
-
|
61
|
-
opts.on("-d", "--defaults", MESSAGES[:defaults]) do
|
62
|
-
options.merge!(default_settings)
|
63
|
-
end
|
64
|
-
|
65
|
-
opts.on("-bBRIGHTNESS", "--brightness=BRIGHTNESS", MESSAGES[:brightness]) do |brightness|
|
66
|
-
options[:brightness] = brightness.to_i
|
67
|
-
end
|
68
|
-
|
69
|
-
opts.on("-tTEMPERATURE", "--temperature=TEMPERATURE", MESSAGES[:temperature]) do |temperature|
|
70
|
-
options[:temperature] = temperature.to_i
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|