test_driven_lighting 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: dc6f69380759dd4d59c80930267af0c18f178681
4
+ data.tar.gz: 79440ded3b44ec566717140e33ac5eee0590d0e5
5
+ SHA512:
6
+ metadata.gz: 9b13767c30cff3f54b54cfa26b350f471dc2ae73177b38d873426791cbd8b3ebf3c15a4809444e05d009dc689a11eed460afc2215657d5609e2c8cef2ec57814
7
+ data.tar.gz: c77372f8a5f07fd0970aad4dfc9ada857c9d4232a124b5253eb082893dcef04f1ece43a89d3f8049943da9b4f8774a1ab18087ee79a184e7af627ebd3334db34
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ .idea
2
+ .DS_store
3
+ config.rb
4
+ .rfg_project_name
5
+ coverage
data/.rubocop.yml ADDED
@@ -0,0 +1,54 @@
1
+ Style/StringLiterals:
2
+ Enabled: true
3
+ EnforcedStyle: single_quotes
4
+
5
+ Style/Documentation:
6
+ Enabled: true
7
+ Exclude:
8
+ - 'spec/**/*'
9
+ - 'test/**/*'
10
+
11
+ Metrics/ClassLength:
12
+ Enabled: true
13
+ Max: 100
14
+
15
+ Metrics/ModuleLength:
16
+ Enabled: true
17
+ Max: 100
18
+
19
+ Metrics/LineLength:
20
+ Enabled: true
21
+ Exclude:
22
+ - '*.gemspec'
23
+
24
+ # This is already the default in 0.51.0 but I want to state it explicitly
25
+ Metrics/ParameterLists:
26
+ Enabled: true
27
+ Max: 5
28
+
29
+ # Because Boards have forced indentation and I'm not using heredocs as
30
+ # documentation
31
+ # Layout/IndentHeredoc:
32
+ # Enabled: false
33
+
34
+
35
+ # I only ever use parallel assignment in constructors, but I ALWAYS use them in
36
+ # constructors. I wish I could change the cop to allow it only in constructors
37
+ # Style/ParallelAssignment:
38
+ # Enabled: false
39
+
40
+ # Because RuboCop is just plain WRONG about this, ESPECIALLY for multiline ifs
41
+ Style/NegatedIf:
42
+ Enabled: false
43
+
44
+ # Normally I favor requiring these but hey, this ain't CoffeeScript and half the
45
+ # hackathon team likes Seattle.rb style. Let's do it.
46
+ Style/MethodDefParentheses:
47
+ EnforcedStyle: require_no_parentheses
48
+
49
+
50
+ # I sort of agree and sort of don't with this one, but the important thing is
51
+ # emacs completely disagrees with it and there's certain things you just can't
52
+ # talk to emacs about without it getting all crazy
53
+ Layout/MultilineMethodCallIndentation:
54
+ Enabled: false
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,76 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ test_driven_lighting (1.0.2)
5
+ bunny (~> 2.7)
6
+ faraday (~> 0.12.2)
7
+ json (~> 2.1)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ amq-protocol (2.2.0)
13
+ ast (2.3.0)
14
+ bunny (2.7.2)
15
+ amq-protocol (>= 2.2.0)
16
+ byebug (9.0.6)
17
+ coderay (1.1.2)
18
+ diff-lcs (1.3)
19
+ docile (1.1.5)
20
+ faraday (0.12.2)
21
+ multipart-post (>= 1.2, < 3)
22
+ json (2.1.0)
23
+ method_source (0.9.0)
24
+ multipart-post (2.0.0)
25
+ parallel (1.12.0)
26
+ parser (2.4.0.2)
27
+ ast (~> 2.3)
28
+ powerpack (0.1.1)
29
+ pry (0.11.3)
30
+ coderay (~> 1.1.0)
31
+ method_source (~> 0.9.0)
32
+ rainbow (2.2.2)
33
+ rake
34
+ rake (12.3.0)
35
+ rspec (3.7.0)
36
+ rspec-core (~> 3.7.0)
37
+ rspec-expectations (~> 3.7.0)
38
+ rspec-mocks (~> 3.7.0)
39
+ rspec-core (3.7.0)
40
+ rspec-support (~> 3.7.0)
41
+ rspec-expectations (3.7.0)
42
+ diff-lcs (>= 1.2.0, < 2.0)
43
+ rspec-support (~> 3.7.0)
44
+ rspec-mocks (3.7.0)
45
+ diff-lcs (>= 1.2.0, < 2.0)
46
+ rspec-support (~> 3.7.0)
47
+ rspec-support (3.7.0)
48
+ rubocop (0.51.0)
49
+ parallel (~> 1.10)
50
+ parser (>= 2.3.3.1, < 3.0)
51
+ powerpack (~> 0.1)
52
+ rainbow (>= 2.2.2, < 3.0)
53
+ ruby-progressbar (~> 1.7)
54
+ unicode-display_width (~> 1.0, >= 1.0.1)
55
+ ruby-progressbar (1.9.0)
56
+ simplecov (0.15.1)
57
+ docile (~> 1.1.0)
58
+ json (>= 1.8, < 3)
59
+ simplecov-html (~> 0.10.0)
60
+ simplecov-html (0.10.2)
61
+ unicode-display_width (1.3.0)
62
+
63
+ PLATFORMS
64
+ ruby
65
+
66
+ DEPENDENCIES
67
+ byebug (~> 9.0)
68
+ pry (~> 0.11.3)
69
+ rake (~> 12.3)
70
+ rspec (~> 3.5)
71
+ rubocop (~> 0.51.0)
72
+ simplecov (~> 0.15.1)
73
+ test_driven_lighting!
74
+
75
+ BUNDLED WITH
76
+ 1.15.4
data/README.md ADDED
@@ -0,0 +1,60 @@
1
+ # Test Driven Lighting
2
+ hue bulb test driven lighting
3
+
4
+ Running Tests:
5
+
6
+ ```bash
7
+ bundle exec rspec spec -f LightingFormatter
8
+ #=> {'color':'green','type':'test'}`
9
+ ```
10
+
11
+ Include the gem
12
+ ```
13
+ gem 'test_driven_lighting'
14
+ ```
15
+
16
+ Example Receiver Code
17
+ ```
18
+ require 'test_driven_lighting'
19
+ include TestDrivenLighting
20
+
21
+ hue_config = { :hue_ip => '<your_hue_ip>',
22
+ :hue_api_id => '<your_hue_api_id>' }
23
+ bunny_config = { :bunny_username => '<bunny_username>',
24
+ :bunny_password =>'<bunny_password>',
25
+ :bunny_host => '<bunny_host>'}
26
+
27
+ hue = Hue.new(hue_config)
28
+ lamp = Lamp.new(1)
29
+ receiver = Receiver.new(bunny_config)
30
+
31
+ receiver.listen(`whoami`) do |payload|
32
+ puts "setting bulbs using #{payload}..."
33
+ case payload['status']
34
+ when 'fail'
35
+ lamp.color = 'red'
36
+ when 'pending'
37
+ lamp.color = 'yellow'
38
+ when 'pass'
39
+ lamp.color = 'green'
40
+ end
41
+ hue.change!(lamp)
42
+ end
43
+
44
+ ```
45
+
46
+ Example Sender Code
47
+ ```
48
+ require 'test_driven_lighting'
49
+ include TestDrivenLighting
50
+
51
+ bunny_config = { :bunny_username => '<bunny_username>',
52
+ :bunny_password =>'<bunny_password>',
53
+ :bunny_host => '<bunny_host>'}
54
+
55
+ sender = Sender.new(bunny_config)
56
+ sender.message_send("fail","test")
57
+ sender.message_send("pass","test")
58
+ sender.message_send("fail","suite")
59
+ sender.close_connection
60
+ ```
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+ # tdl-pairing-start - start listening for lighting messages, and change HUE
3
+ # lights when you or your pair run your specs
4
+ #
5
+ # Your config file should be at .test_driven_lighting.conf
6
+ #
7
+ # tdl-pairing-start
8
+
9
+ require 'yaml'
10
+ config = YAML::load_file File.expand_path('~/.test_driven_lighting.conf')
11
+
12
+ require 'test_driven_lighting'
13
+ include TestDrivenLighting
14
+
15
+ require 'pp'
16
+ puts '-' * 80
17
+ pp config
18
+ puts '-' * 80
19
+
20
+ hue_config = {
21
+ hue_ip: config[:hue_ip],
22
+ hue_api_id: config[:hue_api_id]
23
+ }
24
+
25
+ hue = Hue.new hue_config
26
+ lamp = Lamp.new config[:my_lamp_id]
27
+ receiver = Receiver.new config[:bunny]
28
+
29
+ receiver.listen(`whoami`) do |payload|
30
+ puts "Receiving message with #{payload}"
31
+
32
+ case payload['status']
33
+ when 'fail'
34
+ lamp.color = 'red'
35
+ when 'pending'
36
+ lamp.color = 'yellow'
37
+ when 'pass'
38
+ lamp.color = 'green'
39
+ end
40
+
41
+ hue.change! lamp
42
+ end
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+ # tdl-test-lights - do a test of the lighting
3
+ require 'yaml'
4
+ require 'test_driven_lighting'
5
+ include TestDrivenLighting
6
+
7
+ puts "Sending test messages to your lights..."
8
+ puts "Loading config..."
9
+ config = YAML::load_file(File.expand_path('~/.test_driven_lighting.conf'))
10
+ bunny_config = config[:bunny]
11
+
12
+ puts "Connecting to message queue..."
13
+ sender = Sender.new bunny_config
14
+
15
+ puts "Sending test failed message..."
16
+ sender.message_send "fail", "test"
17
+ sleep 0.5
18
+
19
+ puts "Sending test pending message..."
20
+ sender.message_send "pending", "test"
21
+ sleep 0.5
22
+
23
+ puts "Sending suite passed message..."
24
+ sender.message_send "pass", "suite"
25
+
26
+ puts "All done!"
@@ -0,0 +1,10 @@
1
+ # create a file called "~/.test_driven_lighting.conf"
2
+ # and add the following with your details
3
+ ---
4
+ :hue_ip: 192.168.1.2
5
+ :hue_api_id: your_api_key_key
6
+ :my_lamp_id: 1
7
+ :bunny:
8
+ :bunny_username: guest
9
+ :bunny_password: guest
10
+ :bunny_host: localhost:5672
@@ -0,0 +1,26 @@
1
+ require 'yaml'
2
+ config = YAML::load_file(File.expand_path('~/.test_driven_lighting.conf'))
3
+ require_relative '../lib/test_driven_lighting'
4
+ include TestDrivenLighting
5
+
6
+ hue_config = {
7
+ hue_ip: config[:hue_ip],
8
+ hue_api_id: config[:hue_api_id]
9
+ }
10
+
11
+ hue = Hue.new hue_config
12
+ lamp = Lamp.new config[:my_lamp_id]
13
+ receiver = Receiver.new config[:bunny]
14
+
15
+ receiver.listen(`whoami`) do |payload|
16
+ puts "Receiving message with #{payload}"
17
+
18
+ case payload['status']
19
+ when 'fail'
20
+ lamp.color = 'red'
21
+ when 'pass'
22
+ lamp.color = 'green'
23
+ end
24
+
25
+ hue.change! lamp
26
+ end
@@ -0,0 +1,52 @@
1
+ require 'rspec'
2
+ require_relative '../../config'
3
+ require_relative '../../lib/test_driven_lighting'
4
+
5
+ class LightingFormatter
6
+ RSpec::Core::Formatters.register self,
7
+ :example_passed,
8
+ :example_failed,
9
+ :example_pending,
10
+ :dump_summary,
11
+ :close
12
+
13
+ def initialize data
14
+ bunny_config = {
15
+ :bunny_username => BUNNY_USERNAME,
16
+ :bunny_password => BUNNY_PASSWORD,
17
+ :bunny_host => BUNNY_HOST
18
+ }
19
+
20
+ @sender = Sender.new bunny_config
21
+ end
22
+
23
+ def example_passed test_data
24
+ @sender.message_send 'pass','test'
25
+ end
26
+
27
+ def example_failed test_data
28
+ @sender.message_send 'fail','test'
29
+ end
30
+
31
+ def example_pending test_data
32
+ example_failed test_data
33
+ end
34
+
35
+ def dump_summary summary
36
+ if failed_or_pending? summary
37
+ @sender.message_send 'fail','suite'
38
+ else
39
+ @sender.message_send 'pass','suite'
40
+ end
41
+ end
42
+
43
+ def close param
44
+ @sender.close_connection
45
+ end
46
+
47
+ private
48
+
49
+ def failed_or_pending? summary
50
+ summary.failed_examples.any? || summary.pending_examples.any?
51
+ end
52
+ end
@@ -0,0 +1 @@
1
+ require 'rspec'
@@ -0,0 +1,14 @@
1
+ describe 'tests' do
2
+ it 'has a failing test' do
3
+ expect(true).to be false
4
+ end
5
+
6
+ it 'has a passing test' do
7
+ expect(true).to be true
8
+ end
9
+
10
+ it 'has a pending test' do
11
+ pending
12
+ end
13
+ end
14
+
@@ -0,0 +1,28 @@
1
+ colors:
2
+ red:
3
+ hue: 0
4
+ saturation: 254
5
+ orange:
6
+ hue: 5000
7
+ saturation: 254
8
+ yellow:
9
+ hue: 10000
10
+ saturation: 254
11
+ green:
12
+ hue: 25000
13
+ saturation: 254
14
+ teal:
15
+ hue: 35000
16
+ saturation: 254
17
+ blue:
18
+ hue: 44000
19
+ saturation: 254
20
+ purple:
21
+ hue: 49000
22
+ saturation: 254
23
+ mauve:
24
+ hue: 52000
25
+ saturation: 150
26
+ pink:
27
+ hue: 55000
28
+ saturation: 254
@@ -0,0 +1,29 @@
1
+ require 'json'
2
+ require 'faraday'
3
+
4
+ class Hue
5
+ attr_accessor :hue_ip, :hue_api_id
6
+
7
+ def initialize config
8
+ @hue_ip = config[:hue_ip]
9
+ @hue_api_id = config[:hue_api_id]
10
+ end
11
+
12
+ def change! lamp
13
+ data = {
14
+ :on => lamp.is_on,
15
+ :bri => lamp.brightness,
16
+ :sat => lamp.saturation,
17
+ :hue => lamp.hue,
18
+ :transitiontime => lamp.transition_time
19
+ }.to_json
20
+
21
+ connection = Faraday.new("http://#{@hue_ip}")
22
+
23
+ connection.put("/api/#{@hue_api_id}/lights/#{lamp.id}/state") do |request|
24
+ request.headers['Content-Type'] = 'application/json'
25
+ request.headers['Accept'] = 'application/json'
26
+ request.body = data
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,25 @@
1
+ require 'yaml'
2
+
3
+ class Lamp
4
+ attr_accessor :id,:hue,:saturation,:brightness,:is_on, :transition_time, :colors
5
+
6
+ DEFAULT_COLORS_FILE = "#{File.expand_path(File.dirname(__FILE__))}/data/default_colors.yml"
7
+ DEFAULT_COLORS = YAML.load_file(DEFAULT_COLORS_FILE)['colors']
8
+
9
+ def initialize(lamp_id)
10
+ @is_on = true
11
+ @id = lamp_id
12
+ @hue = 0
13
+ @saturation = 254
14
+ @brightness = 10
15
+ @transition_time = 0
16
+ @colors = DEFAULT_COLORS
17
+ end
18
+
19
+ def color= color
20
+ raise "unknown color of #{color}" if @colors[color].nil?
21
+
22
+ @hue = @colors[color]['hue']
23
+ @saturation = @colors[color]['saturation']
24
+ end
25
+ end
@@ -0,0 +1,22 @@
1
+ class MessageDispatcher
2
+ attr_reader :message_classes
3
+ def initialize
4
+ # message_classes contains "class_name" => ClassName
5
+ @message_classes = {}
6
+ end
7
+
8
+ def register_message_class(name, klass)
9
+ # screw trying to upcase and snake case and pretend to be rails WE'RE NOT
10
+ # RAILS SO STOP TRYING
11
+ message_classes[name] = klass
12
+ end
13
+
14
+ def dispatch(outgoing_message)
15
+ klass = class_for outgoing_message.fetch("message_type")
16
+ klass.new(outgoing_message).process
17
+ end
18
+
19
+ def class_for(class_name)
20
+ message_classes.fetch class_name
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ require_relative 'message'
2
+
3
+ # LogMessage - prints a message to the log (currently just whatever screen is
4
+ # running the listener)
5
+ class LogMessage < Message
6
+ def initialize message
7
+ super
8
+ end
9
+
10
+ def process
11
+ content = message.fetch 'content'
12
+ puts "%s %s" % [timestamp, content]
13
+ end
14
+
15
+ private
16
+
17
+ def timestamp
18
+ Time.new.strftime "%F %T"
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # Base Message class. Child classes should call super from #initialize and must
2
+ # implement #process.
3
+ class Message
4
+ # (Mostly) Common message attributes
5
+ attr_reader :message
6
+
7
+ # message: hash with string keys containing the message data.
8
+ # MUST contain at least "message_type" => "name_of_this_message" so we know
9
+ # which message class should handle it, though technically that's all handled
10
+ # by MessageDispatcher before we ever construct the message
11
+ def initialize message
12
+ @message = message
13
+ end
14
+
15
+ def message_type
16
+ message.fetch 'message_type'
17
+ end
18
+
19
+ # NOTE: Subclass is expected to implement #process
20
+ end
@@ -0,0 +1,19 @@
1
+ require 'bunny'
2
+ require 'json'
3
+
4
+ STDOUT.sync = true
5
+
6
+ class Receiver
7
+ def initialize(config)
8
+ @connection = Bunny.new("amqp://#{config[:bunny_username]}:#{config[:bunny_password]}@#{config[:bunny_host]}").start
9
+ @channel = @connection.create_channel
10
+ @exchange = @channel.fanout('lighting.messages')
11
+ end
12
+
13
+ def listen(queue_name, &block)
14
+ puts 'listening for light messages...'
15
+ @channel.queue(queue_name, :auto_delete => true).bind(@exchange).subscribe(:block => true) do |delivery_info, metadata, payload|
16
+ yield JSON.parse(payload)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ require 'json'
2
+ require 'bunny'
3
+
4
+ class Sender
5
+ def initialize config
6
+ @connection = Bunny.new("amqp://#{config[:bunny_username]}:#{config[:bunny_password]}@#{config[:bunny_host]}").start
7
+ @channel = @connection.create_channel
8
+ @exchange = @channel.fanout('lighting.messages')
9
+ end
10
+
11
+ def message_send status, type
12
+ message = Hash status: status, type: type
13
+ @exchange.publish message.to_json
14
+ end
15
+
16
+ def close_connection
17
+ @connection.close
18
+ end
19
+ end
@@ -0,0 +1,3 @@
1
+ module TestDrivenLighting
2
+ VERSION = '1.1.0'
3
+ end
@@ -0,0 +1,8 @@
1
+ module TestDrivenLighting
2
+ require_relative 'test_driven_lighting/hue'
3
+ require_relative 'test_driven_lighting/lamp'
4
+ require_relative 'test_driven_lighting/sender'
5
+ require_relative 'test_driven_lighting/receiver'
6
+ require_relative 'test_driven_lighting/message_dispatcher'
7
+ require_relative 'test_driven_lighting/messages/log_message'
8
+ end
@@ -0,0 +1,30 @@
1
+ require_relative 'lib/test_driven_lighting/version.rb'
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = 'test_driven_lighting'
8
+ s.version = TestDrivenLighting::VERSION
9
+ s.license = 'MIT'
10
+ s.summary = 'test driven lighting for hue bulbs'
11
+ s.description = 'provides sender and receiver classes for entities that want to change the bulbs, and the entities that have bulbs to change'
12
+ s.authors = ['Ashton Freidenberger','Brian Lees','Dave Brady','Daniel DeStefano']
13
+ s.email = 'afreidenberger@covermymeds.com'
14
+ s.homepage = 'http://www.covermymeds.com'
15
+ s.require_paths = ["lib"]
16
+ s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ s.bindir = "bin"
18
+ s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+
20
+ s.add_dependency 'bunny', '~> 2.7'
21
+ s.add_dependency 'faraday', '~> 0.12.2'
22
+ s.add_dependency 'json', '~> 2.1'
23
+
24
+ s.add_development_dependency 'byebug', '~> 9.0'
25
+ s.add_development_dependency 'pry', '~> 0.11.3'
26
+ s.add_development_dependency 'rake', '~> 12.3'
27
+ s.add_development_dependency 'rspec', '~> 3.5'
28
+ s.add_development_dependency 'rubocop', '~> 0.51.0'
29
+ s.add_development_dependency 'simplecov', '~> 0.15.1'
30
+ end
metadata ADDED
@@ -0,0 +1,199 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: test_driven_lighting
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Ashton Freidenberger
8
+ - Brian Lees
9
+ - Dave Brady
10
+ - Daniel DeStefano
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2017-12-07 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: bunny
18
+ requirement: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - "~>"
21
+ - !ruby/object:Gem::Version
22
+ version: '2.7'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '2.7'
30
+ - !ruby/object:Gem::Dependency
31
+ name: faraday
32
+ requirement: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - "~>"
35
+ - !ruby/object:Gem::Version
36
+ version: 0.12.2
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: 0.12.2
44
+ - !ruby/object:Gem::Dependency
45
+ name: json
46
+ requirement: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - "~>"
49
+ - !ruby/object:Gem::Version
50
+ version: '2.1'
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - "~>"
56
+ - !ruby/object:Gem::Version
57
+ version: '2.1'
58
+ - !ruby/object:Gem::Dependency
59
+ name: byebug
60
+ requirement: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - "~>"
63
+ - !ruby/object:Gem::Version
64
+ version: '9.0'
65
+ type: :development
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '9.0'
72
+ - !ruby/object:Gem::Dependency
73
+ name: pry
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - "~>"
77
+ - !ruby/object:Gem::Version
78
+ version: 0.11.3
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - "~>"
84
+ - !ruby/object:Gem::Version
85
+ version: 0.11.3
86
+ - !ruby/object:Gem::Dependency
87
+ name: rake
88
+ requirement: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - "~>"
91
+ - !ruby/object:Gem::Version
92
+ version: '12.3'
93
+ type: :development
94
+ prerelease: false
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '12.3'
100
+ - !ruby/object:Gem::Dependency
101
+ name: rspec
102
+ requirement: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - "~>"
105
+ - !ruby/object:Gem::Version
106
+ version: '3.5'
107
+ type: :development
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - "~>"
112
+ - !ruby/object:Gem::Version
113
+ version: '3.5'
114
+ - !ruby/object:Gem::Dependency
115
+ name: rubocop
116
+ requirement: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - "~>"
119
+ - !ruby/object:Gem::Version
120
+ version: 0.51.0
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - "~>"
126
+ - !ruby/object:Gem::Version
127
+ version: 0.51.0
128
+ - !ruby/object:Gem::Dependency
129
+ name: simplecov
130
+ requirement: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - "~>"
133
+ - !ruby/object:Gem::Version
134
+ version: 0.15.1
135
+ type: :development
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - "~>"
140
+ - !ruby/object:Gem::Version
141
+ version: 0.15.1
142
+ description: provides sender and receiver classes for entities that want to change
143
+ the bulbs, and the entities that have bulbs to change
144
+ email: afreidenberger@covermymeds.com
145
+ executables:
146
+ - tdl-pairing-start
147
+ - tdl-test-lighting
148
+ extensions: []
149
+ extra_rdoc_files: []
150
+ files:
151
+ - ".gitignore"
152
+ - ".rubocop.yml"
153
+ - Gemfile
154
+ - Gemfile.lock
155
+ - README.md
156
+ - bin/tdl-pairing-start
157
+ - bin/tdl-test-lighting
158
+ - examples/example_config.yml
159
+ - examples/lighting_client.rb
160
+ - examples/spec/lighting_formatter.rb
161
+ - examples/spec/spec_helper.rb
162
+ - examples/spec/tests_spec.rb
163
+ - lib/test_driven_lighting.rb
164
+ - lib/test_driven_lighting/data/default_colors.yml
165
+ - lib/test_driven_lighting/hue.rb
166
+ - lib/test_driven_lighting/lamp.rb
167
+ - lib/test_driven_lighting/message_dispatcher.rb
168
+ - lib/test_driven_lighting/messages/log_message.rb
169
+ - lib/test_driven_lighting/messages/message.rb
170
+ - lib/test_driven_lighting/receiver.rb
171
+ - lib/test_driven_lighting/sender.rb
172
+ - lib/test_driven_lighting/version.rb
173
+ - test_driven_lighting.gemspec
174
+ homepage: http://www.covermymeds.com
175
+ licenses:
176
+ - MIT
177
+ metadata: {}
178
+ post_install_message:
179
+ rdoc_options: []
180
+ require_paths:
181
+ - lib
182
+ required_ruby_version: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ version: '0'
187
+ required_rubygems_version: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
192
+ requirements: []
193
+ rubyforge_project:
194
+ rubygems_version: 2.6.13
195
+ signing_key:
196
+ specification_version: 4
197
+ summary: test driven lighting for hue bulbs
198
+ test_files: []
199
+ has_rdoc: