blur 2.1.3 → 2.1.6

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: 8e3a0bf486ae6b8b30c925220195462b412e23bd62e767e2996c698273d5bf18
4
- data.tar.gz: 733539cbd3f671eb799f541523031ca42303184db7866b5113058486c664c95a
3
+ metadata.gz: 6c4add65cc3b256a41629f69bb62065d523f60a5cd934d8b4c1045b326113ce6
4
+ data.tar.gz: f55fbec4a5863465d61f110ceeb1fe3b7f89d6a6d9fc659ac30907ef7921e510
5
5
  SHA512:
6
- metadata.gz: 8517510ecd51f045b995fcd42d00d1da7587d7fb2f36911e59bc6ed9f2478e7076b2bcdfca1290001e276392f3ad63dc9829fb90a0b67432e1223ca4bde5e48f
7
- data.tar.gz: 0bac6a2de2bc5d1d8294ba2d9342ffde0d39fedc40b318d73a5c5e187c1de298ad371a94bf4c67bd6433ee7ba896d24cd945408c869d3c4a4149a289b54ac6fd
6
+ metadata.gz: 05bc91b4a941bfe212e42d9a0c56d6e7969aa01e9cde2fa86946dc0f24244b462de299683d06875e2ea3bdad7e32280afd869cac6874d0fd7ef1f3d9bfa10d63
7
+ data.tar.gz: 9ca64c3952d10ccb6c9dce8a51723da4b81643b46d2090aa72b72886965d8973da540a6b9da477254493baf99d1ad2174b7c5129557f963fb08db892ce42a632
data/executables/blur CHANGED
@@ -1,21 +1,20 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: utf-8
2
+ # frozen_string_literal: true
3
3
 
4
- $:.unshift File.join __dir__, '../library'
4
+ require_relative '../library/blur'
5
5
 
6
6
  require 'optparse'
7
7
 
8
8
  options = {
9
9
  verbose: false,
10
- environment: 'development',
11
10
  config_path: 'config.yml'
12
11
  }
13
12
 
14
13
  OptionParser.new do |opts|
15
- opts.banner = "Usage: #$0 [-c <config>] [-e <env>]"
14
+ opts.banner = "Usage: #{$PROGRAM_NAME} [-c <config>] [-e <env>]"
16
15
 
17
- opts.separator ""
18
- opts.separator "Specific options:"
16
+ opts.separator ''
17
+ opts.separator 'Specific options:'
19
18
 
20
19
  opts.on '-v', '--[no-]verbose', 'Enable verbose logging' do |verbose|
21
20
  options[:verbose] = verbose
@@ -41,22 +40,24 @@ end.parse!
41
40
 
42
41
  begin
43
42
  require 'blur'
44
- rescue LoadError => exception
43
+ rescue LoadError => e
45
44
  puts 'Ruby was unable to load the blur library!'
46
45
  puts
47
46
  puts "Please ensure that you've installed it using the following command:"
48
47
  puts 'gem install blur'
49
- raise exception
50
- exit 1
48
+ raise e
51
49
  end
52
50
 
51
+ puts "Blur #{Blur.version}"
52
+
53
53
  config_path = File.expand_path options[:config_path]
54
- unless File.readable? config_path
55
- fail "Configuration file `#{config_path}' is not readable"
56
- exit 1
57
- end
54
+ puts "Loading configuration file `#{config_path}' .."
58
55
 
59
- @client = Blur::Client.new options
60
- @client.connect
56
+ raise "Configuration file `#{config_path}' is not readable" unless File.readable? config_path
57
+
58
+ EM.run do
59
+ @client = Blur::Client.new options
60
+ @client.connect
61
+ end
61
62
 
62
63
  # vim: syntax=ruby
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Blur
4
4
  module Callbacks
@@ -16,14 +16,12 @@ module Blur
16
16
  # @return [true, false] True if any callbacks were invoked, nil otherwise
17
17
  def emit name, *args
18
18
  # Trigger callbacks in scripts before triggering events in the client.
19
- EM.defer { notify_scripts name, *args }
19
+ notify_scripts name, *args
20
20
 
21
21
  matching_callbacks = callbacks[name]
22
22
  return false unless matching_callbacks&.any?
23
23
 
24
- EM.defer do
25
- matching_callbacks.each { |callback| callback.call *args }
26
- end
24
+ matching_callbacks.each { |callback| callback.call *args }
27
25
  end
28
26
 
29
27
  # Add a new event callback.
@@ -37,20 +35,18 @@ module Blur
37
35
  protected
38
36
 
39
37
  def notify_scripts name, *args
40
- scripts = @scripts.values.select{|script| script.class.events.key? name }
38
+ scripts = @scripts.values.select { |script| script.class.events.key? name }
41
39
  scripts.each do |script|
42
- begin
43
- script.class.events[name].each do |method|
44
- if method.is_a? Proc
45
- method.call script, *args
46
- else
47
- script.__send__ method, *args
48
- end
40
+ script.class.events[name].each do |method|
41
+ if method.is_a? Proc
42
+ method.call script, *args
43
+ else
44
+ script.__send__ method, *args
49
45
  end
50
- rescue => exception
51
- STDERR.puts "#{exception.class}: #{exception.message}"
52
- STDERR.puts nil, 'Backtrace:', '---', exception.backtrace
53
46
  end
47
+ rescue StandardError => e
48
+ warn "#{e.class}: #{e.message}"
49
+ warn nil, 'Backtrace:', '---', e.backtrace
54
50
  end
55
51
  end
56
52
  end
@@ -1,11 +1,11 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Blur
4
4
  # The +Channel+ class is used for encapsulating a channel and its properties.
5
5
  #
6
6
  # Users inside the channel is stored in the {#channels} attribute.
7
7
  #
8
- # Modes can be set for a channel, but Blur is not
8
+ # Modes can be set for a channel, but Blur is not
9
9
  # {http://www.irc.org/tech_docs/005.html ISupport}-compliant yet.
10
10
  #
11
11
  # @todo make so that channels *and* users belongs to the network, and not
@@ -26,8 +26,8 @@ module Blur
26
26
  # Instantiate a user with a nickname, a network and a user list.
27
27
  def initialize name, network = nil
28
28
  @name = name
29
- @users = []
30
- @modes = String.new
29
+ @users = []
30
+ @modes = ''
31
31
  @network = network
32
32
  end
33
33
 
@@ -39,9 +39,9 @@ module Blur
39
39
 
40
40
  modes.each_char do |char|
41
41
  case char
42
- when ?+
42
+ when '+'
43
43
  addition = true
44
- when ?-
44
+ when '-'
45
45
  addition = false
46
46
  else
47
47
  addition ? @modes.concat(char) : @modes.delete!(char)
@@ -58,9 +58,12 @@ module Blur
58
58
 
59
59
  # Convert it to a debug-friendly format.
60
60
  def inspect
61
- %{#<#{self.class.name}:0x#{self.object_id.to_s 16} @name=#{@name.inspect} @topic=#{@topic.inspect} @users=#{@users.inspect}}
61
+ "#<#{self.class.name}:0x#{object_id.to_s 16} " \
62
+ "@name=#{@name.inspect} " \
63
+ "@topic=#{@topic.inspect} " \
64
+ "@users=#{@users.inspect}>"
62
65
  end
63
-
66
+
64
67
  # Called when YAML attempts to save the object, which happens when a
65
68
  # scripts cache contains this user and the script is unloaded.
66
69
  def to_yaml options = {}
@@ -1,6 +1,6 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
- require 'blur/handling'
3
+ require_relative './handling'
4
4
 
5
5
  module Blur
6
6
  # The +Client+ class is the controller of the low-level access.
@@ -10,13 +10,9 @@ module Blur
10
10
  class Client
11
11
  include Callbacks
12
12
  include Handling
13
- include Logging
14
-
15
- # Client error.
16
- Error = Class.new StandardError
17
13
 
18
14
  # The default environment.
19
- ENVIRONMENT = ENV['BLUR_ENV'] || 'development'.freeze
15
+ ENVIRONMENT = ENV['BLUR_ENV'] || 'development'
20
16
 
21
17
  # The default configuration.
22
18
  DEFAULT_CONFIG = {
@@ -25,9 +21,9 @@ module Blur
25
21
  'scripts_dir' => 'scripts/',
26
22
  'networks' => []
27
23
  },
28
- 'scripts' => {},
24
+ 'scripts' => {}
29
25
  }.freeze
30
-
26
+
31
27
  # @return [Array] a list of instantiated networks.
32
28
  attr_accessor :networks
33
29
  # @return [Hash] client configuration.
@@ -49,12 +45,10 @@ module Blur
49
45
  @scripts = {}
50
46
  @networks = []
51
47
  @config_path = options[:config_path]
52
- @environment = options[:environment]
48
+ @environment = options[:environment] || ENVIRONMENT
53
49
  @verbose = options[:verbose] == true
54
50
 
55
- unless @config_path
56
- raise ConfigError, 'missing config file path in :config_path option'
57
- end
51
+ raise ConfigError, 'missing config file path in :config_path option' unless @config_path
58
52
 
59
53
  load_config!
60
54
 
@@ -68,23 +62,25 @@ module Blur
68
62
 
69
63
  trap 2, &method(:quit)
70
64
  end
71
-
65
+
72
66
  # Connect to each network available that is not already connected, then
73
67
  # proceed to start the run-loop.
74
68
  def connect
75
69
  networks = @networks.reject &:connected?
76
-
77
- EventMachine.run do
78
- load_scripts!
79
- networks.each &:connect
80
70
 
81
- EventMachine.error_handler do |exception|
82
- log.error "#{exception.message ^ :bold} on line #{exception.line.to_s ^ :bold}"
83
- puts exception.backtrace.join "\n"
84
- end
71
+ load_scripts!
72
+ networks.each &:connect
73
+
74
+ EventMachine.error_handler do |exception|
75
+ message_pattern = /^.*?:(\d+):/
76
+ backtrace = exception.backtrace.first
77
+ error_line = backtrace.match(message_pattern)[1].to_i + 1
78
+
79
+ puts "#{exception.message} on line #{error_line.to_s}"
80
+ puts exception.backtrace.join "\n"
85
81
  end
86
82
  end
87
-
83
+
88
84
  # Is called when a command have been received and parsed, this distributes
89
85
  # the command to the loader, which then further distributes it to events
90
86
  # and scripts.
@@ -92,26 +88,23 @@ module Blur
92
88
  # @param [Network] network the network that received the command.
93
89
  # @param [Network::Command] command the received command.
94
90
  def got_message network, message
95
- if @verbose
96
- log "#{'←' ^ :green} #{message.command.to_s.ljust(8, ' ') ^ :light_gray} #{message.parameters.map(&:inspect).join ' '}"
97
- end
91
+ puts "← #{message.command.to_s.ljust(8, ' ')} #{message.parameters.map(&:inspect).join ' '}" if @verbose
92
+
98
93
  name = :"got_#{message.command.downcase}"
99
94
 
100
- if respond_to? name
101
- __send__ name, network, message
102
- end
95
+ __send__ name, network, message if respond_to? name
103
96
  end
104
-
97
+
105
98
  # Called when a network connection is either closed, or terminated.
106
99
  def network_connection_closed network
107
100
  emit :connection_close, network
108
101
  end
109
-
102
+
110
103
  # Try to gracefully disconnect from each network, unload all scripts and
111
104
  # exit properly.
112
105
  #
113
106
  # @param [optional, Symbol] signal The signal received by the system, if any.
114
- def quit signal = :SIGINT
107
+ def quit _signal = :SIGINT
115
108
  @networks.each do |network|
116
109
  network.transmit :QUIT, 'Got SIGINT?'
117
110
  network.disconnect
@@ -161,11 +154,11 @@ module Blur
161
154
  # @raise [Exception] if there was any problems loading the file
162
155
  def load_script_file file_path
163
156
  load file_path, true
164
- rescue Exception => exception
157
+ rescue Exception => e
165
158
  warn "The script `#{file_path}' failed to load"
166
- warn "#{exception.class}: #{exception.message}"
159
+ warn "#{e.class}: #{e.message}"
167
160
  warn ''
168
- warn 'Backtrace:', '---', exception.backtrace
161
+ warn 'Backtrace:', '---', e.backtrace
169
162
  end
170
163
 
171
164
  # Instantiates each +SuperScript+ in the +Blur.scripts+ list by manually
@@ -194,7 +187,7 @@ module Blur
194
187
  # This method will call #unloaded on the instance of each loaded script to
195
188
  # give it a chance to clean up any resources.
196
189
  def unload_scripts!
197
- @scripts.each do |name, script|
190
+ @scripts.each do |_name, script|
198
191
  script.__send__ :unloaded if script.respond_to? :unloaded
199
192
  end.clear
200
193
 
@@ -209,14 +202,14 @@ module Blur
209
202
  def load_config!
210
203
  config = YAML.load_file @config_path
211
204
 
212
- if config.key? @environment
213
- @config = config[@environment]
214
- @config.deeper_merge! DEFAULT_CONFIG
215
-
216
- emit :config_load
217
- else
218
- raise Error, "No configuration found for specified environment `#{@environment}'"
205
+ unless config.key? @environment
206
+ raise ClientError, "No configuration found for specified environment `#{@environment}'"
219
207
  end
208
+
209
+ @config = config[@environment]
210
+ @config.deeper_merge! DEFAULT_CONFIG
211
+
212
+ emit :config_load
220
213
  end
221
214
  end
222
215
  end