slk 0.5.0 → 0.7.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 +4 -4
- data/CHANGELOG.md +83 -1
- data/README.md +31 -0
- data/lib/slk/api/custom_status.rb +112 -0
- data/lib/slk/api/team.rb +24 -0
- data/lib/slk/api/users.rb +10 -0
- data/lib/slk/cli.rb +14 -3
- data/lib/slk/commands/base.rb +13 -1
- data/lib/slk/commands/debug.rb +110 -0
- data/lib/slk/commands/help.rb +1 -0
- data/lib/slk/commands/org.rb +119 -0
- data/lib/slk/commands/status.rb +224 -13
- data/lib/slk/commands/who.rb +115 -0
- data/lib/slk/formatters/output.rb +2 -0
- data/lib/slk/formatters/profile_field_renderer.rb +107 -0
- data/lib/slk/formatters/profile_formatter.rb +87 -0
- data/lib/slk/formatters/profile_rows.rb +72 -0
- data/lib/slk/models/profile.rb +71 -0
- data/lib/slk/models/profile_field.rb +29 -0
- data/lib/slk/models/scheduled_status.rb +77 -0
- data/lib/slk/runner.rb +21 -0
- data/lib/slk/services/api_client.rb +75 -10
- data/lib/slk/services/cache_store.rb +46 -2
- data/lib/slk/services/encryption.rb +8 -1
- data/lib/slk/services/meta_cache.rb +32 -0
- data/lib/slk/services/profile_builder.rb +129 -0
- data/lib/slk/services/profile_resolver.rb +138 -0
- data/lib/slk/services/user_lookup.rb +9 -13
- data/lib/slk/services/user_matcher.rb +64 -0
- data/lib/slk/services/user_picker.rb +68 -0
- data/lib/slk/services/who_target_resolver.rb +64 -0
- data/lib/slk/support/time_parser.rb +120 -0
- data/lib/slk/support/time_range_parser.rb +166 -0
- data/lib/slk/version.rb +1 -1
- data/lib/slk.rb +59 -1
- metadata +21 -2
data/lib/slk.rb
CHANGED
|
@@ -11,7 +11,46 @@ require 'io/console'
|
|
|
11
11
|
# Slack CLI - A command-line interface for Slack
|
|
12
12
|
module Slk
|
|
13
13
|
class Error < StandardError; end
|
|
14
|
-
|
|
14
|
+
|
|
15
|
+
# The invocation itself was wrong (a flag with no value, an unparseable
|
|
16
|
+
# time). The message is written for the user and is printed verbatim, with
|
|
17
|
+
# no "Error type:" label, because there is no internal fault to report.
|
|
18
|
+
class UsageError < Error; end
|
|
19
|
+
|
|
20
|
+
# A time or range the user typed that cannot be understood. Separate from
|
|
21
|
+
# UsageError so callers can rescue *only* malformed input: a blanket
|
|
22
|
+
# `rescue ArgumentError` around a parse call also swallows arity and range
|
|
23
|
+
# errors from the code itself and presents them as if the user mistyped.
|
|
24
|
+
class TimeFormatError < UsageError; end
|
|
25
|
+
|
|
26
|
+
# Errors from any Slack-API-shaped failure: HTTP errors, network errors,
|
|
27
|
+
# logical Slack errors (user_not_found, missing_scope, etc.), JSON parse
|
|
28
|
+
# failures. The optional `code` symbol lets callers match specific cases
|
|
29
|
+
# (e.g. `e.code == :user_not_found`) without parsing message strings.
|
|
30
|
+
#
|
|
31
|
+
# Codes used:
|
|
32
|
+
# :network_error, :http_error, :unauthorized, :invalid_json,
|
|
33
|
+
# :ratelimited, plus any literal Slack `error` value (`:user_not_found`,
|
|
34
|
+
# `:missing_scope`, `:account_inactive`, etc.).
|
|
35
|
+
class ApiError < Error
|
|
36
|
+
attr_reader :code
|
|
37
|
+
|
|
38
|
+
def initialize(message, code: nil)
|
|
39
|
+
super(message)
|
|
40
|
+
@code = code
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Slack rate-limit error. Carries Retry-After in seconds when present.
|
|
45
|
+
class RateLimitError < ApiError
|
|
46
|
+
attr_reader :retry_after
|
|
47
|
+
|
|
48
|
+
def initialize(message, retry_after: nil)
|
|
49
|
+
super(message, code: :ratelimited)
|
|
50
|
+
@retry_after = retry_after
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
15
54
|
class ConfigError < Error; end
|
|
16
55
|
class EncryptionError < Error; end
|
|
17
56
|
class TokenStoreError < Error; end
|
|
@@ -27,6 +66,7 @@ module Slk
|
|
|
27
66
|
autoload :Duration, 'slk/models/duration'
|
|
28
67
|
autoload :Workspace, 'slk/models/workspace'
|
|
29
68
|
autoload :Status, 'slk/models/status'
|
|
69
|
+
autoload :ScheduledStatus, 'slk/models/scheduled_status'
|
|
30
70
|
autoload :Message, 'slk/models/message'
|
|
31
71
|
autoload :Reaction, 'slk/models/reaction'
|
|
32
72
|
autoload :User, 'slk/models/user'
|
|
@@ -34,6 +74,8 @@ module Slk
|
|
|
34
74
|
autoload :Preset, 'slk/models/preset'
|
|
35
75
|
autoload :SearchResult, 'slk/models/search_result'
|
|
36
76
|
autoload :SavedItem, 'slk/models/saved_item'
|
|
77
|
+
autoload :Profile, 'slk/models/profile'
|
|
78
|
+
autoload :ProfileField, 'slk/models/profile_field'
|
|
37
79
|
end
|
|
38
80
|
|
|
39
81
|
# Application services for configuration, caching, and API communication
|
|
@@ -56,7 +98,13 @@ module Slk
|
|
|
56
98
|
autoload :TargetResolver, 'slk/services/target_resolver'
|
|
57
99
|
autoload :SetupWizard, 'slk/services/setup_wizard'
|
|
58
100
|
autoload :UserLookup, 'slk/services/user_lookup'
|
|
101
|
+
autoload :UserMatcher, 'slk/services/user_matcher'
|
|
102
|
+
autoload :UserPicker, 'slk/services/user_picker'
|
|
103
|
+
autoload :WhoTargetResolver, 'slk/services/who_target_resolver'
|
|
59
104
|
autoload :MessageResolver, 'slk/services/message_resolver'
|
|
105
|
+
autoload :ProfileBuilder, 'slk/services/profile_builder'
|
|
106
|
+
autoload :ProfileResolver, 'slk/services/profile_resolver'
|
|
107
|
+
autoload :MetaCache, 'slk/services/meta_cache'
|
|
60
108
|
end
|
|
61
109
|
|
|
62
110
|
# Output formatters for messages, durations, and emoji
|
|
@@ -75,6 +123,9 @@ module Slk
|
|
|
75
123
|
autoload :SearchFormatter, 'slk/formatters/search_formatter'
|
|
76
124
|
autoload :SavedItemFormatter, 'slk/formatters/saved_item_formatter'
|
|
77
125
|
autoload :TextProcessor, 'slk/formatters/text_processor'
|
|
126
|
+
autoload :ProfileFormatter, 'slk/formatters/profile_formatter'
|
|
127
|
+
autoload :ProfileFieldRenderer, 'slk/formatters/profile_field_renderer'
|
|
128
|
+
autoload :ProfileRows, 'slk/formatters/profile_rows'
|
|
78
129
|
end
|
|
79
130
|
|
|
80
131
|
# CLI commands implementing user-facing functionality
|
|
@@ -96,6 +147,9 @@ module Slk
|
|
|
96
147
|
autoload :Config, 'slk/commands/config'
|
|
97
148
|
autoload :Help, 'slk/commands/help'
|
|
98
149
|
autoload :Later, 'slk/commands/later'
|
|
150
|
+
autoload :Debug, 'slk/commands/debug'
|
|
151
|
+
autoload :Who, 'slk/commands/who'
|
|
152
|
+
autoload :Org, 'slk/commands/org'
|
|
99
153
|
end
|
|
100
154
|
|
|
101
155
|
# Thin wrappers around Slack API endpoints
|
|
@@ -111,6 +165,8 @@ module Slk
|
|
|
111
165
|
autoload :Activity, 'slk/api/activity'
|
|
112
166
|
autoload :Search, 'slk/api/search'
|
|
113
167
|
autoload :Saved, 'slk/api/saved'
|
|
168
|
+
autoload :CustomStatus, 'slk/api/custom_status'
|
|
169
|
+
autoload :Team, 'slk/api/team'
|
|
114
170
|
end
|
|
115
171
|
|
|
116
172
|
# Utility classes for paths, parsing, and helpers
|
|
@@ -124,5 +180,7 @@ module Slk
|
|
|
124
180
|
autoload :TextWrapper, 'slk/support/text_wrapper'
|
|
125
181
|
autoload :InteractivePrompt, 'slk/support/interactive_prompt'
|
|
126
182
|
autoload :DateParser, 'slk/support/date_parser'
|
|
183
|
+
autoload :TimeParser, 'slk/support/time_parser'
|
|
184
|
+
autoload :TimeRangeParser, 'slk/support/time_range_parser'
|
|
127
185
|
end
|
|
128
186
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: slk
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.7.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Eric Boehs
|
|
@@ -30,10 +30,12 @@ files:
|
|
|
30
30
|
- lib/slk/api/bots.rb
|
|
31
31
|
- lib/slk/api/client.rb
|
|
32
32
|
- lib/slk/api/conversations.rb
|
|
33
|
+
- lib/slk/api/custom_status.rb
|
|
33
34
|
- lib/slk/api/dnd.rb
|
|
34
35
|
- lib/slk/api/emoji.rb
|
|
35
36
|
- lib/slk/api/saved.rb
|
|
36
37
|
- lib/slk/api/search.rb
|
|
38
|
+
- lib/slk/api/team.rb
|
|
37
39
|
- lib/slk/api/threads.rb
|
|
38
40
|
- lib/slk/api/usergroups.rb
|
|
39
41
|
- lib/slk/api/users.rb
|
|
@@ -43,11 +45,13 @@ files:
|
|
|
43
45
|
- lib/slk/commands/cache.rb
|
|
44
46
|
- lib/slk/commands/catchup.rb
|
|
45
47
|
- lib/slk/commands/config.rb
|
|
48
|
+
- lib/slk/commands/debug.rb
|
|
46
49
|
- lib/slk/commands/dnd.rb
|
|
47
50
|
- lib/slk/commands/emoji.rb
|
|
48
51
|
- lib/slk/commands/help.rb
|
|
49
52
|
- lib/slk/commands/later.rb
|
|
50
53
|
- lib/slk/commands/messages.rb
|
|
54
|
+
- lib/slk/commands/org.rb
|
|
51
55
|
- lib/slk/commands/presence.rb
|
|
52
56
|
- lib/slk/commands/preset.rb
|
|
53
57
|
- lib/slk/commands/search.rb
|
|
@@ -55,6 +59,7 @@ files:
|
|
|
55
59
|
- lib/slk/commands/status.rb
|
|
56
60
|
- lib/slk/commands/thread.rb
|
|
57
61
|
- lib/slk/commands/unread.rb
|
|
62
|
+
- lib/slk/commands/who.rb
|
|
58
63
|
- lib/slk/commands/workspaces.rb
|
|
59
64
|
- lib/slk/formatters/activity_formatter.rb
|
|
60
65
|
- lib/slk/formatters/attachment_formatter.rb
|
|
@@ -66,6 +71,9 @@ files:
|
|
|
66
71
|
- lib/slk/formatters/mention_replacer.rb
|
|
67
72
|
- lib/slk/formatters/message_formatter.rb
|
|
68
73
|
- lib/slk/formatters/output.rb
|
|
74
|
+
- lib/slk/formatters/profile_field_renderer.rb
|
|
75
|
+
- lib/slk/formatters/profile_formatter.rb
|
|
76
|
+
- lib/slk/formatters/profile_rows.rb
|
|
69
77
|
- lib/slk/formatters/reaction_formatter.rb
|
|
70
78
|
- lib/slk/formatters/saved_item_formatter.rb
|
|
71
79
|
- lib/slk/formatters/search_formatter.rb
|
|
@@ -74,8 +82,11 @@ files:
|
|
|
74
82
|
- lib/slk/models/duration.rb
|
|
75
83
|
- lib/slk/models/message.rb
|
|
76
84
|
- lib/slk/models/preset.rb
|
|
85
|
+
- lib/slk/models/profile.rb
|
|
86
|
+
- lib/slk/models/profile_field.rb
|
|
77
87
|
- lib/slk/models/reaction.rb
|
|
78
88
|
- lib/slk/models/saved_item.rb
|
|
89
|
+
- lib/slk/models/scheduled_status.rb
|
|
79
90
|
- lib/slk/models/search_result.rb
|
|
80
91
|
- lib/slk/models/status.rb
|
|
81
92
|
- lib/slk/models/user.rb
|
|
@@ -91,7 +102,10 @@ files:
|
|
|
91
102
|
- lib/slk/services/file_downloader.rb
|
|
92
103
|
- lib/slk/services/gemoji_sync.rb
|
|
93
104
|
- lib/slk/services/message_resolver.rb
|
|
105
|
+
- lib/slk/services/meta_cache.rb
|
|
94
106
|
- lib/slk/services/preset_store.rb
|
|
107
|
+
- lib/slk/services/profile_builder.rb
|
|
108
|
+
- lib/slk/services/profile_resolver.rb
|
|
95
109
|
- lib/slk/services/reaction_enricher.rb
|
|
96
110
|
- lib/slk/services/setup_wizard.rb
|
|
97
111
|
- lib/slk/services/target_resolver.rb
|
|
@@ -100,6 +114,9 @@ files:
|
|
|
100
114
|
- lib/slk/services/token_store.rb
|
|
101
115
|
- lib/slk/services/unread_marker.rb
|
|
102
116
|
- lib/slk/services/user_lookup.rb
|
|
117
|
+
- lib/slk/services/user_matcher.rb
|
|
118
|
+
- lib/slk/services/user_picker.rb
|
|
119
|
+
- lib/slk/services/who_target_resolver.rb
|
|
103
120
|
- lib/slk/support/date_parser.rb
|
|
104
121
|
- lib/slk/support/error_logger.rb
|
|
105
122
|
- lib/slk/support/help_formatter.rb
|
|
@@ -108,6 +125,8 @@ files:
|
|
|
108
125
|
- lib/slk/support/platform.rb
|
|
109
126
|
- lib/slk/support/slack_url_parser.rb
|
|
110
127
|
- lib/slk/support/text_wrapper.rb
|
|
128
|
+
- lib/slk/support/time_parser.rb
|
|
129
|
+
- lib/slk/support/time_range_parser.rb
|
|
111
130
|
- lib/slk/support/user_resolver.rb
|
|
112
131
|
- lib/slk/support/xdg_paths.rb
|
|
113
132
|
- lib/slk/version.rb
|
|
@@ -133,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
133
152
|
- !ruby/object:Gem::Version
|
|
134
153
|
version: '0'
|
|
135
154
|
requirements: []
|
|
136
|
-
rubygems_version: 4.0.
|
|
155
|
+
rubygems_version: 4.0.13
|
|
137
156
|
specification_version: 4
|
|
138
157
|
summary: A command-line interface for Slack
|
|
139
158
|
test_files: []
|