lifx_dash 0.3.1 → 0.4.0

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
  SHA256:
3
- metadata.gz: f0e67bbe784dc06c3c111d6933809d2404529d88047ee55dbbd816379a03ee06
4
- data.tar.gz: 2ae77cef8817730f5ba6a15f60f0f4136763ffc80823910111ba6152de485e34
3
+ metadata.gz: 251f4790426026ae467c0365fc5bcf80ced642efeb6d4735b0114c90bfd69253
4
+ data.tar.gz: dd7221baf7af6d9aa8a05b8a3775a32da9d6f204238733021bb4af6bc255ee18
5
5
  SHA512:
6
- metadata.gz: 1b6033ff970855599b43eb9752fafc2bc0f970773c9bbaa0cee7770c572ef596f57fe67cdf61a71c68e4badb2d3ca086ae8a06dd9686db98e0a523a7a6065a36
7
- data.tar.gz: 597ef41ec1d531d32f9bf6a0d0ed5da1624f4455b401bdb45545b1ceff397654a3a996a61da86373fa2d3991ae4926d8de87beae23e21d759e2dcda9f6a5627a
6
+ metadata.gz: 48ec583e80fb92bb429e2ce8f0d6492d7ca912de6e2c32219d6203cc1e8293942e2338f51d983e326a1af0012a5ce0b1f7c7a72209ec364908a1618f410bade3
7
+ data.tar.gz: af4d47c2a80703954cffce9b15713159608d16a500705826890200be6f9eda384dcdba324cfd63ab060f37730c57face82379ed08030c2d335a405a94255d7c4
@@ -1,17 +1,14 @@
1
1
  sudo: required
2
2
  language: ruby
3
3
  rvm:
4
- - 2.1.10
5
- - 2.2.9
6
- - 2.3.6
7
- - 2.4.3
8
- - 2.5.1
4
+ - 2.3.8
5
+ - 2.4.6
6
+ - 2.5.5
7
+ - 2.6.3
9
8
  - ruby-head
10
9
 
11
10
  before_install:
12
11
  - sudo apt-get install libpcap-dev -qq
13
- - gem update --system
14
- - gem install bundler
15
12
 
16
13
  matrix:
17
14
  allow_failures:
@@ -2,13 +2,20 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
- The format is based on [Keep a Changelog](KeepAChangelog) and this project
6
- adheres to [Semantic Versioning](Semver).
5
+ The format is based on [Keep a Changelog][KeepAChangelog] and this project
6
+ adheres to [Semantic Versioning][Semver].
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
10
  - Your contribution here!
11
11
 
12
+ ## [0.4.0] - 2019-04-23
13
+ ### Added
14
+ - `frozen_string_literal: true` to all Ruby files
15
+
16
+ ### Removed
17
+ - Support for Ruby < 2.3 (earlier versions no longer supported)
18
+
12
19
  ## [0.3.1] - 2018-05-23
13
20
  ### Changed
14
21
  - Adding links to gemspec
@@ -28,7 +35,8 @@ adheres to [Semantic Versioning](Semver).
28
35
  - Dameonizing option for monitor command (writing to a log file)
29
36
  - Built with gli command-suite gem
30
37
 
31
- [Unreleased]: https://github.com/matthutchinson/lifx_dash/compare/v0.3.1...HEAD
38
+ [Unreleased]: https://github.com/matthutchinson/lifx_dash/compare/v0.4.0...HEAD
39
+ [0.4.0]: https://github.com/matthutchinson/lifx_dash/compare/v0.3.1...v0.4.0
32
40
  [0.3.1]: https://github.com/matthutchinson/lifx_dash/compare/v0.1.3...v0.3.1
33
41
  [0.1.3]: https://github.com/matthutchinson/lifx_dash/compare/v0.1.1...v0.1.3
34
42
  [0.1.1]: https://github.com/matthutchinson/lifx_dash/compare/v0.1.0...v0.1.1
@@ -55,7 +55,7 @@ further defined and clarified by project maintainers.
55
55
  ## Enforcement
56
56
 
57
57
  Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
- reported by contacting the project team at via [Github][maintainer]. All
58
+ reported by contacting the project team at matt@hiddenloop.com. All
59
59
  complaints will be reviewed and investigated and will result in a response that
60
60
  is deemed necessary and appropriate to the circumstances. The project team is
61
61
  obligated to maintain confidentiality with regard to the reporter of an incident.
@@ -71,4 +71,3 @@ This Code of Conduct is adapted from the [Contributor Covenant][homepage], versi
71
71
  available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
72
72
 
73
73
  [homepage]: https://www.contributor-covenant.org
74
- [maintainer]: https://github.com/matthutchinson
@@ -0,0 +1,17 @@
1
+ Feature: Show help information
2
+ In order to show command line help
3
+
4
+ Scenario: Show general command line help
5
+ When I get help for "lifx_dash"
6
+ Then the output should contain " lifx_dash - Toggle LIFX lights with an Amazon Dash button"
7
+ Then the output should match / config - (.*)/
8
+ Then the output should match / help - (.*)/
9
+ Then the output should match / monitor - (.*)/
10
+ Then the output should match / snoop - (.*)/
11
+ And the exit status should be 0
12
+
13
+ Scenario: Show config help
14
+ When I run `lifx_dash help config`
15
+ Then the output should contain " config - Set (and persist) default options for commands"
16
+ Then the output should contain " -s, --[no-]show - Show the config file"
17
+ And the exit status should be 0
@@ -0,0 +1,4 @@
1
+ When /^I get help for "([^"]*)"$/ do |app_name|
2
+ @app_name = app_name
3
+ step %(I run `#{app_name} help`)
4
+ end
@@ -0,0 +1 @@
1
+ require 'aruba/cucumber'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # stdlib
2
4
  require "logger"
3
5
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "packetfu"
2
3
 
3
4
  module LifxDash
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "yaml"
2
3
 
3
4
  module LifxDash
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LifxDash
2
4
  class Daemonizer
3
5
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "net/https"
2
3
  require "json"
3
4
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LifxDash
2
4
  class Monitor
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LifxDash
2
4
  class Snoop
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module LifxDash
2
- VERSION = "0.3.1"
4
+ VERSION = "0.4.0"
3
5
  end
@@ -22,21 +22,13 @@ Gem::Specification.new do |spec|
22
22
  EOF
23
23
 
24
24
  spec.metadata = {
25
- "homepage_uri" => "https://github.com/matthutchinson/lifx_dash",
26
- "changelog_uri" => "https://github.com/matthutchinson/lifx_dash/blob/master/CHANGELOG.md",
27
- "source_code_uri" => "https://github.com/matthutchinson/lifx_dash",
28
- "bug_tracker_uri" => "https://github.com/matthutchinson/lifx_dash/issues",
25
+ "homepage_uri" => "https://github.com/matthutchinson/lifx_dash",
26
+ "changelog_uri" => "https://github.com/matthutchinson/lifx_dash/blob/master/CHANGELOG.md",
27
+ "source_code_uri" => "https://github.com/matthutchinson/lifx_dash",
28
+ "bug_tracker_uri" => "https://github.com/matthutchinson/lifx_dash/issues",
29
+ "allowed_push_host" => "https://rubygems.org"
29
30
  }
30
31
 
31
- # Prevent pushing this gem to RubyGems.org. To allow pushes either set the
32
- # 'allowed_push_host' to allow pushing to a single host or delete this section
33
- # to allow pushing to any host.
34
- if spec.respond_to?(:metadata)
35
- spec.metadata['allowed_push_host'] = "https://rubygems.org"
36
- else
37
- raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
38
- end
39
-
40
32
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|features)/}) }
41
33
  spec.test_files = `git ls-files -- {test,features}/*`.split("\n")
42
34
  spec.bindir = "bin"
@@ -44,12 +36,11 @@ Gem::Specification.new do |spec|
44
36
  spec.require_paths = ["lib"]
45
37
 
46
38
  # documentation
47
- spec.has_rdoc = true
48
39
  spec.extra_rdoc_files = ['README.md', 'LICENSE.txt']
49
40
  spec.rdoc_options << '--title' << 'lifx_dash' << '--main' << 'README.md' << '-ri'
50
41
 
51
42
  # non-gem dependecies
52
- spec.required_ruby_version = ">= 2.1"
43
+ spec.required_ruby_version = ">= 2.3"
53
44
  spec.requirements << 'libpcap'
54
45
  spec.requirements << 'an Amazon Dash button'
55
46
  spec.requirements << 'one or more LIFX bulbs'
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+ require File.expand_path(File.dirname(__FILE__)+'/../test_helper')
3
+
4
+ class TestLifxHTTPApi < Minitest::Test
5
+
6
+ def setup
7
+ @logger = MiniTest::Mock.new
8
+ @api_client = LifxDash::LifxHTTPApi.new('my-token', @logger)
9
+ end
10
+
11
+ def test_toggles_lights_logging_successful
12
+ selector = "d073d500ec8e"
13
+ body = { results: [{ id: "d073d500ec8e", label: "Golden Boy", status: "ok" } ]}.to_json
14
+ stub_request(:post, lifx_url(selector)).to_return(body: body, status: 207)
15
+
16
+ @logger.expect(:info, nil, ["Toggling lights! (via #{LifxDash::LifxHTTPApi::BASE_URI})"])
17
+ @logger.expect(:info, nil, ["Lights toggled successfully!"])
18
+ @logger.expect(:info, nil, ["API reply (207): #{body}"])
19
+ @api_client.toggle(selector)
20
+
21
+ assert @logger.verify
22
+ end
23
+
24
+ def test_toggles_lights_logging_warnings
25
+ selector = "all"
26
+ http_responses = {
27
+ 401 => { error: "Invalid token" }, # invalid token in header
28
+ 500 => nil, # server issue
29
+ 207 => "{}" # server OK, but results not present
30
+ }
31
+
32
+ http_responses.each do |code, api_response_body|
33
+ stub_request(:post, lifx_url(selector)).
34
+ to_return(body: api_response_body.to_json, status: code)
35
+
36
+ @logger.expect(:info, nil, ["Toggling lights! (via #{LifxDash::LifxHTTPApi::BASE_URI})"])
37
+ @logger.expect(:warn, nil, ["Warning: Possible issue with LIFX lights or HTTP API response"])
38
+ @logger.expect(:warn, nil, ["API reply (#{code}): #{api_response_body.to_json}"])
39
+ @api_client.toggle(selector)
40
+
41
+ assert @logger.verify
42
+ end
43
+ end
44
+
45
+ def test_raises_error_on_toggle_when_http_errors
46
+ assert_raises(Errno::ECONNRESET) do
47
+ @logger.expect(:info, nil, ["Toggling lights! (via #{LifxDash::LifxHTTPApi::BASE_URI})"])
48
+ @logger.expect(:error, nil, ["Error: POST request to #{LifxDash::LifxHTTPApi::BASE_URI} failed: Connection reset by peer"])
49
+
50
+ net_error = -> (uri) { raise Errno::ECONNRESET.new }
51
+ Net::HTTP::Post.stub :new, net_error do
52
+ @api_client.toggle('all')
53
+ end
54
+
55
+ assert @logger.verify
56
+ end
57
+ end
58
+
59
+ def test_raises_error_on_toggle_with_bad_selector
60
+ assert_raises do
61
+ bad_selector = "im a bad bulb selector"
62
+ @logger.expect(:error, nil, [
63
+ "Error: POST request to #{LifxDash::LifxHTTPApi::BASE_URI} failed: bad URI(is not URI?): #{lifx_url(bad_selector)}"
64
+ ])
65
+ @api_client.toggle(bad_selector)
66
+
67
+ assert @logger.verify
68
+ end
69
+ end
70
+
71
+ private
72
+
73
+ def lifx_url(selector)
74
+ "https://#{LifxDash::LifxHTTPApi::BASE_URI}/lights/#{selector}/toggle"
75
+ end
76
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ if ENV['COVERAGE']
4
+ require 'simplecov'
5
+ SimpleCov.start
6
+ SimpleCov.at_exit do
7
+ SimpleCov.result.format!
8
+ `open ./coverage/index.html` if RUBY_PLATFORM =~ /darwin/
9
+ end
10
+ end
11
+
12
+ require 'lifx_dash'
13
+ require 'minitest/autorun'
14
+ require 'webmock/minitest'
15
+
16
+ # set a quiet logger to /dev/null
17
+ LOGGER = Logger.new("/dev/null")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lifx_dash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Hutchinson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-23 00:00:00.000000000 Z
11
+ date: 2019-04-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gli
@@ -179,6 +179,9 @@ files:
179
179
  - bin/console
180
180
  - bin/lifx_dash
181
181
  - bin/setup
182
+ - features/lifx_dash.feature
183
+ - features/step_definitions/lifx_dash_steps.rb
184
+ - features/support/env.rb
182
185
  - lib/lifx_dash.rb
183
186
  - lib/lifx_dash/capturer.rb
184
187
  - lib/lifx_dash/configuration.rb
@@ -191,6 +194,8 @@ files:
191
194
  - man/lifx_dash.1
192
195
  - man/lifx_dash.1.html
193
196
  - man/lifx_dash.1.ronn
197
+ - test/lifx_dash/lifx_http_api_test.rb
198
+ - test/test_helper.rb
194
199
  homepage: http://github.com/matthutchinson/lifx_dash
195
200
  licenses:
196
201
  - MIT
@@ -213,7 +218,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
213
218
  requirements:
214
219
  - - ">="
215
220
  - !ruby/object:Gem::Version
216
- version: '2.1'
221
+ version: '2.3'
217
222
  required_rubygems_version: !ruby/object:Gem::Requirement
218
223
  requirements:
219
224
  - - ">="
@@ -224,9 +229,13 @@ requirements:
224
229
  - an Amazon Dash button
225
230
  - one or more LIFX bulbs
226
231
  - root access
227
- rubyforge_project:
228
- rubygems_version: 2.7.7
232
+ rubygems_version: 3.0.3
229
233
  signing_key:
230
234
  specification_version: 4
231
235
  summary: Toggle LIFX lights with an Amazon Dash button
232
- test_files: []
236
+ test_files:
237
+ - features/lifx_dash.feature
238
+ - features/step_definitions/lifx_dash_steps.rb
239
+ - features/support/env.rb
240
+ - test/lifx_dash/lifx_http_api_test.rb
241
+ - test/test_helper.rb