t_chatter 0.1.0 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 444e14ae8b42aaa85766a23314158ed9d6fb0dd7
4
- data.tar.gz: 7de15773339d2be2270099b466c733b543eaa056
3
+ metadata.gz: 20d112a39dc3f70adc1aba142d9e3ce0e13cb899
4
+ data.tar.gz: f5d6b2e9e9bd72337e48e9a57f2c291d9fcd217f
5
5
  SHA512:
6
- metadata.gz: cb10d13a791e5e7d20e724a194d9ddb88734db0c7263075b178070b1a3bbe8f6f8db482745f5df3327757043ef835a028303929e7e26cb33d1cca506c5660047
7
- data.tar.gz: 6af4107cc8e98fb12b2473e9d456e47dea2cfeee8fe283e578abac78eb3cc3509be5e06bf64950ff76292f6601860d05d60fd905a5fbd2075c0f2644a176c9b7
6
+ metadata.gz: 5291a053fa7f109fb8856ddba828d02c33787efea9d256e13e8b38671d56b3a59eb600e258125544623e61620b8888786d5283266a1228190740dfb3ce09507d
7
+ data.tar.gz: 39c87ee99bb7ad6dce34fcd6e4011d4a97bff1467b708fe9fd0cb639785497606f78ca3502056de31566faa702825b61557073ea64224e44a7319a9b768224ad
data/.gitignore CHANGED
@@ -10,3 +10,4 @@
10
10
  .chatter.yml
11
11
  codesnip
12
12
  */codesnip
13
+ *.gem
data/bin/setup_t_chatter CHANGED
@@ -25,48 +25,64 @@ end
25
25
 
26
26
  config = Hash.new(nil)
27
27
 
28
+ true_false_cmd = {
29
+ 'true' => true,
30
+ 'yes' => true,
31
+ 'y' => true,
32
+ 't' => true,
33
+ '' => true,
34
+ 'false' => false,
35
+ 'no' => false,
36
+ 'n' => false,
37
+ 'f' => false
38
+ }
39
+
40
+ tfc_short = true_false_cmd.keys.reject{ |k, v| k == '' }.join(', ')
41
+
28
42
  print "What is your name?(optional) : "
29
43
  config[:user] = gets.chomp.strip
30
44
 
31
45
  puts ""
32
46
 
33
- print "Would you like to just send message?(optional) : "
47
+ print "Would you like to send messages?(optional) #enter (#{tfc_short}) : "
34
48
  config[:send] = gets.chomp.strip
35
49
 
36
50
  puts ""
37
51
 
38
- print "Would you like to receive messages?(optional) : "
52
+ print "Would you like to receive messages?(optional) #enter (#{tfc_short}) : "
39
53
  config[:receive] = gets.chomp.strip
40
54
 
41
55
  print "Enter your URL for the Server?(optional) : "
42
56
  config[:host] = gets.chomp.strip
43
57
 
44
- true_cmd = {
45
- 'true' => true,
46
- 'yes' => true,
47
- 'y' => true,
48
- '' => true,
49
- 'false' => false,
50
- 'no' => false,
51
- 'n' => false
52
- }
53
58
 
54
59
  real_config = Hash.new(nil)
55
60
  config.each{ |x, y|
56
61
  if [:send, :receive].include? x
57
- real_config[x] = true_cmd[y]
58
- real_config[x] = true unless true_cmd.keys.include? y
62
+ real_config[x] = true_false_cmd[y]
63
+ real_config[x] = true unless true_false_cmd.keys.include? y
59
64
  else
60
65
  real_config[x] = y if !y.blank?
61
66
  end
62
67
  }
63
68
 
64
69
  real_config[:host] = TChatter::DEFAULT_URL unless real_config[:host]
70
+ real_config[:user_id] = TChatter::UNIQUE_ID
65
71
 
66
72
  File.open(file_location, 'w') do |f|
67
73
  ::YAML.dump real_config, f
68
74
  end
69
75
 
76
+ applications_to_be_supported = %w[ Slack HipChat ].join(', ')
77
+
70
78
  puts <<-EOS
71
- Congratulations you have completed the basic setup. The file can be found at: #{file_location}
79
+ Congratulations you have completed the basic setup. The file can be found at:
80
+ #{file_location}
81
+
82
+ To connect to TChatter
83
+ run `t_chatter` from your terminal and watch the messages stream in
84
+
85
+
86
+ Note: As part of the future plans, you would be able to connect TChatter to
87
+ your #{applications_to_be_supported} application so you never miss a chat
72
88
  EOS
data/bin/t_chatter CHANGED
@@ -3,13 +3,5 @@
3
3
  require "bundler/setup"
4
4
  require "t_chatter"
5
5
 
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- # require "irb"
14
- # IRB.start
15
- TChatter::Start.chat
6
+ chat = TChatter::Entry.new
7
+ chat.start_chat
@@ -1,15 +1,22 @@
1
1
  module TChatter
2
2
  class Chat
3
- attr_reader :connection, :messages, :response, :last_message_id, :user, :config
3
+ attr_reader :connection, :messages, :response, :last_message_id, :user, :user_id, :config, :url, :all_users
4
4
  # attr_accessor :url
5
5
 
6
6
  def initialize(username, config_class)
7
7
  @user = username
8
8
  @messages = []
9
9
  @last_message_id = 0
10
+ @all_users = []
10
11
  @config = config_class.configuration
12
+ @user_id = config[:user_id] || UNIQUE_ID
11
13
  set_url
12
14
  connect
15
+ subscribe_user
16
+ end
17
+
18
+ def subscribe_user
19
+ connection.post('/new_user', {user_id: user_id , user: user})
13
20
  end
14
21
 
15
22
  def set_url
@@ -22,7 +29,7 @@ module TChatter
22
29
  used everytime you try to connect. However you are now being connected
23
30
  to the global chatter stream
24
31
  EOS
25
- @url = URI.parse(TChatter::DEFAULT_URL)
32
+ @url = URI.parse(DEFAULT_URL)
26
33
  end
27
34
  end
28
35
 
@@ -37,8 +44,9 @@ module TChatter
37
44
 
38
45
  def send_message(message)
39
46
  response = connection.post('/send', {message: message, user: user})
40
- response = JSON.parse(response.body)
41
- @last_message_id = response["last_message_id"]
47
+ @response = JSON.parse(response.body)
48
+ @last_message_id = @response["last_message_id"]
49
+ @messages << message
42
50
  @last_message = message
43
51
  end
44
52
 
@@ -49,10 +57,35 @@ module TChatter
49
57
  last_id = @response["last_message_id"]
50
58
  unless last_id == last_message_id
51
59
  message = @response["message"]
52
- @last_message_id = @response["last_message_id"]
53
- @messages << message if message
54
60
  puts message
61
+ @last_message_id = last_id
62
+ update_messages(message) unless message.blank?
55
63
  end
64
+ get_subscribed_users if all_users.size < @response["total_users"].to_i
65
+ end
66
+
67
+ def update_messages(message)
68
+ message = message.split("\n")
69
+ @last_message = message.last
70
+ @messages += message
71
+ end
72
+
73
+ def get_subscribed_users
74
+ response = connection.get('/all_users')
75
+ response = JSON.parse(response.body)
76
+ @all_users = response["users"]
77
+ end
78
+
79
+ def each_user
80
+ @all_users.map{ |y| y['name'] }.join(', ')
81
+ end
82
+
83
+ def show_all_users
84
+ puts @all_users.map{ |y| "#{y['name']} joined at #{y['joined']}"}.join("\n")
85
+ end
86
+
87
+ def quit
88
+ connection.get('/quit', {user_id: user_id})
56
89
  end
57
90
  end
58
91
  end
@@ -0,0 +1,111 @@
1
+ module TChatter
2
+ class Entry
3
+ attr_reader :user, :config, :chat, :threads
4
+
5
+ def initialize
6
+ @config = ConfigSetup.instance
7
+ setup_user
8
+ @chat = Chat.new(@user, @config)
9
+ @threads = []
10
+ end
11
+
12
+ def start_chat
13
+ setup_threads
14
+ control_exit_strategy
15
+ start_threads
16
+ end
17
+
18
+ def want_to_send?
19
+ @config.configuration.blank? ? true : @config.configuration[:send]
20
+ end
21
+
22
+ def want_to_receive?
23
+ @config.configuration.blank? ? true : @config.configuration[:receive]
24
+ end
25
+
26
+ def setup_user
27
+ @user = config.configuration[:user]
28
+ unless @user
29
+ print 'Would you mind telling me your name? : '
30
+ @user = gets.chomp
31
+ end
32
+ end
33
+
34
+ def stream_messages
35
+ Thread.new do
36
+ loop do
37
+ chat.receive_message
38
+ end
39
+ end
40
+ end
41
+
42
+ def variables_subs
43
+ { '@my_name' => chat.user.to_s, '@last_message' => chat.messages.last.to_s, '@each_user' => chat.each_user }
44
+ end
45
+
46
+ def substitute_variables(message)
47
+ variables_subs.each do |var, val|
48
+ message = message.gsub(var, val)
49
+ end
50
+ message
51
+ end
52
+
53
+ def peep
54
+ chat.show_all_users
55
+ end
56
+
57
+ def help
58
+ var_help = variables_subs.keys.join(', ')
59
+ command_help = commands.keys.join(', ')
60
+ puts <<-EOS
61
+ Use the following variables in any message to refer to its inferred
62
+ meaning in any message: #{var_help}
63
+ You can use any of these commands to also call the inferred action
64
+ #{command_help}
65
+ EOS
66
+ end
67
+
68
+ def quit
69
+ puts "Gracefully shutting down the chat"
70
+ chat.quit
71
+ @threads.each(&:exit)
72
+ end
73
+
74
+ def commands
75
+ {
76
+ '#all_users' => :peep,
77
+ '#help' => :help,
78
+ '#quit' => :quit
79
+ }
80
+ end
81
+
82
+ def send_messages
83
+ Thread.new do
84
+ loop do
85
+ message = gets.chomp.strip
86
+ unless commands.keys.include? message
87
+ message = substitute_variables(message) if message.match(/@\w+/)
88
+ chat.send_message(message) unless message.blank?
89
+ else
90
+ send(commands[message])
91
+ end
92
+ end
93
+ end
94
+ end
95
+
96
+ def control_exit_strategy
97
+ trap('INT') do
98
+ quit
99
+ end
100
+ end
101
+
102
+ def setup_threads
103
+ @threads << stream_messages if want_to_receive?
104
+ @threads << send_messages if want_to_send?
105
+ end
106
+
107
+ def start_threads
108
+ @threads.each(&:join)
109
+ end
110
+ end
111
+ end
@@ -1,3 +1,3 @@
1
1
  module TChatter
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.2"
3
3
  end
data/lib/t_chatter.rb CHANGED
@@ -5,9 +5,11 @@ require 'faraday'
5
5
  require 'yaml'
6
6
  require 'singleton'
7
7
  require 'uri'
8
+ require 'securerandom'
8
9
 
9
10
  module TChatter
10
11
  DEFAULT_URL = "https://tchatter.herokuapp.com"
12
+ UNIQUE_ID = SecureRandom.uuid.gsub('-', '')
11
13
  # Your code goes here...
12
14
  end
13
15
 
Binary file
data/t_chatter.gemspec CHANGED
@@ -9,21 +9,36 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Oreoluwa Akinniranye"]
10
10
  spec.email = ["oreoluwa.akinniranye@andela.com"]
11
11
 
12
- spec.summary = %q{Allows you to chat on your terminal}
13
- spec.description = %q{TChatter allows you to chat with your friends on your terminal. You can extend it further though to chat your friends on Slack and other applications.}
14
- spec.homepage = "http://github.com/andela-oakinniranye/t_chatter"
15
- spec.license = "MIT"
12
+ spec.summary = %q{Allows you to chat on your terminal|command line}
13
+ spec.homepage = "https://github.com/andela-oakinniranye/t_chatter"
14
+
15
+ spec.description = <<-EOS
16
+ TChatter allows you to chat with your friends on your
17
+ terminal.
18
+ You can extend it further though to chat with your
19
+ friends on Slack and other applications."
20
+ Visit <a href='#{spec.homepage}'>TChatter's Homepage</a>
21
+ to read more on the application.
22
+ EOS
16
23
 
24
+ spec.license = "MIT"
17
25
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
26
  spec.bindir = "bin"
19
27
  spec.executables = ['t_chatter', 'setup_t_chatter']
20
28
  spec.require_paths = ["lib"]
21
29
 
22
- spec.add_dependency "faraday"
23
- spec.add_dependency "json"
30
+ spec.add_dependency "faraday", "~> 0.9"
31
+ spec.add_dependency "json", "~> 1.8"
32
+
33
+ spec.post_install_message = <<-EOS
24
34
 
25
- spec.post_install_message = "Thanks for trying out my interesting gem.\nTo complete the installation, run `setup_t_chatter` to create a .chatter.yml configuration file.\nThis allows you to use your own url and set defaults for your version of TChatter"
35
+ Thanks for trying out my interesting gem.
36
+ To complete the installation, run `setup_t_chatter` to
37
+ create a .chatter.yml configuration file.
38
+ This allows you to use your own url and set defaults
39
+ for your version of TChatter
26
40
 
41
+ EOS
27
42
 
28
43
  spec.add_development_dependency "bundler", "~> 1.10"
29
44
  spec.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: t_chatter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oreoluwa Akinniranye
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-17 00:00:00.000000000 Z
11
+ date: 2015-10-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '0.9'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '0.9'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '1.8'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '1.8'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -66,8 +66,13 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '10.0'
69
- description: TChatter allows you to chat with your friends on your terminal. You can
70
- extend it further though to chat your friends on Slack and other applications.
69
+ description: |2
70
+ TChatter allows you to chat with your friends on your
71
+ terminal.
72
+ You can extend it further though to chat with your
73
+ friends on Slack and other applications."
74
+ Visit <a href='https://github.com/andela-oakinniranye/t_chatter'>TChatter's Homepage</a>
75
+ to read more on the application.
71
76
  email:
72
77
  - oreoluwa.akinniranye@andela.com
73
78
  executables:
@@ -90,17 +95,22 @@ files:
90
95
  - lib/t_chatter.rb
91
96
  - lib/t_chatter/chat.rb
92
97
  - lib/t_chatter/config_setup.rb
93
- - lib/t_chatter/start.rb
98
+ - lib/t_chatter/entry.rb
94
99
  - lib/t_chatter/version.rb
100
+ - t_chatter-0.1.0.gem
95
101
  - t_chatter.gemspec
96
- homepage: http://github.com/andela-oakinniranye/t_chatter
102
+ homepage: https://github.com/andela-oakinniranye/t_chatter
97
103
  licenses:
98
104
  - MIT
99
105
  metadata: {}
100
- post_install_message: |-
101
- Thanks for trying out my interesting gem.
102
- To complete the installation, run `setup_t_chatter` to create a .chatter.yml configuration file.
103
- This allows you to use your own url and set defaults for your version of TChatter
106
+ post_install_message: |2+
107
+
108
+ Thanks for trying out my interesting gem.
109
+ To complete the installation, run `setup_t_chatter` to
110
+ create a .chatter.yml configuration file.
111
+ This allows you to use your own url and set defaults
112
+ for your version of TChatter
113
+
104
114
  rdoc_options: []
105
115
  require_paths:
106
116
  - lib
@@ -119,5 +129,5 @@ rubyforge_project:
119
129
  rubygems_version: 2.4.8
120
130
  signing_key:
121
131
  specification_version: 4
122
- summary: Allows you to chat on your terminal
132
+ summary: Allows you to chat on your terminal|command line
123
133
  test_files: []
@@ -1,53 +0,0 @@
1
- module TChatter
2
- class Start
3
-
4
- def self.chat
5
- config = ConfigSetup.instance
6
- user = config.configuration[:user]
7
-
8
- # host = config[:host]
9
- unless user
10
- print "Would you mind telling me your name? > "
11
- user = gets.chomp
12
- end
13
-
14
- chat = Chat.new(user, config)
15
-
16
- want_to_receive = config.configuration.blank? ? true : config.configuration[:receive]
17
- want_to_send = config.configuration.blank? ? true : config.configuration[:send]
18
-
19
- threads = []
20
-
21
-
22
- if want_to_receive
23
- #response object
24
- threads << Thread.new do
25
- loop{
26
- chat.receive_message
27
- }
28
- end
29
- end
30
-
31
- if want_to_send
32
- #request object
33
- threads << Thread.new do
34
- loop{
35
- message = gets.chomp
36
- chat.send_message(message) if message
37
- }
38
- end
39
- end
40
-
41
- trap("INT") {
42
- puts "Exiting the chat"
43
- threads.each{|t|
44
- t.exit
45
- }
46
- }
47
-
48
- threads.each{ |thread|
49
- thread.join
50
- }
51
- end
52
- end
53
- end