ellen 0.1.0 → 0.1.1
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 +4 -4
- data/CHANGELOG.md +3 -0
- data/lib/ellen.rb +8 -6
- data/lib/ellen/adapters/base.rb +3 -18
- data/lib/ellen/adapters/shell.rb +21 -18
- data/lib/ellen/brains/base.rb +4 -2
- data/lib/ellen/brains/null.rb +2 -1
- data/lib/ellen/env.rb +0 -3
- data/lib/ellen/env/missing_required_key_error.rb +6 -0
- data/lib/ellen/env/validatable.rb +27 -0
- data/lib/ellen/handlers/help.rb +3 -6
- data/lib/ellen/robot.rb +4 -4
- data/lib/ellen/version.rb +1 -1
- data/spec/ellen/adapter_builder_spec.rb +1 -5
- data/spec/ellen/adapters/shell_spec.rb +56 -0
- data/spec/ellen/handlers/help_spec.rb +14 -0
- data/spec/ellen/handlers/ping_spec.rb +20 -0
- metadata +11 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 96e3c30b37c53dec2a1f1b781a9bbb8d21dbcb4b
         | 
| 4 | 
            +
              data.tar.gz: ae06dedaad859870eb47f91bc121ce94bbf5e040
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: d6daf3ce130b28062a9f998b5a930f1699210f913d0786f93116dcd8594d48462a7cfd0ea754647232de3b0dda202439c19037229e0b45bffa35b8c9667511fe
         | 
| 7 | 
            +
              data.tar.gz: cba65d6007a7d5fb66d970ce99914ecf93a9ebaea6254c8414a6e511ec2605dbdee15ea49c71083b0dcaa37e3e32909a7ecbbdbe445622de9a96de7a286f4adf
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/lib/ellen.rb
    CHANGED
    
    | @@ -1,3 +1,4 @@ | |
| 1 | 
            +
            require "active_support/concern"
         | 
| 1 2 | 
             
            require "active_support/core_ext/module/delegation"
         | 
| 2 3 | 
             
            require "active_support/core_ext/string/inflections"
         | 
| 3 4 | 
             
            require "bundler"
         | 
| @@ -18,20 +19,22 @@ module Ellen | |
| 18 19 | 
             
                  exit(1)
         | 
| 19 20 | 
             
                end
         | 
| 20 21 |  | 
| 21 | 
            -
                def adapters
         | 
| 22 | 
            -
                  {}
         | 
| 23 | 
            -
                end
         | 
| 24 | 
            -
                memoize :adapters
         | 
| 25 | 
            -
             | 
| 26 22 | 
             
                def handlers
         | 
| 27 23 | 
             
                  []
         | 
| 28 24 | 
             
                end
         | 
| 29 25 | 
             
                memoize :handlers
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                def actions
         | 
| 28 | 
            +
                  handlers.map(&:actions).flatten.sort_by(&:all?)
         | 
| 29 | 
            +
                end
         | 
| 30 30 | 
             
              end
         | 
| 31 31 | 
             
            end
         | 
| 32 32 |  | 
| 33 33 | 
             
            require "ellen/action"
         | 
| 34 34 | 
             
            require "ellen/adapter_builder"
         | 
| 35 | 
            +
            require "ellen/env"
         | 
| 36 | 
            +
            require "ellen/env/missing_required_key_error"
         | 
| 37 | 
            +
            require "ellen/env/validatable"
         | 
| 35 38 | 
             
            require "ellen/adapters/base"
         | 
| 36 39 | 
             
            require "ellen/adapters/shell"
         | 
| 37 40 | 
             
            require "ellen/brains/base"
         | 
| @@ -40,7 +43,6 @@ require "ellen/command_builder" | |
| 40 43 | 
             
            require "ellen/commands/base"
         | 
| 41 44 | 
             
            require "ellen/commands/generate"
         | 
| 42 45 | 
             
            require "ellen/commands/run"
         | 
| 43 | 
            -
            require "ellen/env"
         | 
| 44 46 | 
             
            require "ellen/handlers/base"
         | 
| 45 47 | 
             
            require "ellen/handlers/help"
         | 
| 46 48 | 
             
            require "ellen/handlers/ping"
         | 
    
        data/lib/ellen/adapters/base.rb
    CHANGED
    
    | @@ -12,39 +12,24 @@ | |
| 12 12 | 
             
            module Ellen
         | 
| 13 13 | 
             
              module Adapters
         | 
| 14 14 | 
             
                class Base
         | 
| 15 | 
            +
                  include Env::Validatable
         | 
| 16 | 
            +
             | 
| 15 17 | 
             
                  class << self
         | 
| 16 18 | 
             
                    def inherited(child_class)
         | 
| 17 19 | 
             
                      Ellen::AdapterBuilder.adapter_classes << child_class
         | 
| 18 20 | 
             
                    end
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                    def env(key, description, options = {})
         | 
| 21 | 
            -
                      envs << Env.new(key, description, options)
         | 
| 22 | 
            -
                    end
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                    def envs
         | 
| 25 | 
            -
                      @envs ||= []
         | 
| 26 | 
            -
                    end
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                    def usage
         | 
| 29 | 
            -
                      envs.map(&:to_usage).join("\n")
         | 
| 30 | 
            -
                    end
         | 
| 31 21 | 
             
                  end
         | 
| 32 22 |  | 
| 33 23 | 
             
                  attr_reader :robot
         | 
| 34 24 |  | 
| 35 25 | 
             
                  def initialize(robot)
         | 
| 36 26 | 
             
                    @robot = robot
         | 
| 27 | 
            +
                    validate
         | 
| 37 28 | 
             
                  end
         | 
| 38 29 |  | 
| 39 30 | 
             
                  def say(body, options = {})
         | 
| 40 31 | 
             
                    Ellen.logger.info("Not implemented #{self.class}##{__method__} was called")
         | 
| 41 32 | 
             
                  end
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                  def validate
         | 
| 44 | 
            -
                    self.class.envs.each(&:validate)
         | 
| 45 | 
            -
                  rescue Env::MissingRequiredKeyError => exception
         | 
| 46 | 
            -
                    Ellen.die("#{exception}\n#{self.class.usage}")
         | 
| 47 | 
            -
                  end
         | 
| 48 33 | 
             
                end
         | 
| 49 34 | 
             
              end
         | 
| 50 35 | 
             
            end
         | 
    
        data/lib/ellen/adapters/shell.rb
    CHANGED
    
    | @@ -3,51 +3,54 @@ require "readline" | |
| 3 3 | 
             
            module Ellen
         | 
| 4 4 | 
             
              module Adapters
         | 
| 5 5 | 
             
                class Shell < Base
         | 
| 6 | 
            +
                  PROMPT = "> "
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  SOURCE = "shell"
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  USAGE = "Type `exit` or `quit` to end the session."
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  attr_accessor :stopped
         | 
| 13 | 
            +
             | 
| 6 14 | 
             
                  def run
         | 
| 7 15 | 
             
                    explain
         | 
| 8 16 | 
             
                    listen
         | 
| 9 17 | 
             
                  end
         | 
| 10 18 |  | 
| 11 19 | 
             
                  def say(body, options = {})
         | 
| 12 | 
            -
                     | 
| 20 | 
            +
                    Ellen.logger.info(body)
         | 
| 13 21 | 
             
                  end
         | 
| 14 22 |  | 
| 15 23 | 
             
                  private
         | 
| 16 24 |  | 
| 17 25 | 
             
                  def explain
         | 
| 18 | 
            -
                     | 
| 19 | 
            -
                  end
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                  def prompt
         | 
| 22 | 
            -
                    @prompt ||= "> "
         | 
| 23 | 
            -
                  end
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                  def prompt=(str)
         | 
| 26 | 
            -
                    @prompt = str
         | 
| 26 | 
            +
                    Ellen.logger.info(USAGE)
         | 
| 27 27 | 
             
                  end
         | 
| 28 28 |  | 
| 29 29 | 
             
                  def read
         | 
| 30 | 
            -
                    Readline.readline( | 
| 30 | 
            +
                    Readline.readline(PROMPT, true)
         | 
| 31 31 | 
             
                  end
         | 
| 32 32 |  | 
| 33 33 | 
             
                  def listen
         | 
| 34 | 
            -
                     | 
| 34 | 
            +
                    step until stopped?
         | 
| 35 35 | 
             
                  rescue Interrupt
         | 
| 36 | 
            -
                     | 
| 36 | 
            +
                    stop
         | 
| 37 37 | 
             
                  end
         | 
| 38 38 |  | 
| 39 39 | 
             
                  def step
         | 
| 40 | 
            -
                    prompt
         | 
| 41 40 | 
             
                    case body = read
         | 
| 42 41 | 
             
                    when "exit", "quit"
         | 
| 43 | 
            -
                       | 
| 42 | 
            +
                      stop
         | 
| 44 43 | 
             
                    else
         | 
| 45 | 
            -
                      robot.receive(body: body, source:  | 
| 44 | 
            +
                      robot.receive(body: body, source: SOURCE)
         | 
| 46 45 | 
             
                    end
         | 
| 47 46 | 
             
                  end
         | 
| 48 47 |  | 
| 49 | 
            -
                  def  | 
| 50 | 
            -
                     | 
| 48 | 
            +
                  def stopped?
         | 
| 49 | 
            +
                    !!stopped
         | 
| 50 | 
            +
                  end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                  def stop
         | 
| 53 | 
            +
                    self.stopped = true
         | 
| 51 54 | 
             
                  end
         | 
| 52 55 | 
             
                end
         | 
| 53 56 | 
             
              end
         | 
    
        data/lib/ellen/brains/base.rb
    CHANGED
    
    | @@ -1,6 +1,8 @@ | |
| 1 1 | 
             
            module Ellen
         | 
| 2 2 | 
             
              module Brains
         | 
| 3 3 | 
             
                class Base
         | 
| 4 | 
            +
                  include Env::Validatable
         | 
| 5 | 
            +
             | 
| 4 6 | 
             
                  class << self
         | 
| 5 7 | 
             
                    def inherited(child)
         | 
| 6 8 | 
             
                      brain_classes << child
         | 
| @@ -17,8 +19,8 @@ module Ellen | |
| 17 19 | 
             
                    end
         | 
| 18 20 | 
             
                  end
         | 
| 19 21 |  | 
| 20 | 
            -
                  def  | 
| 21 | 
            -
                     | 
| 22 | 
            +
                  def initialize
         | 
| 23 | 
            +
                    validate
         | 
| 22 24 | 
             
                  end
         | 
| 23 25 | 
             
                end
         | 
| 24 26 | 
             
              end
         | 
    
        data/lib/ellen/brains/null.rb
    CHANGED
    
    
    
        data/lib/ellen/env.rb
    CHANGED
    
    
| @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            module Ellen
         | 
| 2 | 
            +
              class Env
         | 
| 3 | 
            +
                module Validatable
         | 
| 4 | 
            +
                  extend ActiveSupport::Concern
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                  module ClassMethods
         | 
| 7 | 
            +
                    def envs
         | 
| 8 | 
            +
                      @envs ||= []
         | 
| 9 | 
            +
                    end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    def env(key, description, options = {})
         | 
| 12 | 
            +
                      envs << Env.new(key, description, options)
         | 
| 13 | 
            +
                    end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    def usage
         | 
| 16 | 
            +
                      envs.map(&:to_usage).join("\n")
         | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  def validate
         | 
| 21 | 
            +
                    self.class.envs.each(&:validate)
         | 
| 22 | 
            +
                  rescue MissingRequiredKeyError => exception
         | 
| 23 | 
            +
                    Ellen.die("#{exception}\n#{self.class.usage}")
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
            end
         | 
    
        data/lib/ellen/handlers/help.rb
    CHANGED
    
    | @@ -4,12 +4,9 @@ module Ellen | |
| 4 4 | 
             
                  on /help\z/i, name: "help", description: "Show this help message"
         | 
| 5 5 |  | 
| 6 6 | 
             
                  def help(message)
         | 
| 7 | 
            -
                     | 
| 8 | 
            -
                       | 
| 9 | 
            -
             | 
| 10 | 
            -
                      line
         | 
| 11 | 
            -
                    end
         | 
| 12 | 
            -
                    robot.say lines.join("\n")
         | 
| 7 | 
            +
                    robot.say Ellen.actions.map {|action|
         | 
| 8 | 
            +
                      "%-30s - #{action.description}" % "#{robot.name unless action.all?} #{action.pattern.inspect}"
         | 
| 9 | 
            +
                    }.join("\n")
         | 
| 13 10 | 
             
                  end
         | 
| 14 11 | 
             
                end
         | 
| 15 12 | 
             
              end
         | 
    
        data/lib/ellen/robot.rb
    CHANGED
    
    | @@ -8,7 +8,7 @@ module Ellen | |
| 8 8 |  | 
| 9 9 | 
             
                attr_reader :options
         | 
| 10 10 |  | 
| 11 | 
            -
                def initialize(options)
         | 
| 11 | 
            +
                def initialize(options = {})
         | 
| 12 12 | 
             
                  @options = options
         | 
| 13 13 | 
             
                end
         | 
| 14 14 |  | 
| @@ -16,7 +16,7 @@ module Ellen | |
| 16 16 | 
             
                  dotenv
         | 
| 17 17 | 
             
                  bundle
         | 
| 18 18 | 
             
                  setup
         | 
| 19 | 
            -
                   | 
| 19 | 
            +
                  remember
         | 
| 20 20 | 
             
                  adapt
         | 
| 21 21 | 
             
                end
         | 
| 22 22 |  | 
| @@ -64,8 +64,8 @@ module Ellen | |
| 64 64 | 
             
                end
         | 
| 65 65 | 
             
                memoize :handlers
         | 
| 66 66 |  | 
| 67 | 
            -
                def  | 
| 68 | 
            -
                   | 
| 67 | 
            +
                def remember
         | 
| 68 | 
            +
                  brain
         | 
| 69 69 | 
             
                end
         | 
| 70 70 | 
             
              end
         | 
| 71 71 | 
             
            end
         | 
    
        data/lib/ellen/version.rb
    CHANGED
    
    
| @@ -0,0 +1,56 @@ | |
| 1 | 
            +
            require "spec_helper"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Ellen::Adapters::Shell do
         | 
| 4 | 
            +
              before do
         | 
| 5 | 
            +
                Ellen.logger.stub(:info)
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              let(:adapter) do
         | 
| 9 | 
            +
                described_class.new(robot)
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              let(:robot) do
         | 
| 13 | 
            +
                Ellen::Robot.new
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              describe "#run" do
         | 
| 17 | 
            +
                context "with `exit`" do
         | 
| 18 | 
            +
                  it "stops" do
         | 
| 19 | 
            +
                    Readline.stub(readline: "exit")
         | 
| 20 | 
            +
                    adapter.should_receive(:stop).and_call_original
         | 
| 21 | 
            +
                    adapter.run
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                context "with `quit`" do
         | 
| 26 | 
            +
                  it "stops" do
         | 
| 27 | 
            +
                    Readline.stub(readline: "exit")
         | 
| 28 | 
            +
                    adapter.should_receive(:stop).and_call_original
         | 
| 29 | 
            +
                    adapter.run
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                context "with Inturrupt from console" do
         | 
| 34 | 
            +
                  it "stops" do
         | 
| 35 | 
            +
                    Readline.stub(:readline).and_raise(Interrupt)
         | 
| 36 | 
            +
                    adapter.should_receive(:stop).and_call_original
         | 
| 37 | 
            +
                    adapter.run
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                context "without `exit` nor `quit`" do
         | 
| 42 | 
            +
                  it "passes given message to robot" do
         | 
| 43 | 
            +
                    Readline.stub(:readline).and_return("a", "exit")
         | 
| 44 | 
            +
                    robot.should_receive(:receive).with(body: "a", source: described_class::SOURCE)
         | 
| 45 | 
            +
                    adapter.run
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              describe "#say" do
         | 
| 51 | 
            +
                it "shows given message body on stdout" do
         | 
| 52 | 
            +
                  Ellen.logger.should_receive(:info).with("a")
         | 
| 53 | 
            +
                  adapter.say("a")
         | 
| 54 | 
            +
                end
         | 
| 55 | 
            +
              end
         | 
| 56 | 
            +
            end
         | 
| @@ -0,0 +1,14 @@ | |
| 1 | 
            +
            require "spec_helper"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Ellen::Handlers::Help do
         | 
| 4 | 
            +
              let(:robot) do
         | 
| 5 | 
            +
                Ellen::Robot.new
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              describe "#help" do
         | 
| 9 | 
            +
                it "responds to `@ellen help` and says each handler's usage" do
         | 
| 10 | 
            +
                  robot.should_receive(:say).with(%r<ellen /help\\z/i +- Show this help message>)
         | 
| 11 | 
            +
                  robot.receive(body: "@ellen help")
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
            end
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            require "spec_helper"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Ellen::Handlers::Ping do
         | 
| 4 | 
            +
              let(:robot) do
         | 
| 5 | 
            +
                Ellen::Robot.new
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              describe "#ping" do
         | 
| 9 | 
            +
                {
         | 
| 10 | 
            +
                  "@ellen ping" => "pong",
         | 
| 11 | 
            +
                  "@ellen Ping" => "Pong",
         | 
| 12 | 
            +
                  "@ellen PING" => "PONG",
         | 
| 13 | 
            +
                }.each do |input, output|
         | 
| 14 | 
            +
                  it "responds to `#{input}` and says `#{output}`" do
         | 
| 15 | 
            +
                    robot.should_receive(:say).with(output)
         | 
| 16 | 
            +
                    robot.receive(body: input)
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: ellen
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Ryo Nakamura
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2014-04- | 
| 11 | 
            +
            date: 2014-04-22 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         | 
| @@ -180,6 +180,8 @@ files: | |
| 180 180 | 
             
            - lib/ellen/commands/generate.rb
         | 
| 181 181 | 
             
            - lib/ellen/commands/run.rb
         | 
| 182 182 | 
             
            - lib/ellen/env.rb
         | 
| 183 | 
            +
            - lib/ellen/env/missing_required_key_error.rb
         | 
| 184 | 
            +
            - lib/ellen/env/validatable.rb
         | 
| 183 185 | 
             
            - lib/ellen/handlers/base.rb
         | 
| 184 186 | 
             
            - lib/ellen/handlers/help.rb
         | 
| 185 187 | 
             
            - lib/ellen/handlers/ping.rb
         | 
| @@ -188,8 +190,11 @@ files: | |
| 188 190 | 
             
            - lib/ellen/robot.rb
         | 
| 189 191 | 
             
            - lib/ellen/version.rb
         | 
| 190 192 | 
             
            - spec/ellen/adapter_builder_spec.rb
         | 
| 193 | 
            +
            - spec/ellen/adapters/shell_spec.rb
         | 
| 191 194 | 
             
            - spec/ellen/commands/generate_spec.rb
         | 
| 192 195 | 
             
            - spec/ellen/commands/run_spec.rb
         | 
| 196 | 
            +
            - spec/ellen/handlers/help_spec.rb
         | 
| 197 | 
            +
            - spec/ellen/handlers/ping_spec.rb
         | 
| 193 198 | 
             
            - spec/ellen/robot_spec.rb
         | 
| 194 199 | 
             
            - spec/spec_helper.rb
         | 
| 195 200 | 
             
            - templates/Gemfile
         | 
| @@ -219,7 +224,11 @@ specification_version: 4 | |
| 219 224 | 
             
            summary: A chatterbot framework, inspired by Hubot
         | 
| 220 225 | 
             
            test_files:
         | 
| 221 226 | 
             
            - spec/ellen/adapter_builder_spec.rb
         | 
| 227 | 
            +
            - spec/ellen/adapters/shell_spec.rb
         | 
| 222 228 | 
             
            - spec/ellen/commands/generate_spec.rb
         | 
| 223 229 | 
             
            - spec/ellen/commands/run_spec.rb
         | 
| 230 | 
            +
            - spec/ellen/handlers/help_spec.rb
         | 
| 231 | 
            +
            - spec/ellen/handlers/ping_spec.rb
         | 
| 224 232 | 
             
            - spec/ellen/robot_spec.rb
         | 
| 225 233 | 
             
            - spec/spec_helper.rb
         | 
| 234 | 
            +
            has_rdoc: 
         |