Module: Artoo::Basic

Included in:
Robot
Defined in:
lib/artoo/basic.rb

Overview

Methods taken from Sinatra codebase

Constant Summary collapse

CALLERS_TO_IGNORE =

Callers to ignore

[ # :nodoc:
  /lib\/artoo.*\.rb$/,                                # artoo code
  /^\(.*\)$/,                                         # generated code
  /rubygems\/(custom|core_ext\/kernel)_require\.rb$/, # rubygems require hacks
  /active_support/,                                   # active_support require hacks
  /bundler(\/runtime)?\.rb/,                          # bundler require hacks
  /<internal:/,                                       # internal in ruby >= 1.9.2
  /src\/kernel\/bootstrap\/[A-Z]/                     # maglev kernel files
]

Instance Method Summary collapse

Instance Method Details

#caller_filesObject

Like Kernel#caller but excluding certain magic entries and without line / method information; the resulting array contains filenames only.



54
55
56
# File 'lib/artoo/basic.rb', line 54

def caller_files
  cleaned_caller(1).flatten
end

#set(option, value = (not_set = true), ignore_setter = false, &block) ⇒ Object

Sets an option to the given value. If the value is a proc, the proc will be called every time the option is accessed.

Raises:

  • (ArgumentError)


6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/artoo/basic.rb', line 6

def set(option, value = (not_set = true), ignore_setter = false, &block)
  raise ArgumentError if block and !not_set
  value, not_set = block, false if block

  if not_set
    raise ArgumentError unless option.respond_to?(:each)
    option.each { |k,v| set(k, v) }
    return self
  end

  if respond_to?("#{option}=") and not ignore_setter
    return __send__("#{option}=", value)
  end

  setter = proc { |val| set option, val, true }
  getter = proc { value }

  case value
  when Proc
    getter = value
  when Symbol, Fixnum, FalseClass, TrueClass, NilClass
    getter = value.inspect
  when Hash
    setter = proc do |val|
      val = value.merge val if Hash === val
      set option, val, true
    end
  end

  define_singleton_method("#{option}=", setter) if setter
  define_singleton_method(option, getter) if getter
  define_singleton_method("#{option}?", "!!#{option}") unless method_defined? "#{option}?"
  self
end