Commit d1ba155

mo <mo.khan@gmail.com>
2018-05-11 23:41:14
fix rubocop errors.
1 parent 66e7be0
bin/console
@@ -1,4 +1,5 @@
 #!/usr/bin/env ruby
+# frozen_string_literal: true
 
 require 'bundler/setup'
 require 'del'
exe/del
@@ -1,4 +1,5 @@
 #!/usr/bin/env ruby
+# frozen_string_literal: true
 
 require 'del/cli'
 
lib/del/examples/routes.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 Del.configure do |x|
   puts 'Registering custom routes.'
 
lib/del/cli.rb
@@ -1,21 +1,23 @@
-require "del"
-require "pathname"
-require "thor"
+# frozen_string_literal: true
+
+require 'del'
+require 'pathname'
+require 'thor'
 
 module Del
   class CLI < Thor
-    DEFAULT_RC=Pathname.new(Dir.home).join(".delrc")
-    class_option :configuration_file, default: ENV.fetch("DELRC", DEFAULT_RC)
+    DEFAULT_RC = Pathname.new(Dir.home).join('.delrc')
+    class_option :configuration_file, default: ENV.fetch('DELRC', DEFAULT_RC)
     class_option :socket_file, default: Del::Configuration::SOCKET_FILE
-    class_option :log_level, default: ENV.fetch("LOG_LEVEL", Logger::INFO).to_i
+    class_option :log_level, default: ENV.fetch('LOG_LEVEL', Logger::INFO).to_i
 
-    desc "server <routes.rb>", "start server"
+    desc 'server <routes.rb>', 'start server'
     def server(startup_file = nil)
-      settings = YAML.load(IO.read(options[:configuration_file]))
-      settings.merge!(log_level: options[:log_level])
-      settings.merge!(socket_file: options[:socket_file])
-      settings.merge!(start_server: true)
-      settings.merge!(startup_file: startup_file)
+      settings = YAML.safe_load(IO.read(options[:configuration_file]))
+      settings[:log_level] = options[:log_level]
+      settings[:socket_file] = options[:socket_file]
+      settings[:start_server] = true
+      settings[:startup_file] = startup_file
 
       Del.start(settings)
     rescue Errno::ENOENT => error
@@ -23,53 +25,55 @@ module Del
       say "run 'del setup'", :yellow
     end
 
-    desc "console <config.rb>", "start read-eval-print-loop"
+    desc 'console <config.rb>', 'start read-eval-print-loop'
     def console(startup_file = nil)
-      require "irb"
+      require 'irb'
 
-      settings = YAML.load(IO.read(options[:configuration_file]))
-      settings.merge!(log_level: options[:log_level])
-      settings.merge!(socket_file: options[:socket_file])
-      settings.merge!(start_server: false)
-      settings.merge!(startup_file: startup_file)
+      settings = YAML.safe_load(IO.read(options[:configuration_file]))
+      settings[:log_level] = options[:log_level]
+      settings[:socket_file] = options[:socket_file]
+      settings[:start_server] = false
+      settings[:startup_file] = startup_file
 
       Del.start(settings)
       ARGV.clear
       IRB.start
     end
 
-    desc "message <jid> <message>", "send a message to the Jabber ID"
+    desc 'message <jid> <message>', 'send a message to the Jabber ID'
     def message(jid, message)
       socket = UNIXSocket.new(options[:socket_file])
-      socket.puts(JSON.generate(command: :send_message, jid: jid, message: message))
+      socket.puts(
+        JSON.generate(command: :send_message, jid: jid, message: message)
+      )
       say socket.readline, :green
     rescue EOFError => error
       say error.message, :red
     rescue Errno::ECONNREFUSED => error
       say error.message, :red
-      say "You must start the del server first.", :yellow
+      say 'You must start the del server first.', :yellow
     ensure
       socket&.close
     end
 
-    desc "setup", "setup your $HOME/.delrc"
+    desc 'setup', 'setup your $HOME/.delrc'
     def setup
       settings = {
         host: ask("Where is your xmpp server? (E.g. 'chat.hipchat.com')"),
-        jid: ask("What is your jabber Id?"),
+        jid: ask('What is your jabber Id?'),
         muc_domain: ask("What is your MUC domain? (E.g. 'conf.hipchat.com')"),
-        full_name: ask("What is your name?"),
-        password: ask("What is your password?", echo: false),
+        full_name: ask('What is your name?'),
+        password: ask('What is your password?', echo: false),
       }
 
-      say ""
-      say "Writing your configuration to: #{options[:configuration_file]}", :green
       yaml = YAML.dump(settings)
       IO.write(options[:configuration_file], yaml)
-      File.chmod(0600, options[:configuration_file])
+      File.chmod(0o600, options[:configuration_file])
+      say ''
+      say "Configuration saved to: #{options[:configuration_file]}", :green
     end
 
-    desc "version", "Print the version of this gem"
+    desc 'version', 'Print the version of this gem'
     def version
       say Del::VERSION, :green
     end
lib/del/configuration.rb
@@ -1,17 +1,19 @@
+# frozen_string_literal: true
+
 module Del
+  # This is used to contain all configuration.
   class Configuration
-    SOCKET_FILE = '/tmp/del.sock'.freeze
+    SOCKET_FILE = '/tmp/del.sock'
     attr_accessor :default_rooms
     attr_accessor :host
     attr_accessor :jid
-    attr_accessor :jid
     attr_accessor :logger
     attr_accessor :muc_domain
     attr_accessor :name
     attr_accessor :password
     attr_accessor :router
-    attr_accessor :users
     attr_accessor :socket_file
+    attr_accessor :users
 
     def initialize(settings = {})
       @default_rooms = settings.fetch(:rooms, [])
lib/del/connection.rb
@@ -1,4 +1,7 @@
+# frozen_string_literal: true
+
 module Del
+  # An XMPP Connection
   class Connection
     attr_reader :configuration
 
@@ -55,7 +58,7 @@ module Del
 
     def deliver_to_room(jid, message)
       muc = @mucs[jid.strip.to_s]
-      muc.say(encode_string(message)) if muc
+      muc&.say(encode_string(message))
     end
 
     def disconnect
@@ -75,14 +78,15 @@ module Del
       @jid ||= jid_for(configuration.jid, 'chat.hipchat.com', 'bot')
     end
 
-    # def list_rooms(muc_domain)
-    # Jabber::MUC::MUCBrowser.new(client).muc_rooms(muc_domain).map do |jid, name|
-    # jid.to_s
-    # end
-    # end
+    def list_rooms(muc_domain)
+      browser = Jabber::MUC::MUCBrowser.new(client)
+      browser.muc_rooms(muc_domain).map do |jid, _name|
+        jid.to_s
+      end
+    end
 
-    def encode_string(s)
-      s.to_s.encode('UTF-8', invalid: :replace, undef: :replace)
+    def encode_string(item)
+      item.to_s.encode('UTF-8', invalid: :replace, undef: :replace)
     end
 
     def jid_for(jid, domain, resource)
lib/del/default_router.rb
@@ -1,4 +1,8 @@
+# frozen_string_literal: true
+
 module Del
+  # This class is the default router used
+  # to route chat messages to chat routes.
   class DefaultRouter
     def initialize(routes = [])
       @routes = routes
@@ -10,7 +14,7 @@ module Del
 
     def route(message)
       @routes.each do |route|
-        next unless matches = route[:pattern].match(message.text)
+        next unless (matches = route[:pattern].match(message.text))
         begin
           route[:command].call(message, matches)
         rescue StandardError => error
lib/del/message.rb
@@ -1,6 +1,9 @@
+# frozen_string_literal: true
+
 module Del
+  # An XMPP Message
   class Message
-    PREFIX = '/code'.freeze
+    PREFIX = '/code'
     attr_reader :text, :robot, :source
 
     def initialize(text, robot:, source:)
lib/del/repository.rb
@@ -1,4 +1,7 @@
+# frozen_string_literal: true
+
 module Del
+  # This class is a facade for backend data storage.
   class Repository
     def initialize(storage: {}, mapper:)
       @storage = storage
lib/del/robot.rb
@@ -1,4 +1,7 @@
+# frozen_string_literal: true
+
 module Del
+  # A funky robo-sapien.
   class Robot
     attr_reader :jid, :name
 
@@ -18,7 +21,9 @@ module Del
 
     def receive(message, source:)
       return if source.from?(self)
-      configuration.router.route(Message.new(message, robot: self, source: source))
+      configuration.router.route(
+        Message.new(message, robot: self, source: source)
+      )
     end
 
     def send_message(jid, message)
@@ -48,7 +53,8 @@ module Del
     end
 
     def socket_server
-      @socket_server ||= SocketServer.new(socket_file: configuration.socket_file)
+      @socket_server ||=
+        SocketServer.new(socket_file: configuration.socket_file)
     end
 
     def user?(jid)
lib/del/shell_command.rb
@@ -1,4 +1,8 @@
+# frozen_string_literal: true
+
 module Del
+  # Executes shell commands and pipes the
+  # results back to the caller.
   class ShellCommand
     def initialize(command)
       @command = Array(command).flatten.join(' ')
lib/del/socket_connection.rb
@@ -1,14 +1,16 @@
+# frozen_string_literal: true
+
 module Del
   class SocketConnection
     def initialize(path:)
-      File.unlink(path) if File.exists?(path)
+      File.unlink(path) if File.exist?(path)
       @server = UNIXServer.new(path)
     end
 
     def on_receive
       socket = @server.accept
       yield socket
-    rescue => error
+    rescue StandardError => error
       Del.logger.error(error)
     ensure
       socket&.close
lib/del/socket_server.rb
@@ -1,4 +1,8 @@
+# frozen_string_literal: true
+
 module Del
+  # A Socket server for client/server communication
+  # overs a UNIX socket.
   class SocketServer
     def initialize(socket_file:)
       @connection = SocketConnection.new(path: socket_file)
lib/del/source.rb
@@ -1,4 +1,7 @@
+# frozen_string_literal: true
+
 module Del
+  # This represents the source of a chat message.
   class Source
     attr_reader :user, :room
 
lib/del/user.rb
@@ -1,4 +1,7 @@
+# frozen_string_literal: true
+
 module Del
+  # An XMPP user.
   class User
     attr_reader :jid, :attributes
 
lib/del/version.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Del
-  VERSION = '0.1.16'.freeze
+  VERSION = '0.1.16'
 end
lib/del.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'json'
 require 'logger'
 require 'net/hippie'
@@ -22,6 +24,7 @@ require 'del/source'
 require 'del/user'
 require 'del/version'
 
+# Del the funky robosapien.
 module Del
   def self.start(settings)
     @configuration = Configuration.new(settings)
spec/default_router_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 RSpec.describe Del::DefaultRouter do
   subject { described_class.new }
 
spec/del_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 RSpec.describe Del do
   specify { expect(Del::VERSION).not_to be(nil) }
 end
spec/message_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 RSpec.describe Del::Message do
spec/repository_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 RSpec.describe Del::Repository do
spec/spec_helper.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'bundler/setup'
 require 'del'
 
spec/user_spec.rb
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 RSpec.describe Del::User do
.rubocop.yml
@@ -0,0 +1,41 @@
+AllCops:
+  Exclude:
+    - 'coverage/**/*'
+    - 'pkg/**/*'
+    - 'spec/**/*'
+    - 'tmp/**/*'
+    - 'vendor/**/*'
+  TargetRubyVersion: 2.5
+
+Layout/ClassStructure:
+  Enabled: true
+  Categories:
+    module_inclusion:
+      - include
+      - prepend
+      - extend
+  ExpectedOrder:
+      - module_inclusion
+      - constants
+      - public_class_methods
+      - initializer
+      - instance_methods
+      - protected_methods
+      - private_methods
+
+Layout/EndOfLine:
+  EnforcedStyle: lf
+
+Layout/IndentArray:
+  EnforcedStyle: consistent
+
+Layout/IndentHeredoc:
+  EnforcedStyle: active_support
+
+Metrics/BlockLength:
+  Exclude:
+    - '*.gemspec'
+    - 'Rakefile'
+
+Style/Documentation:
+  Enabled: false
del.gemspec
@@ -1,4 +1,6 @@
 
+# frozen_string_literal: true
+
 lib = File.expand_path('lib', __dir__)
 $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
 require 'del/version'
@@ -20,6 +22,7 @@ Gem::Specification.new do |spec|
   spec.bindir        = 'exe'
   spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
   spec.require_paths = ['lib']
+  spec.required_ruby_version = '>= 2.5.0'
 
   spec.add_dependency 'bundler-audit', '~> 0.6'
   spec.add_dependency 'net-hippie', '~> 0.1'
Gemfile
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source 'https://rubygems.org'
 
 git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }