lib/cogy.rb in cogy-0.3.0 vs lib/cogy.rb in cogy-0.4.0
- old
+ new
@@ -2,25 +2,22 @@
require "cogy/command"
require "cogy/context"
module Cogy
# The supported Cog bundle config version.
- #
- # @see http://docs.operable.io/docs/bundle-configs
COG_BUNDLE_VERSION = 4
# Holds all the registered {Command} objects. Not to be messed with.
@@commands = {}
mattr_accessor :commands
- # Configuration related to the Cog bundle. Used in {Cogy.bundle_config}
- # in order to generate the bundle config YAML.
+ # Configuration related to the Cog bundle. Used in {Cogy.bundle_config}.
#
# @see https://cog-book.operable.io/#_the_config_file
@@bundle = {
# The bundle name
- name: "cogy",
+ name: "myapp",
# The bundle description
description: "Cog commands generated from Cogy",
# The bundle version.
@@ -38,43 +35,35 @@
cogy_executable: "/usr/bin/cogy"
}
mattr_accessor :bundle
# The Cog templates. Used in {Cogy.bundle_config}.
- #
- # @see https://cog-book.operable.io/#_templates
@@templates = {}
mattr_accessor :templates
# Paths where the files that define the commands will be searched in the
# host application.
@@command_load_paths = ["cogy"]
mattr_accessor :command_load_paths
- # Registers a command to Cogy. All the options passed are used solely for
- # generating the bundle config (ie. {Cogy.bundle_config}). The passed block
- # is the code that will get executed when the command is invoked.
+ # Initializes a new {Command} and registers it. All the options passed are
+ # used when generating the bundle config in {Cogy.bundle_config}.
#
- # The last value of the block is what will get printed as the result of the
- # command. It should be a string. If you want to return early in a point
- # inside the block, use `next` instead of `return`.
+ # The given block is the code that will execute when the command is invoked.
+ # The return value of that block is what will get returned as a result
+ # back to Cog.
#
- # Inside the command block, there are the public attributes of {Context}
- # available.
+ # Inside the command block the public attributes of {Context} are
+ # available in addition to any user-defined handlers.
#
# @param cmd_name [String, Symbol] the name of the command. This is how the
# command will be invoked in the chat.
- # @param [Hash] opts the options to create the command with. All these options
+ # @param opts [Hash] the options to create the command with. All these options
# are used solely for generating the bundle config for Cog, thus they map
# directly to Cog's bundle config format.
# See https://cog-book.operable.io/#_the_config_file for more information.
- # @option opts [Array<Symbol, String>, Symbol, String] :args ([])
- # @option opts [Hash{Symbol=>Hash}] :opts ({})
- # @option opts [String] :desc required
- # @option opts [String] :long_desc (nil)
- # @option opts [String] :examples (nil)
- # @option opts [Array] :rules (["allow"])
+ # For documentation on what's supported right now see {Command#initialize}.
#
# @example
# Cogy.on "calc",
# args: [:a, :b],
# opts: { op: { description: "The operation to perform", type: "string", required: true } },
@@ -88,23 +77,22 @@
# rules: ["allow"] do
# result = args.map(&:to_i).inject(&opts["op"].to_sym)
# "Hello #{user}, the answer is: #{result}"
# end
#
- # @return [void]
+ # @return [Command] the created command
#
- # @note If you want to return early in a point inside a command block,
- # `next` should be used instead of `return`, due to the way Proc objects
- # work in Ruby.
+ # @note to return early inside a command block, `next` should be used instead
+ # of `return` due to the way Proc objects work in Ruby.
def self.on(cmd_name, opts = {}, &handler)
cmd = Command.new(cmd_name, handler, opts)
cmd.register!
end
# Generates the bundle config
#
- # @return [Hash]
+ # @return [Hash] the bundle config
def self.bundle_config
version = if bundle[:version].respond_to?(:call)
bundle[:version].call
else
bundle[:version]
@@ -159,24 +147,24 @@
yield self
end
# Defines a user helper method that can be used throughout commands.
#
- # @param [Symbol] name the name of the helper
- # @param [Proc] blk the helper body
+ # @param name [Symbol] the name of the helper
+ # @param blk [Proc] the helper body
#
# @return [void]
#
- # @note User helpers also have access to the default helpers like `user`, `env`
- # etc.
- #
# @example
# Cogy.configure do |c|
# helper(:user) { User.find_by(slack_handle: handle) }
#
# # a helper that accepts an argument
# helper(:format) { |answer| answer.titleize }
# end
+ #
+ # @note User helpers also have access to the default helpers like `user`, `env`
+ # etc.
def self.helper(name, &blk)
Context.class_eval { define_method(name, blk) }
end
end