status-light 0.0.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
+ SHA256:
3
+ metadata.gz: c794530c6fa3dc27791576c446590bda6ac20f796d67abe470d68e5aca77994a
4
+ data.tar.gz: bc10eb3551c999f874e6602fd7a348bd62d1ac0404bb656ba174542ef221be2d
5
+ SHA512:
6
+ metadata.gz: 3ee66ffa540e4b09d5e2ed26569520b4fb0db1c46af27e1294b4f62ee27b5c7c68469d10a42e95773c1591221a81f868be4edac5f2bd576470935809b1d86e9e
7
+ data.tar.gz: 507ba7b8b7721fdb707ae6bfb1a38f12c279b32296ba526059fdf9341efa055686875e84ae356e5de4a5965ed616c82efc2b292e05e428fd6d9f20c744440adc
data/.gitignore ADDED
@@ -0,0 +1,50 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /spec/examples.txt
9
+ /test/tmp/
10
+ /test/version_tmp/
11
+ /tmp/
12
+
13
+ # Used by dotenv library to load environment variables.
14
+ # .env
15
+
16
+ ## Specific to RubyMotion:
17
+ .dat*
18
+ .repl_history
19
+ build/
20
+ *.bridgesupport
21
+ build-iPhoneOS/
22
+ build-iPhoneSimulator/
23
+
24
+ ## Specific to RubyMotion (use of CocoaPods):
25
+ #
26
+ # We recommend against adding the Pods directory to your .gitignore. However
27
+ # you should judge for yourself, the pros and cons are mentioned at:
28
+ # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
29
+ #
30
+ # vendor/Pods/
31
+
32
+ ## Documentation cache and generated files:
33
+ /.yardoc/
34
+ /_yardoc/
35
+ /doc/
36
+ /rdoc/
37
+
38
+ ## Environment normalization:
39
+ /.bundle/
40
+ /vendor/bundle
41
+ /lib/bundler/man/
42
+
43
+ # for a library or gem, you might want to ignore these files since the code is
44
+ # intended to run in multiple environments; otherwise, check them in:
45
+ Gemfile.lock
46
+ .ruby-version
47
+ .ruby-gemset
48
+
49
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
50
+ .rvmrc
data/.rubocop.yml ADDED
@@ -0,0 +1,42 @@
1
+ require: rubocop-rspec
2
+
3
+ inherit_from: .rubocop_todo.yml
4
+
5
+ AllCops:
6
+ TargetRubyVersion: 2.4
7
+ Exclude:
8
+ - 'vendor/**/*'
9
+
10
+ Metrics/LineLength:
11
+ Max: 120
12
+
13
+ Metrics/ClassLength:
14
+ Exclude:
15
+ - 'spec/**/*'
16
+
17
+ Metrics/BlockLength:
18
+ Exclude:
19
+ - 'spec/**/*'
20
+ - '*.gemspec'
21
+
22
+ Documentation:
23
+ Enabled: false
24
+
25
+ Style/StringLiterals:
26
+ Description: Checks if uses of quotes match the configured preference.
27
+ StyleGuide: https://github.com/bbatsov/ruby-style-guide#consistent-string-literals
28
+ Enabled: true
29
+ EnforcedStyle: single_quotes
30
+ SupportedStyles:
31
+ - single_quotes
32
+ - double_quotes
33
+
34
+ RSpec/MultipleExpectations:
35
+ Enabled: false
36
+
37
+ RSpec/DescribeClass:
38
+ Exclude:
39
+ - 'spec/cli/**/*.rb'
40
+
41
+ RSpec/ExampleLength:
42
+ Max: 10
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,7 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2018-05-06 19:52:47 -0400 using RuboCop version 0.55.0.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2018 Corey Alexander
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # blink1-github-status
2
+
3
+ ## Crontab
4
+
5
+ Every five minutes
6
+ It runs everything through bash and sources the bash profile to get rbenv setup and everything.
7
+ Also manually includes the ENV var necessary for authentication.
8
+
9
+ ```bash
10
+ */5 * * * * bash -c "source ~/.bash_profile && cd ~/Projects/blink1-github-status && BLINK1_GITHUB_TOKEN=FAKE_TOKEN bundle exec ./exe/set_light.rb coreyja/glassy-collections master" &>/dev/null
11
+ ```
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>Label</key>
6
+ <string>com.coreyja.status.sample</string>
7
+ <key>ProgramArguments</key>
8
+ <array>
9
+ <string>~/Projects/status/exe/set_light.rb coreyja/status master</string>
10
+ </array>
11
+ <key>StartInterval</key>
12
+ <integer>1</integer>
13
+ <key>StandardErrorPath</key>
14
+ <string>/var/log/com.coreyja.status.sample/status.err</string>
15
+ <key>StandardOutPath</key>
16
+ <string>/var/log/com.coreyja.status.sample//status.out</string>
17
+ </dict>
18
+ </plist>
data/exe/set_light.rb ADDED
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'status'
5
+
6
+ if ENV.key? 'BLINK1_GITHUB_TOKEN'
7
+ Octokit.configure do |c|
8
+ c.access_token = ENV.fetch('BLINK1_GITHUB_TOKEN')
9
+ end
10
+ end
11
+
12
+ unless ARGV[0]
13
+ puts 'Repo is required as the first arg ex: someoneCool/theBestProject'
14
+ exit 1
15
+ end
16
+
17
+ unless ARGV[1]
18
+ puts 'Branch is required as the first arg ex: master'
19
+ exit 1
20
+ end
21
+
22
+ outputs = [Status::Outputs::Blink1.new, Status::Outputs::Logger.new, Status::Outputs::Lifx.new]
23
+
24
+ availible_outputs = outputs.select(&:available?)
25
+ exit 0 if availible_outputs.empty?
26
+
27
+ query = Status::GithubQuery.new(owner: ARGV[0].split('/')[0], name: ARGV[0].split('/')[1], branch: ARGV[1])
28
+
29
+ colors = Status::ColorGenerator.new(query.commits).colors
30
+ colors.each do |c|
31
+ availible_outputs.each { |output| output.output!(c) }
32
+ sleep 1
33
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Status
4
+ class Color
5
+ DEFINED_COLORS = {
6
+ red: [255, 0, 0],
7
+ green: [0, 255, 0],
8
+ yellow: [255, 255, 0],
9
+ purple: [255, 0, 255]
10
+ }.freeze
11
+
12
+ attr_accessor :r, :g, :b
13
+
14
+ def initialize(red:, green:, blue:)
15
+ self.r = red
16
+ self.g = green
17
+ self.b = blue
18
+ end
19
+
20
+ def self.from_rgb(rgb)
21
+ new red: rgb[0], green: rgb[1], blue: rgb[2]
22
+ end
23
+
24
+ DEFINED_COLORS.each do |name, rgb|
25
+ singleton_class.class_eval do
26
+ define_method name do
27
+ from_rgb rgb
28
+ end
29
+ end
30
+ end
31
+
32
+ def rgb
33
+ [r, g, b]
34
+ end
35
+
36
+ def named?
37
+ !name.nil?
38
+ end
39
+
40
+ def name
41
+ DEFINED_COLORS.invert[rgb]
42
+ end
43
+
44
+ def hex
45
+ "\##{rgb.map { |x| format('%02X', x) }.join}"
46
+ end
47
+
48
+ def dim_by(dim_factor)
49
+ multiplication_factor = 1.0 - dim_factor
50
+ self.r *= multiplication_factor
51
+ self.g *= multiplication_factor
52
+ self.b *= multiplication_factor
53
+ self
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Status
4
+ class ColorGenerator
5
+ def initialize(commits)
6
+ @commits = commits
7
+ end
8
+
9
+ def colors
10
+ Array color_or_colors
11
+ end
12
+
13
+ private
14
+
15
+ attr_reader :commits
16
+
17
+ def color_or_colors
18
+ if commits_with_status.empty?
19
+ Status::Color.purple
20
+ elsif most_recent_commit.waiting?
21
+ [Status::Color.yellow, most_recent_non_pending.color.dim_by(dim_factor)]
22
+ else
23
+ most_recent_commit.color
24
+ end
25
+ end
26
+
27
+ def dim_factor
28
+ [most_recent_commit.pending_since_dim_factor || 0.5, 0.85].min
29
+ end
30
+
31
+ def most_recent_commit
32
+ @most_recent_commit ||= commits_with_status.first
33
+ end
34
+
35
+ def most_recent_non_pending
36
+ @most_recent_non_pending ||= commits_with_status.find { |x| !x.waiting? }
37
+ end
38
+
39
+ def commits_with_status
40
+ @commits_with_status ||= commits.select(&:status?)
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Status
4
+ class Commit
5
+ STATES = %i[success pending failure error expected].freeze
6
+
7
+ def initialize(node)
8
+ @node = node
9
+ end
10
+
11
+ STATES.each do |state|
12
+ define_method "#{state}?" do
13
+ send(:state) == state
14
+ end
15
+ end
16
+
17
+ def bad?
18
+ failure? || error?
19
+ end
20
+
21
+ def good?
22
+ success?
23
+ end
24
+
25
+ def waiting?
26
+ pending? || expected?
27
+ end
28
+
29
+ def status?
30
+ !node.status.nil?
31
+ end
32
+
33
+ def state
34
+ node.status.state.downcase.to_sym
35
+ end
36
+
37
+ def color
38
+ if !status?
39
+ Color.purple
40
+ elsif good?
41
+ Color.green
42
+ elsif bad?
43
+ Color.red
44
+ elsif pending?
45
+ Color.yellow
46
+ end
47
+ end
48
+
49
+ def pending_since_dim_factor
50
+ pending_context_dim_factors.max
51
+ end
52
+
53
+ private
54
+
55
+ def pending_context_dim_factors
56
+ pending_contexts.map do |c|
57
+ minutes_ago = (Time.now - Time.parse(c.createdAt)) / 60.0
58
+ minutes_ago * 0.01
59
+ end
60
+ end
61
+
62
+ def pending_contexts
63
+ node.status.contexts.select { |s| s.state.to_sym == :PENDING }
64
+ end
65
+
66
+ attr_reader :node
67
+ end
68
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Status
4
+ class GithubQuery
5
+ def initialize(owner:, name:, branch:)
6
+ @owner = owner
7
+ @name = name
8
+ @branch = branch
9
+ end
10
+
11
+ def commits
12
+ history = response.data.repository.ref.target.history
13
+ _page_info = history[:page_info]
14
+ nodes = history[:nodes]
15
+ nodes.map { |node| Status::Commit.new(node) }
16
+ end
17
+
18
+ private
19
+
20
+ attr_reader :owner, :name, :branch
21
+
22
+ def response
23
+ Octokit.post 'graphql', { query: graphql_query, variables: graphql_variables }.to_json
24
+ end
25
+
26
+ def graphql_query
27
+ File.read(File.dirname(__FILE__) + '/../../queries/commit_statuses.graphql')
28
+ end
29
+
30
+ def graphql_variables
31
+ {
32
+ pageSize: 10,
33
+ owner: owner,
34
+ name: name,
35
+ branch: branch
36
+ }.to_json
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Status
4
+ module Outputs
5
+ class Blink1
6
+ def available?
7
+ ::Blink1.enumerate != 0
8
+ end
9
+
10
+ def output!(color)
11
+ blink1 = ::Blink1.new
12
+ blink1.open
13
+ blink1.set_rgb(*color.rgb)
14
+ blink1.close
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Status
4
+ module Outputs
5
+ class Lifx
6
+ def initialize(selector: 'all')
7
+ @selector = selector
8
+ end
9
+
10
+ def available?
11
+ ENV.key?('LIFX_TOKEN')
12
+ end
13
+
14
+ def output!(color)
15
+ light.set_state(color: color.hex)
16
+ end
17
+
18
+ private
19
+
20
+ attr_reader :selector
21
+
22
+ def light
23
+ LifxFaraday::Light.new selector: selector
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Status
4
+ module Outputs
5
+ class Logger
6
+ def available?
7
+ true
8
+ end
9
+
10
+ def output!(color)
11
+ puts "RGB: #{color.rgb}"
12
+ puts "Hex: #{color.hex}"
13
+ puts "Name: #{color.name}" if color.named?
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Status
4
+ VERSION = '0.0.0'
5
+ end
data/lib/status.rb ADDED
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'blink1'
4
+ require 'json'
5
+ require 'lifx-faraday'
6
+ require 'octokit'
7
+
8
+ require_relative 'status/color'
9
+ require_relative 'status/color_generator'
10
+ require_relative 'status/commit'
11
+ require_relative 'status/github_query'
12
+
13
+ require_relative 'status/outputs/blink1'
14
+ require_relative 'status/outputs/lifx'
15
+ require_relative 'status/outputs/logger'
@@ -0,0 +1,28 @@
1
+ query($owner: String!, $name: String!, $branch: String!, $pageSize: Int, $cursor: String){
2
+ repository(owner: $owner, name: $name) {
3
+ ref(qualifiedName: $branch) {
4
+ target {
5
+ ... on Commit {
6
+ history(first: $pageSize, after: $cursor) {
7
+ pageInfo {
8
+ hasNextPage
9
+ endCursor
10
+ }
11
+ nodes {
12
+ oid
13
+ status {
14
+ state
15
+ contexts {
16
+ state
17
+ context
18
+ createdAt
19
+ }
20
+ }
21
+ }
22
+ }
23
+ }
24
+ }
25
+ }
26
+ }
27
+ }
28
+
data/status.gemspec ADDED
@@ -0,0 +1,36 @@
1
+
2
+ # frozen_string_literal: true
3
+
4
+ lib = File.expand_path('lib', __dir__)
5
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
+ require 'status/version'
7
+
8
+ Gem::Specification.new do |spec|
9
+ spec.name = 'status-light'
10
+ spec.version = Status::VERSION
11
+ spec.authors = ['Corey Alexander']
12
+ spec.email = ['coreyja@gmail.com']
13
+
14
+ spec.summary = ''
15
+ spec.description = ''
16
+ spec.homepage = 'https://github.com/coreyja/blink1-github-status'
17
+ spec.license = 'MIT'
18
+
19
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
20
+ f.match(%r{^(test|spec|features)/})
21
+ end
22
+ spec.bindir = 'exe'
23
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
+ spec.require_paths = ['lib']
25
+
26
+ spec.add_dependency 'lifx-faraday', '~> 0.1'
27
+ spec.add_dependency 'octokit', '~> 4.0'
28
+ spec.add_dependency 'rb-blink1'
29
+
30
+ spec.add_development_dependency 'bundler', '~> 1.13'
31
+ spec.add_development_dependency 'pry', '~> 0.10'
32
+ spec.add_development_dependency 'rake', '~> 12.3'
33
+ spec.add_development_dependency 'rubocop', '~> 0.55.0'
34
+ spec.add_development_dependency 'rubocop-rspec', '~> 1.22'
35
+ spec.add_development_dependency 'webmock', '~> 3.4.0'
36
+ end
metadata ADDED
@@ -0,0 +1,189 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: status-light
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Corey Alexander
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-11-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: lifx-faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: octokit
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '4.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rb-blink1
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.13'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.13'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.10'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.10'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '12.3'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '12.3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.55.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.55.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop-rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.22'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.22'
125
+ - !ruby/object:Gem::Dependency
126
+ name: webmock
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 3.4.0
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 3.4.0
139
+ description: ''
140
+ email:
141
+ - coreyja@gmail.com
142
+ executables:
143
+ - set_light.rb
144
+ extensions: []
145
+ extra_rdoc_files: []
146
+ files:
147
+ - ".gitignore"
148
+ - ".rubocop.yml"
149
+ - ".rubocop_todo.yml"
150
+ - Gemfile
151
+ - LICENSE
152
+ - README.md
153
+ - com.coreyja.status.plist.sample
154
+ - exe/set_light.rb
155
+ - lib/status.rb
156
+ - lib/status/color.rb
157
+ - lib/status/color_generator.rb
158
+ - lib/status/commit.rb
159
+ - lib/status/github_query.rb
160
+ - lib/status/outputs/blink1.rb
161
+ - lib/status/outputs/lifx.rb
162
+ - lib/status/outputs/logger.rb
163
+ - lib/status/version.rb
164
+ - queries/commit_statuses.graphql
165
+ - status.gemspec
166
+ homepage: https://github.com/coreyja/blink1-github-status
167
+ licenses:
168
+ - MIT
169
+ metadata: {}
170
+ post_install_message:
171
+ rdoc_options: []
172
+ require_paths:
173
+ - lib
174
+ required_ruby_version: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ required_rubygems_version: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - ">="
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ requirements: []
185
+ rubygems_version: 3.0.3
186
+ signing_key:
187
+ specification_version: 4
188
+ summary: ''
189
+ test_files: []