status-light 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []