模块 RSS::Utils

RSS::Utils 模块包含各种实用函数,这些函数在 RSS 库的其他许多部分中使用。像大多数名为“util”的变体的模块一样,它的方法对于那些不开发库本身的人来说可能不是特别有用。

公共实例方法

element_initialize_arguments?(args) 单击以切换源代码

此方法在几个不同的对象内部使用,以确定构造函数中是否需要特殊行为。

如果作为 args 传递的数组的值为 truefalse,并且 args 的第二个元素是哈希,则需要特殊行为。

# File rss-0.3.1/lib/rss/utils.rb, line 106
def element_initialize_arguments?(args)
  [true, false].include?(args[0]) and args[1].is_a?(Hash)
end
get_file_and_line_from_caller(i=0) 单击以切换源代码

返回一个包含两个元素的数组:调用方法所在的文件名和定义该方法的行号。

接受一个可选参数 i,用于指定在堆栈中向上查找多少个调用者。

示例

require 'rss/utils'

def foo
  p RSS::Utils.get_file_and_line_from_caller
  p RSS::Utils.get_file_and_line_from_caller(1)
end

def bar
  foo
end

def baz
  bar
end

baz
# => ["test.rb", 5]
# => ["test.rb", 9]

如果未给定 i,或者 i 的默认值为 0,则它会尝试找出正确的值。这在与 instance_eval 结合使用时很有用。例如

require 'rss/utils'

def foo
  p RSS::Utils.get_file_and_line_from_caller(1)
end

def bar
  foo
end

instance_eval <<-RUBY, *RSS::Utils.get_file_and_line_from_caller
def baz
  bar
end
RUBY

baz

# => ["test.rb", 8]
# File rss-0.3.1/lib/rss/utils.rb, line 83
def get_file_and_line_from_caller(i=0)
  file, line, = caller[i].split(':')
  line = line.to_i
  line += 1 if i.zero?
  [file, line]
end
new_with_value_if_need(klass, value) 单击以切换源代码

如果 value 是类 klass 的实例,则返回它,否则创建一个以值 value 为参数的 klass 的新实例。

# File rss-0.3.1/lib/rss/utils.rb, line 92
def new_with_value_if_need(klass, value)
  if value.is_a?(klass)
    value
  else
    klass.new(value)
  end
end
to_class_name(name) 单击以切换源代码

给定一个下划线格式的 name 或一个带有破折号格式的名称,返回 name 的驼峰式版本。

如果 name 已经是驼峰式命名,则不会发生任何事情。

示例

require 'rss/utils'

RSS::Utils.to_class_name("sample_name")
# => "SampleName"
RSS::Utils.to_class_name("with-dashes")
# => "WithDashes"
RSS::Utils.to_class_name("CamelCase")
# => "CamelCase"
# File rss-0.3.1/lib/rss/utils.rb, line 27
def to_class_name(name)
  name.split(/[_\-]/).collect do |part|
    "#{part[0, 1].upcase}#{part[1..-1]}"
  end.join("")
end