wassup 0.2.0 → 0.3.2

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.
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: []