mchat 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Dockerfile +20 -0
- data/README.md +8 -0
- data/Rakefile +9 -1
- data/exe/mchat +33 -5
- data/exe/mchat_repl +24 -1
- data/exe/mchat_timeline +19 -3
- data/exe/mchat_uninstall +26 -5
- data/lib/mchat/comps/user_config.rb +22 -9
- data/lib/mchat/repl.rb +7 -5
- data/lib/mchat/timeline.rb +1 -0
- data/lib/mchat/version.rb +1 -1
- metadata +32 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6aefb6d9811fd9c32d4d2d4245bb28830c4660e4a9e8b4c83371cd0c97cf3b69
|
4
|
+
data.tar.gz: af93fe1a94375326e7a20cf141bb0e4936e317eb53398c874deb10d20d025480
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '076984b05f9c3482cc520fb95ef31c9a29c1630fea35e7d946741e949f8883ea883981f4888d840e9b49fd675e6e202585d7c264c59a475e80271b5416f5cd80'
|
7
|
+
data.tar.gz: 02d42e72ad4619dafe0e069861c9d60af8f14c49f8f23f03e2d88cda199c9281f4ab282636e9cd5543b9b01dbf9fce59f2f8147e1f3b9faf496fcf2d82193553
|
data/Dockerfile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
FROM ruby:3.1-buster
|
2
|
+
|
3
|
+
ENV LANG=C.UTF-8
|
4
|
+
|
5
|
+
RUN apt update -y
|
6
|
+
RUN apt install screen -y
|
7
|
+
RUN apt install vim -y
|
8
|
+
RUN apt install nano -y
|
9
|
+
|
10
|
+
RUN gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
|
11
|
+
RUN gem install bundler
|
12
|
+
RUN bundle config mirror.https://rubygems.org https://gems.ruby-china.com
|
13
|
+
|
14
|
+
|
15
|
+
# Install gems
|
16
|
+
RUN gem install rainbow
|
17
|
+
RUN gem install httparty
|
18
|
+
RUN gem install mchat
|
19
|
+
|
20
|
+
CMD ["bash"]
|
data/README.md
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
Mchat is IRC like chat client.
|
4
4
|
|
5
|
+
[Doc: 用Ruby打造一个命令行Slack](https://mark24code.github.io/ruby/2022/08/15/%E7%94%A8Ruby%E6%89%93%E9%80%A0%E4%B8%80%E4%B8%AA%E5%91%BD%E4%BB%A4%E8%A1%8CSlack.html)
|
6
|
+
|
5
7
|
![preview](./assets/preview.png)
|
6
8
|
|
7
9
|
This is Mchat client repo, server repo:
|
@@ -24,6 +26,12 @@ mchat
|
|
24
26
|
/h
|
25
27
|
```
|
26
28
|
|
29
|
+
或者使用Docker
|
30
|
+
|
31
|
+
直接使用
|
32
|
+
|
33
|
+
`docker run -it mark24code/mchat`
|
34
|
+
|
27
35
|
|
28
36
|
|
29
37
|
----
|
data/Rakefile
CHANGED
@@ -13,9 +13,17 @@ end
|
|
13
13
|
|
14
14
|
# RuboCop::RakeTask.new
|
15
15
|
|
16
|
-
|
16
|
+
desc 'build gem & local install it'
|
17
|
+
task :preview do
|
17
18
|
system("gem build mchat.gemspec && gem install ./mchat-#{Mchat::VERSION}.gem")
|
18
19
|
end
|
19
20
|
|
21
|
+
desc 'build docker images & push'
|
22
|
+
task :docker_pd do
|
23
|
+
system("docker build -t mark24code/mchat:latest .")
|
24
|
+
system("docker push mark24code/mchat")
|
25
|
+
system("docker build -t mark24code/mchat:#{Mchat::VERSION} .")
|
26
|
+
system("docker push mark24code/mchat:#{Mchat::VERSION}")
|
27
|
+
end
|
20
28
|
|
21
29
|
task default: %i[test]
|
data/exe/mchat
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
require 'optparse'
|
2
3
|
require 'pathname'
|
4
|
+
require_relative '../lib/mchat/version.rb'
|
3
5
|
require_relative "../lib/mchat/comps/font"
|
4
6
|
class String
|
5
7
|
include Mchat::Style
|
@@ -8,8 +10,8 @@ require_relative "../lib/mchat/comps/user_config"
|
|
8
10
|
class MchatApp
|
9
11
|
include Mchat::UserConfig
|
10
12
|
|
11
|
-
def initialize
|
12
|
-
|
13
|
+
def initialize(opts={})
|
14
|
+
@server = opts.fetch(:server, nil)
|
13
15
|
@screenrc_dir = Pathname.new(Dir.home).join('.mchat')
|
14
16
|
@screenrc = Pathname.new(Dir.home).join('.mchat').join('screenrc')
|
15
17
|
end
|
@@ -30,10 +32,16 @@ class MchatApp
|
|
30
32
|
init_config = %Q(
|
31
33
|
split -v
|
32
34
|
|
33
|
-
screen -t timeline
|
35
|
+
screen -t timeline mchat_timeline
|
34
36
|
focus
|
35
|
-
screen -t repl 'mchat_repl'
|
36
37
|
)
|
38
|
+
if @server
|
39
|
+
# search `eval` 接受完整参数
|
40
|
+
# https://www.gnu.org/software/screen/manual/screen.html
|
41
|
+
init_config << "screen -t repl eval mchat_repl --server=#{@server}"
|
42
|
+
else
|
43
|
+
init_config << "screen -t repl mchat_repl"
|
44
|
+
end
|
37
45
|
f << init_config
|
38
46
|
end
|
39
47
|
end
|
@@ -59,4 +67,24 @@ class MchatApp
|
|
59
67
|
end
|
60
68
|
|
61
69
|
|
62
|
-
|
70
|
+
|
71
|
+
options = {}
|
72
|
+
OptionParser.new do |opts|
|
73
|
+
opts.banner = "Usage: mchat [options]"
|
74
|
+
|
75
|
+
opts.on("--version", "version") do
|
76
|
+
|
77
|
+
puts "Mchat v#{::Mchat::VERSION}"
|
78
|
+
puts ""
|
79
|
+
puts "author: mark24"
|
80
|
+
puts "mail: mark.zhangyoung@qq.com"
|
81
|
+
return
|
82
|
+
end
|
83
|
+
|
84
|
+
opts.on("--server=SERVER", "server") do |server|
|
85
|
+
options[:server] = server
|
86
|
+
end
|
87
|
+
|
88
|
+
end.parse!
|
89
|
+
|
90
|
+
MchatApp.new(options).run
|
data/exe/mchat_repl
CHANGED
@@ -1,7 +1,30 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
require 'optparse'
|
3
|
+
require_relative '../lib/mchat/version.rb'
|
2
4
|
require_relative "../lib/mchat"
|
3
5
|
|
4
|
-
|
6
|
+
|
7
|
+
options = {}
|
8
|
+
OptionParser.new do |opts|
|
9
|
+
opts.banner = "Usage: mchat_repl [options]"
|
10
|
+
|
11
|
+
opts.on("--version", "version") do
|
12
|
+
|
13
|
+
puts "MchatRepl v#{::Mchat::VERSION}"
|
14
|
+
puts ""
|
15
|
+
puts "author: mark24"
|
16
|
+
puts "mail: mark.zhangyoung@qq.com"
|
17
|
+
return
|
18
|
+
end
|
19
|
+
|
20
|
+
opts.on("--server=SERVER", "server") do |server|
|
21
|
+
options[:server] = server
|
22
|
+
end
|
23
|
+
|
24
|
+
end.parse!
|
25
|
+
|
26
|
+
|
27
|
+
repl = Mchat::Repl.new(options)
|
5
28
|
|
6
29
|
trap("INT") { repl.quit_command_run }
|
7
30
|
|
data/exe/mchat_timeline
CHANGED
@@ -1,8 +1,24 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
require 'optparse'
|
3
|
+
require_relative '../lib/mchat/version.rb'
|
2
4
|
require_relative "../lib/mchat/timeline"
|
3
5
|
|
4
|
-
tl = Mchat::Timeline.new
|
5
6
|
|
6
|
-
|
7
|
+
OptionParser.new do |opts|
|
8
|
+
opts.banner = "Usage: mchat [options]"
|
7
9
|
|
8
|
-
|
10
|
+
opts.on("--version", "version") do
|
11
|
+
|
12
|
+
puts "MchatTimeline v#{::Mchat::VERSION}"
|
13
|
+
puts ""
|
14
|
+
puts "author: mark24"
|
15
|
+
puts "mail: mark.zhangyoung@qq.com"
|
16
|
+
return
|
17
|
+
end
|
18
|
+
end.parse!
|
19
|
+
|
20
|
+
tl = Mchat::Timeline.new
|
21
|
+
|
22
|
+
trap("INT") { tl.hook_close }
|
23
|
+
|
24
|
+
tl.run
|
data/exe/mchat_uninstall
CHANGED
@@ -1,8 +1,29 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
require 'optparse'
|
3
|
+
require_relative '../lib/mchat/version.rb'
|
2
4
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
system("gem uninstall mchat")
|
5
|
+
options = {}
|
6
|
+
OptionParser.new do |opts|
|
7
|
+
opts.banner = "Usage: mchat_uninstall [options]"
|
7
8
|
|
8
|
-
|
9
|
+
opts.on("--version", "version") do
|
10
|
+
|
11
|
+
puts "MchatUninstall v#{::Mchat::VERSION}"
|
12
|
+
puts ""
|
13
|
+
puts "author: mark24"
|
14
|
+
puts "mail: mark.zhangyoung@qq.com"
|
15
|
+
return
|
16
|
+
end
|
17
|
+
end.parse!
|
18
|
+
|
19
|
+
|
20
|
+
def goodbye_job
|
21
|
+
puts "[mchat] clean config ..."
|
22
|
+
system("rm -rf .mchat")
|
23
|
+
puts "[mchat] uninstall mchat ..."
|
24
|
+
system("gem uninstall mchat")
|
25
|
+
|
26
|
+
puts "[mchat] all files have uninstalled. Bye :D"
|
27
|
+
end
|
28
|
+
|
29
|
+
goodbye_job
|
@@ -18,7 +18,7 @@ init_config = %Q(
|
|
18
18
|
wait_prefix: ">>"
|
19
19
|
display_welcome: true
|
20
20
|
clear_repl_everytime: true
|
21
|
-
server: "localhost:4567"
|
21
|
+
# server: "localhost:4567"
|
22
22
|
|
23
23
|
)
|
24
24
|
f << init_config
|
@@ -35,20 +35,33 @@ server: "localhost:4567"
|
|
35
35
|
return opt
|
36
36
|
end
|
37
37
|
|
38
|
-
def
|
39
|
-
if
|
40
|
-
|
41
|
-
puts "
|
38
|
+
def check_server_before_all
|
39
|
+
if !@server
|
40
|
+
puts "Mchat about `Server` Tips".style.jade
|
41
|
+
puts ""
|
42
|
+
puts "your server: `#{@server}`"
|
42
43
|
puts ""
|
43
|
-
puts "Mchat not found user config, maybe this is your first time run Mchat."
|
44
44
|
init_config = "~/.mchat".style.warn
|
45
45
|
puts "Mchat has help your create config to #{init_config}"
|
46
46
|
server_field = "<server> field".style.warn
|
47
47
|
puts "Before you run mchat, edit your config file, change #{server_field} to yours:"
|
48
48
|
puts "vim #{CONFIG_PATH.to_s}".style.warn
|
49
|
-
puts "make sure your server works, before run Mchat.
|
50
|
-
|
51
|
-
|
49
|
+
puts "make sure your server works, before run Mchat."
|
50
|
+
puts ""
|
51
|
+
puts "If you have server address, you can also run like this:"
|
52
|
+
puts "mchat --server='http://<your host>'"
|
53
|
+
puts "e.g. mchat --server='http://localhost:4567'"
|
54
|
+
puts "so you will not need to edit mchatrc." + " :)".style.warn
|
55
|
+
puts ""
|
56
|
+
puts "Confirm? (y/yes)"
|
57
|
+
while true
|
58
|
+
confirm = gets
|
59
|
+
confirm = confirm.strip
|
60
|
+
if confirm == 'y' || confirm == 'yes'
|
61
|
+
system('screen -X quit')
|
62
|
+
end
|
63
|
+
sleep 0.1
|
64
|
+
end
|
52
65
|
end
|
53
66
|
end
|
54
67
|
end
|
data/lib/mchat/repl.rb
CHANGED
@@ -104,14 +104,16 @@ module Mchat
|
|
104
104
|
|
105
105
|
# Instance ########################3
|
106
106
|
|
107
|
-
def initialize
|
108
|
-
first_time_use
|
107
|
+
def initialize(opts = {})
|
109
108
|
|
110
109
|
@config = read_user_config
|
111
|
-
|
110
|
+
|
111
|
+
@server = opts.fetch(:server, nil) || @config.fetch("server", nil) || nil
|
112
|
+
|
113
|
+
check_server_before_all
|
112
114
|
|
113
115
|
@api = ::Mchat::Request.new(@server)
|
114
|
-
|
116
|
+
|
115
117
|
@wait_prefix = @config.fetch("wait_prefix") || ">>"
|
116
118
|
@display_welcome = @config.fetch("display_welcome") || true
|
117
119
|
|
@@ -215,7 +217,7 @@ module Mchat
|
|
215
217
|
startup_msg = resp.fetch("data")
|
216
218
|
return Message.new(startup_msg).display
|
217
219
|
end
|
218
|
-
|
220
|
+
|
219
221
|
def before_loop_setup
|
220
222
|
# cli
|
221
223
|
_puts welcome(@display_welcome)
|
data/lib/mchat/timeline.rb
CHANGED
data/lib/mchat/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mchat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark24
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-08-
|
12
|
-
dependencies:
|
11
|
+
date: 2022-08-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rainbow
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.1.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.1.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: httparty
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.20.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.20.0
|
13
41
|
description: IRC like chat client power by ruby
|
14
42
|
email:
|
15
43
|
- mark.zhangyoung@qq.com
|
@@ -21,6 +49,7 @@ executables:
|
|
21
49
|
extensions: []
|
22
50
|
extra_rdoc_files: []
|
23
51
|
files:
|
52
|
+
- Dockerfile
|
24
53
|
- Gemfile
|
25
54
|
- Gemfile.lock
|
26
55
|
- LICENSE.txt
|