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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3f0aebc0b0bcebdc9caad7172d05d3474fef6b0064023f280401a8736f19fbb6
4
- data.tar.gz: dda796643faa8e779b12a9e4ce1714edc4625563848dfef30af3e1e93acd4276
3
+ metadata.gz: 6aefb6d9811fd9c32d4d2d4245bb28830c4660e4a9e8b4c83371cd0c97cf3b69
4
+ data.tar.gz: af93fe1a94375326e7a20cf141bb0e4936e317eb53398c874deb10d20d025480
5
5
  SHA512:
6
- metadata.gz: db62700957058f56b4ad13ea5b4f5d2e7e8b2508316e31365c11bbebf646e6ac7b053f499bf0cdf2f7a096a4c95a69e701b416e2b1eab5bf453f2ab42a55bd47
7
- data.tar.gz: 4965daf82bc576a79ac1a05cd86ff925b9daebf4e22ce904a61814af39ae2a91c245a58da436d8e746185ded5b9947d2a74a609fa8058a510c763b95f306ed32
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
- Rake::TestTask.new(:preview) do |t|
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
- first_time_use
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 'mchat_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
- MchatApp.new.run
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
- repl = Mchat::Repl.new
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
- trap("INT") { tl.hook_close }
7
+ OptionParser.new do |opts|
8
+ opts.banner = "Usage: mchat [options]"
7
9
 
8
- tl.run
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
- puts "[mchat] clean config ..."
4
- system("rm -rf .mchat")
5
- puts "[mchat] uninstall mchat ..."
6
- system("gem uninstall mchat")
5
+ options = {}
6
+ OptionParser.new do |opts|
7
+ opts.banner = "Usage: mchat_uninstall [options]"
7
8
 
8
- puts "[mchat] all files have uninstalled. Bye :D"
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 first_time_use
39
- if !user_config_exist?
40
- read_user_config
41
- puts "Mchat first run TIPS".style.jade
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. :D"
50
-
51
- exit 0
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
- @server = @config.fetch("server") || 'localhost:4567'
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)
@@ -55,6 +55,7 @@ module Mchat
55
55
  def hook_close
56
56
  @reader.hook_quit
57
57
  system('screen -X quit')
58
+ exit 0
58
59
  end
59
60
 
60
61
  def dispatch(m)
data/lib/mchat/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Mchat
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
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.1.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-15 00:00:00.000000000 Z
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