wassup 0.2.0 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/Gemfile.lock +19 -1
  4. data/README.md +11 -11
  5. data/bin/wassup +6 -1
  6. data/docs/.gitignore +20 -0
  7. data/docs/README.md +41 -0
  8. data/docs/babel.config.js +3 -0
  9. data/docs/blog/2021-12-09-welcome/index.md +8 -0
  10. data/docs/blog/authors.yml +5 -0
  11. data/docs/docs/Supfile-basics/_category_.json +4 -0
  12. data/docs/docs/Supfile-basics/understanding-the-supfile.md +50 -0
  13. data/docs/docs/intro.md +54 -0
  14. data/docs/docusaurus.config.js +110 -0
  15. data/docs/package-lock.json +21196 -0
  16. data/docs/package.json +43 -0
  17. data/docs/sidebars.js +31 -0
  18. data/docs/src/components/HomepageFeatures.module.css +10 -0
  19. data/docs/src/components/HomepageFeatures.tsx +60 -0
  20. data/docs/src/css/custom.css +28 -0
  21. data/docs/src/pages/index.module.css +36 -0
  22. data/docs/src/pages/index.tsx +39 -0
  23. data/docs/src/pages/markdown-page.md +7 -0
  24. data/docs/static/.nojekyll +0 -0
  25. data/docs/static/img/demo-supfile.png +0 -0
  26. data/docs/static/img/favicon.ico +0 -0
  27. data/docs/static/img/logo.svg +27 -0
  28. data/docs/static/img/tutorial/docsVersionDropdown.png +0 -0
  29. data/docs/static/img/tutorial/localeDropdown.png +0 -0
  30. data/docs/static/img/tutorial-intro-starter-screenshot.png +0 -0
  31. data/docs/static/img/undraw_docusaurus_mountain.svg +170 -0
  32. data/docs/static/img/undraw_docusaurus_react.svg +169 -0
  33. data/docs/static/img/undraw_docusaurus_tree.svg +1 -0
  34. data/docs/static/img/wassup-long.png +0 -0
  35. data/docs/static/img/wassup-screenshot.png +0 -0
  36. data/docs/static/img/wassup.png +0 -0
  37. data/docs/static/video/wassup-demo.mov +0 -0
  38. data/docs/tsconfig.json +7 -0
  39. data/examples/basic/Supfile +183 -16
  40. data/examples/debug/Supfile +18 -0
  41. data/examples/josh-fastlane/Supfile +37 -94
  42. data/examples/simple/Supfile +17 -0
  43. data/examples/starter/Supfile +44 -0
  44. data/lib/wassup/app.rb +166 -6
  45. data/lib/wassup/color.rb +5 -0
  46. data/lib/wassup/helpers/circleci.rb +75 -0
  47. data/lib/wassup/helpers/github.rb +137 -0
  48. data/lib/wassup/helpers/netlify.rb +70 -0
  49. data/lib/wassup/helpers/shortcut.rb +114 -0
  50. data/lib/wassup/pane.rb +85 -16
  51. data/lib/wassup/pane_builder.rb +14 -1
  52. data/lib/wassup/version.rb +1 -1
  53. data/lib/wassup.rb +5 -0
  54. data/wassup.gemspec +1 -0
  55. metadata +59 -6
@@ -0,0 +1,137 @@
1
+ module Wassup
2
+ module Helpers
3
+ module GitHub
4
+ require 'json'
5
+ require 'rest-client'
6
+
7
+ # https://docs.github.com/en/search-github/searching-on-github/searching-issues-and-pull-requests
8
+ def self.issues(org:, repo:nil, q: nil)
9
+ q_parts = []
10
+
11
+ if repo.nil?
12
+ q_parts << "org:#{org}"
13
+ else
14
+ q_parts << "repo:#{org}/#{repo}"
15
+ end
16
+
17
+ if q
18
+ q_parts << q
19
+ end
20
+
21
+ q = q_parts.join(' ')
22
+
23
+ items = []
24
+
25
+ resp = RestClient::Request.execute(
26
+ method: :get,
27
+ url: "https://api.github.com/search/issues?q=#{q}",
28
+ user: ENV["WASSUP_GITHUB_USERNAME"],
29
+ password: ENV["WASSUP_GITHUB_ACCESS_TOKEN"],
30
+ headers: { "Accept": "application/vnd.github.v3+json", "Content-Type": "application/json" },
31
+ )
32
+ partial_items = JSON.parse(resp)["items"]
33
+ items += partial_items
34
+
35
+ return items
36
+ end
37
+
38
+ def self.repos(org:)
39
+ resp = RestClient::Request.execute(
40
+ method: :get,
41
+ url: "https://api.github.com/orgs/#{org}/repos",
42
+ user: ENV["WASSUP_GITHUB_USERNAME"],
43
+ password: ENV["WASSUP_GITHUB_ACCESS_TOKEN"]
44
+ )
45
+ return JSON.parse(resp)
46
+ end
47
+
48
+ Repo = Struct.new(:org, :repo)
49
+ def self.pull_requests(org:, repo: nil)
50
+ repos = []
51
+ if repo.nil?
52
+ repos += self.repos(org: org).map do |repo|
53
+ Repo.new(org, repo["name"])
54
+ end
55
+ else
56
+ repos << Repo.new(org, repo)
57
+ end
58
+
59
+ return repos.map do |repo|
60
+ resp = RestClient::Request.execute(
61
+ method: :get,
62
+ url: "https://api.github.com/repos/#{repo.org}/#{repo.repo}/pulls?per_page=100",
63
+ user: ENV["WASSUP_GITHUB_USERNAME"],
64
+ password: ENV["WASSUP_GITHUB_ACCESS_TOKEN"]
65
+ )
66
+
67
+ JSON.parse(resp)
68
+ end.flatten(1)
69
+ end
70
+
71
+ def self.releases(org:, repo:)
72
+ resp = RestClient::Request.execute(
73
+ method: :get,
74
+ url: "https://api.github.com/repos/#{org}/#{repo}/releases",
75
+ user: ENV["WASSUP_GITHUB_USERNAME"],
76
+ password: ENV["WASSUP_GITHUB_ACCESS_TOKEN"]
77
+ )
78
+
79
+ return JSON.parse(resp)
80
+ end
81
+ end
82
+ end
83
+ end
84
+
85
+ module Wassup
86
+ module Helpers
87
+ module GitHub
88
+ module Formatter
89
+ def self.issue(issue, show_repo: false, show_interactions: false)
90
+ self.pr(issue, show_repo: show_repo, show_interactions: show_interactions)
91
+ end
92
+
93
+ def self.pr(pr, show_repo: false, show_interactions: false)
94
+ number = pr["number"]
95
+ title = pr["title"]
96
+ created_at = pr["created_at"]
97
+
98
+ repo_name = ""
99
+ if show_repo
100
+ repo_url_parts = pr["repository_url"].split("/")
101
+ repo_name = "[fg=gray]#{repo_url_parts.last} "
102
+ end
103
+
104
+ interactions = ""
105
+ if show_interactions
106
+ interaction_count = pr["comments"] + pr["reactions"]["total_count"]
107
+ interactions = "[fg=red]#{interaction_count} "
108
+ end
109
+
110
+ number_formatted = '%-7.7s' % "##{number}"
111
+
112
+ date = Time.parse(created_at)
113
+ days = (Time.now - date).to_i / (24 * 60 * 60)
114
+ days_formatted = '%3.3s' % days.to_s
115
+
116
+ display = "[fg=yellow]#{number_formatted}[fg=cyan] #{days_formatted}d ago #{interactions}#{repo_name}[fg=white]#{title}"
117
+
118
+ return display
119
+ end
120
+
121
+ def self.release(release)
122
+ tag_name = release["tag_name"]
123
+ name = release["name"]
124
+ published_at = release["published_at"]
125
+
126
+ date = Time.parse(published_at)
127
+ days = (Time.now - date).to_i / (24 * 60 * 60)
128
+ days_formatted = '%3.3s' % days.to_s
129
+
130
+ display = "[fg=yellow]#{tag_name} [fg=cyan]#{days_formatted}d ago [fg=gray]#{name}"
131
+
132
+ return display
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
@@ -0,0 +1,70 @@
1
+ module Wassup
2
+ module Helpers
3
+ module Netlify
4
+ require 'json'
5
+ require 'rest-client'
6
+
7
+ def self.deploys(site_id:)
8
+ resp = RestClient::Request.execute(
9
+ method: :get,
10
+ url: "https://api.netlify.com/api/v1/sites/#{site_id}/deploys",
11
+ headers: { "Authorization": "Bearer #{ENV['WASSUP_NETLIFY_TOKEN']}", "User-Agent": "Wassup" }
12
+ )
13
+ return JSON.parse(resp)
14
+ end
15
+
16
+ end
17
+ end
18
+ end
19
+
20
+ module Wassup
21
+ module Helpers
22
+ module Netlify
23
+ module Formatter
24
+ def self.deploy(deploy)
25
+ review_id = deploy["review_id"]
26
+ context = deploy["context"]
27
+ state = deploy["state"]
28
+ error_message = deploy["error_message"]
29
+ branch = deploy["branch"]
30
+ commit_ref = deploy["commit_ref"] || "HEAD"
31
+ url = deploy["deploy_url"]
32
+
33
+ if error_message.to_s.downcase.include?("canceled")
34
+ state = "cancelled"
35
+ end
36
+
37
+ color = "green"
38
+ if state == "building"
39
+ color = "yellow"
40
+ elsif state == "enqueued"
41
+ color = "magenta"
42
+ elsif state == "cancelled"
43
+ color = "gray"
44
+ elsif state == "error"
45
+ color = "red"
46
+ end
47
+
48
+ display_context = context.split('-').map(&:capitalize).join(' ')
49
+ display_context = "[fg=#{color}]#{display_context}"
50
+
51
+ if !review_id.nil?
52
+ display_context += " - ##{review_id}"
53
+ end
54
+
55
+ display_context += "[fg=gray]"
56
+ display_context += " (#{state})"
57
+ display_context += "[fg=white]"
58
+
59
+ if !branch.nil? && !commit_ref.nil?
60
+ display_context += "[fg=cyan]: #{branch}@#{commit_ref[0...7]}"
61
+ end
62
+
63
+ display = "#{display_context}"
64
+
65
+ return display
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,114 @@
1
+ module Wassup
2
+ module Helpers
3
+ module Shortcut
4
+ require 'json'
5
+ require 'rest-client'
6
+
7
+ def self.members
8
+ endpoint = "https://api.app.shortcut.com"
9
+ resp = RestClient::Request.execute(
10
+ method: :get,
11
+ url: "#{endpoint}/api/v3/members",
12
+ headers: { "Shortcut-Token": ENV['WASSUP_SHORTCUT_TOKEN'], "Content-Type": "application/json" }
13
+ )
14
+ return JSON.parse(resp)
15
+ end
16
+
17
+ def self.workflows
18
+ endpoint = "https://api.app.shortcut.com"
19
+ resp = RestClient::Request.execute(
20
+ method: :get,
21
+ url: "#{endpoint}/api/v3/workflows",
22
+ headers: { "Shortcut-Token": ENV['WASSUP_SHORTCUT_TOKEN'], "Content-Type": "application/json" }
23
+ )
24
+ return JSON.parse(resp)
25
+ end
26
+
27
+ def self.search_stories(query:, page_size: 25)
28
+ endpoint = "https://api.app.shortcut.com"
29
+
30
+ members = self.members
31
+ workflows = self.workflows
32
+
33
+ stories = []
34
+
35
+ resp = RestClient::Request.execute(
36
+ method: :get,
37
+ url: "#{endpoint}/api/v3/search/stories",
38
+ payload: { page_size: page_size, query: query },
39
+ headers: { "Shortcut-Token": ENV['WASSUP_SHORTCUT_TOKEN'], "Content-Type": "application/json" }
40
+ )
41
+ json = JSON.parse(resp)
42
+ stories += json["data"]
43
+
44
+ next_url = json["next"]
45
+ while !next_url.nil?
46
+ resp = RestClient::Request.execute(
47
+ method: :get,
48
+ url: "#{endpoint}#{next_url}",
49
+ headers: { "Shortcut-Token": ENV['WASSUP_SHORTCUT_TOKEN'], "Content-Type": "application/json" }
50
+ )
51
+ json = JSON.parse(resp)
52
+ stories += json["data"]
53
+ next_url = json["next"]
54
+ end
55
+
56
+ stories = stories.map do |story|
57
+ story["followers"] = story["follower_ids"].map do |owner_id|
58
+ members.find do |member|
59
+ member["id"] == owner_id
60
+ end
61
+ end
62
+
63
+ story["owners"] = story["owner_ids"].map do |owner_id|
64
+ members.find do |member|
65
+ member["id"] == owner_id
66
+ end
67
+ end
68
+
69
+ if (workflow_id = story["workflow_id"]) && (workflow_state_id = story["workflow_state_id"])
70
+ workflow = workflows.find do |workflow|
71
+ workflow["id"] == workflow_id
72
+ end
73
+
74
+ story["workflow"] = workflow
75
+ if workflow
76
+ story["workflow_state"] = workflow["states"].find do |workflow_state|
77
+ workflow_state["id"] == workflow_state_id
78
+ end
79
+ end
80
+ end
81
+
82
+ story
83
+ end
84
+
85
+ return stories
86
+ end
87
+
88
+ end
89
+ end
90
+ end
91
+
92
+ module Wassup
93
+ module Helpers
94
+ module Shortcut
95
+ module Formatter
96
+ def self.story(story)
97
+ id = story["id"]
98
+ name = story["name"]
99
+ state = story["workflow_state"]["name"]
100
+
101
+ mention_name = (story["owners"] || {}).map do |member|
102
+ member["profile"]["mention_name"]
103
+ end.join(", ")
104
+
105
+ id_formatted = '%-7.7s' % "##{id}"
106
+
107
+ display = "[fg=yellow]#{id_formatted} [fg=cyan]#{state} [fg=white]#{mention_name} [fg=gray]#{name}"
108
+
109
+ return display
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
data/lib/wassup/pane.rb CHANGED
@@ -11,6 +11,7 @@ module Wassup
11
11
  attr_accessor :contents
12
12
 
13
13
  attr_accessor :title
14
+ attr_accessor :description
14
15
 
15
16
  attr_accessor :focused
16
17
  attr_accessor :focus_number
@@ -28,6 +29,9 @@ module Wassup
28
29
  attr_accessor :last_refreshed
29
30
  attr_accessor :content_block
30
31
  attr_accessor :selection_blocks
32
+ attr_accessor :selection_blocks_description
33
+
34
+ attr_accessor :caught_error
31
35
 
32
36
  attr_accessor :content_thread
33
37
  attr_accessor :show_refresh
@@ -60,14 +64,17 @@ module Wassup
60
64
  end
61
65
  end
62
66
 
63
- def initialize(height, width, top, left, title: nil, highlight: true, focus_number: nil, interval:, show_refresh:, content_block:, selection_blocks:)
64
- self.win_height = Curses.lines * height
65
- self.win_width = Curses.cols * width
66
- self.win_top = Curses.lines * top
67
- self.win_left = Curses.cols * left
67
+ def initialize(height, width, top, left, title: nil, description: nil, highlight: true, focus_number: nil, interval:, show_refresh:, content_block:, selection_blocks:, selection_blocks_description:, debug: false)
68
68
 
69
- self.win = Curses::Window.new(self.win_height, self.win_width, self.win_top, self.win_left)
70
- self.setup_subwin()
69
+ if !debug
70
+ self.win_height = Curses.lines * height
71
+ self.win_width = Curses.cols * width
72
+ self.win_top = Curses.lines * top
73
+ self.win_left = Curses.cols * left
74
+
75
+ self.win = Curses::Window.new(self.win_height, self.win_width, self.win_top, self.win_left)
76
+ self.setup_subwin()
77
+ end
71
78
 
72
79
  self.focused = false
73
80
  self.focus_number = focus_number
@@ -82,14 +89,18 @@ module Wassup
82
89
 
83
90
  self.selected_view_index = 0
84
91
 
85
- self.win.refresh
86
- self.subwin.refresh
92
+ if !debug
93
+ self.win.refresh
94
+ self.subwin.refresh
95
+ end
87
96
 
88
97
  self.title = title
98
+ self.description = description
89
99
 
90
100
  self.interval = interval
91
101
  self.content_block = content_block
92
102
  self.selection_blocks = selection_blocks || {}
103
+ self.selection_blocks_description = selection_blocks_description || {}
93
104
  end
94
105
 
95
106
  def setup_subwin
@@ -130,6 +141,16 @@ module Wassup
130
141
  self.subwin.scrollok(true)
131
142
  end
132
143
 
144
+ def close
145
+ unless self.subwin.nil?
146
+ self.subwin.clear
147
+ self.subwin.close
148
+ end
149
+
150
+ self.win.clear
151
+ self.win.close
152
+ end
153
+
133
154
  def needs_refresh?
134
155
  return false if self.content_block.nil?
135
156
  return false if self.interval.nil?
@@ -159,12 +180,20 @@ module Wassup
159
180
  return !self.content_thread.nil?
160
181
  end
161
182
 
183
+ def redraw
184
+ self.update_box
185
+ self.update_title
186
+ self.load_current_view()
187
+ end
188
+
162
189
  def refresh(force: false)
163
190
  if force
164
191
  self.last_refreshed = nil
165
192
  end
166
193
 
167
- return if !needs_refresh?
194
+ if !needs_refresh?
195
+ return
196
+ end
168
197
 
169
198
  thread = self.content_thread
170
199
  if !thread.nil?
@@ -176,15 +205,27 @@ module Wassup
176
205
  elsif thread.status == false
177
206
  rtn = thread.value
178
207
  if rtn.is_a?(Ope)
179
- content = Wassup::Pane::Content.new
180
-
208
+ self.caught_error = rtn.error
209
+ content = Wassup::Pane::Content.new("Overview")
181
210
  content.add_row("[fg=red]Error during refersh[fg=white]")
182
211
  content.add_row("[fg=red]at #{Time.now}[fg=while]")
183
212
  content.add_row("")
184
213
  content.add_row("[fg=yellow]Will try again next interval[fg=white]")
185
214
 
186
- self.refresh_content([content])
215
+ content_directions = Wassup::Pane::Content.new("Directions")
216
+ content_directions.add_row("1. Press 'c' to copy the stacktrace")
217
+ content_directions.add_row("2. Debug pane content block with:")
218
+ content_directions.add_row(" $: wassup --debug")
219
+ content_directions.add_row("3. Stacktrace viewable in next page")
220
+
221
+ content_stacktrace = Wassup::Pane::Content.new("Stacktrace")
222
+ rtn.error.backtrace.each do |line|
223
+ content_stacktrace.add_row(line)
224
+ end
225
+
226
+ self.refresh_content([content, content_directions, content_stacktrace])
187
227
  elsif rtn.is_a?(Wassup::PaneBuilder::ContentBuilder)
228
+ self.caught_error = nil
188
229
  self.refresh_content(rtn.contents)
189
230
  end
190
231
 
@@ -213,7 +254,8 @@ module Wassup
213
254
  end
214
255
 
215
256
  def refresh_content(contents)
216
- self.contents = contents
257
+ self.contents = contents
258
+
217
259
  self.load_current_view()
218
260
  self.last_refreshed = Time.now
219
261
 
@@ -234,6 +276,13 @@ module Wassup
234
276
  self.update_title()
235
277
  end
236
278
 
279
+ def highlight
280
+ if self.caught_error
281
+ return true
282
+ end
283
+ return @highlight
284
+ end
285
+
237
286
  attr_accessor :refresh_char_count
238
287
  def refresh_char
239
288
  return "" unless self.show_refresh
@@ -276,7 +325,12 @@ module Wassup
276
325
  return unless self.should_box
277
326
 
278
327
  title = self.title || "<No Title>"
279
- full_title = "#{self.focus_number} - #{title}"
328
+
329
+ if self.focus_number.nil?
330
+ full_title = title
331
+ else
332
+ full_title = "#{self.focus_number} - #{title}"
333
+ end
280
334
 
281
335
  self.win.setpos(0, 3)
282
336
  self.win.addstr(full_title)
@@ -293,7 +347,13 @@ module Wassup
293
347
  def update_box
294
348
  return unless self.should_box
295
349
 
296
- self.win.attrset(self.focused ? Curses.color_pair(Wassup::Color::Pair::BORDER_FOCUS) : Curses.color_pair(Wassup::Color::Pair::BORDER))
350
+ show_focused = self.focused
351
+
352
+ if self.focus_number.nil?
353
+ show_focused = true
354
+ end
355
+
356
+ self.win.attrset(show_focused ? Curses.color_pair(Wassup::Color::Pair::BORDER_FOCUS) : Curses.color_pair(Wassup::Color::Pair::BORDER))
297
357
  self.win.box()
298
358
  self.win.attrset(Curses.color_pair(Wassup::Color::Pair::NORMAL))
299
359
 
@@ -501,6 +561,15 @@ module Wassup
501
561
  self.scroll_right
502
562
  elsif input == "r"
503
563
  self.refresh(force: true)
564
+ elsif input == "c"
565
+ if !self.caught_error.nil?
566
+ text = self.caught_error.backtrace.join("\n")
567
+ if RUBY_PLATFORM.downcase =~ /win32/
568
+ IO.popen('clip', 'w') { |pipe| pipe.puts text }
569
+ else
570
+ IO.popen('pbcopy', 'w') { |pipe| pipe.puts text }
571
+ end
572
+ end
504
573
  else
505
574
  selection_block = self.selection_blocks[input]
506
575
  if !selection_block.nil? && !self.highlighted_line.nil?
@@ -9,12 +9,14 @@ module Wassup
9
9
  attr_accessor :highlight
10
10
 
11
11
  attr_accessor :title
12
+ attr_accessor :description
12
13
 
13
14
  attr_accessor :show_refresh
14
15
 
15
16
  attr_accessor :interval
16
17
  attr_accessor :content_block
17
18
  attr_accessor :selection_blocks
19
+ attr_accessor :selection_blocks_description
18
20
 
19
21
  class ContentBuilder
20
22
  attr_accessor :contents
@@ -70,13 +72,24 @@ module Wassup
70
72
  @interval = 60 * 5
71
73
 
72
74
  @selection_blocks = {}
75
+ @selection_blocks_description = {}
73
76
  end
74
77
 
75
78
  def content(&block)
76
79
  self.content_block = block
77
80
  end
78
- def selection(input=10, &block)
81
+ def selection(input=10, description=nil, &block)
82
+ if input.to_s.downcase == "enter"
83
+ input = 10
84
+ end
85
+
86
+ description_input = input
87
+ if input.to_s == "10"
88
+ description_input = "enter"
89
+ end
90
+
79
91
  self.selection_blocks[input] = block
92
+ self.selection_blocks_description[description_input] = description
80
93
  end
81
94
  end
82
95
  end
@@ -1,3 +1,3 @@
1
1
  module Wassup
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.2"
3
3
  end
data/lib/wassup.rb CHANGED
@@ -4,6 +4,11 @@ require "wassup/color"
4
4
  require "wassup/pane"
5
5
  require "wassup/pane_builder"
6
6
 
7
+ require "wassup/helpers/circleci"
8
+ require "wassup/helpers/github"
9
+ require "wassup/helpers/netlify"
10
+ require "wassup/helpers/shortcut"
11
+
7
12
  module Wassup
8
13
  class Error < StandardError; end
9
14
  # Your code goes here...
data/wassup.gemspec CHANGED
@@ -16,6 +16,7 @@ Gem::Specification.new do |spec|
16
16
  spec.metadata["source_code_uri"] = "https://github.com/joshdholtz/wassup"
17
17
 
18
18
  spec.add_runtime_dependency 'curses'
19
+ spec.add_runtime_dependency 'rest-client'
19
20
 
20
21
  # Specify which files should be added to the gem when it is released.
21
22
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wassup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Holtz
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-10 00:00:00.000000000 Z
11
+ date: 2022-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: curses
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rest-client
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  description: A scriptable terminal dashboard
28
42
  email:
29
43
  - me@joshholtz.com
@@ -45,14 +59,53 @@ files:
45
59
  - bin/console
46
60
  - bin/setup
47
61
  - bin/wassup
62
+ - docs/.gitignore
63
+ - docs/README.md
64
+ - docs/babel.config.js
65
+ - docs/blog/2021-12-09-welcome/index.md
66
+ - docs/blog/authors.yml
67
+ - docs/docs/Supfile-basics/_category_.json
68
+ - docs/docs/Supfile-basics/understanding-the-supfile.md
69
+ - docs/docs/intro.md
70
+ - docs/docusaurus.config.js
71
+ - docs/package-lock.json
72
+ - docs/package.json
73
+ - docs/sidebars.js
74
+ - docs/src/components/HomepageFeatures.module.css
75
+ - docs/src/components/HomepageFeatures.tsx
76
+ - docs/src/css/custom.css
77
+ - docs/src/pages/index.module.css
78
+ - docs/src/pages/index.tsx
79
+ - docs/src/pages/markdown-page.md
80
+ - docs/static/.nojekyll
81
+ - docs/static/img/demo-supfile.png
82
+ - docs/static/img/favicon.ico
83
+ - docs/static/img/logo.svg
84
+ - docs/static/img/tutorial-intro-starter-screenshot.png
85
+ - docs/static/img/tutorial/docsVersionDropdown.png
86
+ - docs/static/img/tutorial/localeDropdown.png
87
+ - docs/static/img/undraw_docusaurus_mountain.svg
88
+ - docs/static/img/undraw_docusaurus_react.svg
89
+ - docs/static/img/undraw_docusaurus_tree.svg
90
+ - docs/static/img/wassup-long.png
91
+ - docs/static/img/wassup-screenshot.png
92
+ - docs/static/img/wassup.png
93
+ - docs/static/video/wassup-demo.mov
94
+ - docs/tsconfig.json
48
95
  - examples/basic/Supfile
49
96
  - examples/debug/Supfile
50
97
  - examples/josh-fastlane/README.md
51
98
  - examples/josh-fastlane/Supfile
52
99
  - examples/josh-fastlane/demo.png
100
+ - examples/simple/Supfile
101
+ - examples/starter/Supfile
53
102
  - lib/wassup.rb
54
103
  - lib/wassup/app.rb
55
104
  - lib/wassup/color.rb
105
+ - lib/wassup/helpers/circleci.rb
106
+ - lib/wassup/helpers/github.rb
107
+ - lib/wassup/helpers/netlify.rb
108
+ - lib/wassup/helpers/shortcut.rb
56
109
  - lib/wassup/pane.rb
57
110
  - lib/wassup/pane_builder.rb
58
111
  - lib/wassup/version.rb
@@ -63,7 +116,7 @@ licenses:
63
116
  metadata:
64
117
  homepage_uri: https://github.com/joshdholtz/wassup
65
118
  source_code_uri: https://github.com/joshdholtz/wassup
66
- post_install_message:
119
+ post_install_message:
67
120
  rdoc_options: []
68
121
  require_paths:
69
122
  - lib
@@ -78,8 +131,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
131
  - !ruby/object:Gem::Version
79
132
  version: '0'
80
133
  requirements: []
81
- rubygems_version: 3.0.3.1
82
- signing_key:
134
+ rubygems_version: 3.2.3
135
+ signing_key:
83
136
  specification_version: 4
84
137
  summary: A scriptable terminal dashboard
85
138
  test_files: []