# class Object

### Constants

HashWithIndifferentAccess
MissingSourceFile
RUBY_ENGINE

### Public Instance Methods

acts_like?(duck) click to toggle source

A duck-type assistant method. For example, Active Support extends Date to define an acts_like_date? method, and extends Time to define acts_like_time?. As a result, we can do “x.acts_like?(:time)” and “x.acts_like?(:date)” to do duck-type-safe comparisons, since classes that we want to act like Time simply need to define an acts_like_time? method.

    # File lib/active_support/core_ext/object/acts_like.rb, line 7
    def acts_like?(duck)
      respond_to? :"acts_like_#{duck}?"
    end

blank?() click to toggle source

An object is blank if it’s false, empty, or a whitespace string. For example, “”, “ ”, `nil`, [], and {} are all blank.

This simplifies:

    if address.nil? || address.empty?

…to:

    if address.blank?

    # File lib/active_support/core_ext/object/blank.rb, line 14
    def blank?
      respond_to?(:empty?) ? empty? : !self
    end

duplicable?() click to toggle source

Can you safely dup this object?

False for `nil`, `false`, `true`, symbols, numbers, class and module objects; true otherwise.

    # File lib/active_support/core_ext/object/duplicable.rb, line 24
    def duplicable?
      true
    end

html_safe?() click to toggle source

    # File lib/active_support/core_ext/string/output_safety.rb, line 77
    def html_safe?
      false
    end

in?(*args) click to toggle source

Returns true if this object is included in the argument(s). Argument must be any object which responds to `#include?` or optionally, multiple arguments can be passed in. Usage:

    characters = ["Konata", "Kagami", "Tsukasa"]
    "Konata".in?(characters) # => true

    character = "Konata"
    character.in?("Konata", "Kagami", "Tsukasa") # => true

This will throw an ArgumentError if a single argument is passed in and it doesn’t respond to `#include?`.

    # File lib/active_support/core_ext/object/inclusion.rb, line 13
    def in?(*args)
      if args.length > 1
        args.include? self
      else
        another_object = args.first
        if another_object.respond_to? :include?
          another_object.include? self
        else
          raise ArgumentError.new("The single parameter passed to #in? must respond to #include?")
        end
      end
    end

instance_variable_names() click to toggle source

    # File lib/active_support/core_ext/object/instance_variables.rb, line 27
    def instance_variable_names
      instance_variables.map { |var| var.to_s }
    end

presence() click to toggle source

Returns object if it’s `present?` otherwise returns `nil`. `object.presence` is equivalent to `object.present? ? object : nil`.

This is handy for any representation of objects where blank is the same as not present at all. For example, this simplifies a common check for HTTP POST/query parameters:

    state   = params[:state]   if params[:state].present?
    country = params[:country] if params[:country].present?
    region  = state || country || 'US'

…becomes:

    region = params[:state].presence || params[:country].presence || 'US'

    # File lib/active_support/core_ext/object/blank.rb, line 37
    def presence
      self if present?
    end

present?() click to toggle source

An object is present if it’s not `blank?`.

    # File lib/active_support/core_ext/object/blank.rb, line 19
    def present?
      !blank?
    end

to_json(options = nil) click to toggle source

Dumps object in JSON (JavaScript Object Notation). See www.json.org for more info.

    # File lib/active_support/core_ext/object/to_json.rb, line 15
    def to_json(options = nil)
      ActiveSupport::JSON.encode(self, options)
    end

to_param() click to toggle source

Alias of `to_s`.

    # File lib/active_support/core_ext/object/to_param.rb, line 3
    def to_param
      to_s
    end

to_query(key) click to toggle source

Converts an object into a string suitable for use as a URL query string, using the given `key` as the param name.

Note: This method is defined as a default implementation for all Objects for Hash#to_query to work.

    # File lib/active_support/core_ext/object/to_query.rb, line 8
    def to_query(key)
      require 'cgi' unless defined?(CGI) && defined?(CGI::escape)
      "#{CGI.escape(key.to_param)}=#{CGI.escape(to_param.to_s)}"
    end

try(*a) { |self| ... } click to toggle source

Invokes the method identified by the symbol `method`, passing it any arguments and/or the block specified, just like the regular Ruby `Object#send` does.

Unlike that method however, a `NoMethodError` exception will not be raised and `nil` will be returned instead, if the receiving object is a `nil` object or NilClass.

If try is called without a method to call, it will yield any given block with the object.

#### Examples

Without `try`

    @person && @person.name

or

    @person ? @person.name : nil

With `try`

    @person.try(:name)

`try` also accepts arguments and/or a block, for the method it is trying

    Person.try(:find, 1)
    @people.try(:collect) {|p| p.name}

Without a method argument try will yield to the block unless the receiver is nil.

    @person.try { |p| "#{p.first_name} #{p.last_name}" }

    # File lib/active_support/core_ext/object/try.rb, line 28
    def try(*a, &b)
      if a.empty? && block_given?
        yield self
      else
        __send__(*a, &b)
      end
    end

unescape(str, escaped = /%[a-fA-F\d]{2}/) click to toggle source

    # File lib/active_support/core_ext/uri.rb, line 12
    def unescape(str, escaped = %r%[a-fA-F\d]{2}/)
      # TODO: Are we actually sure that ASCII == UTF-8?
      # YK: My initial experiments say yes, but let's be sure please
      enc = str.encoding
      enc = Encoding::UTF_8 if enc == Encoding::US_ASCII
      str.gsub(escaped) { [$&[1, 2].hex].pack('C') }.force_encoding(enc)
    end

with_options(options) { |option_merger| ... } click to toggle source

An elegant way to factor duplication out of options passed to a series of method calls. Each method called in the block, with the block variable as the receiver, will have its options merged with the default `options` hash provided. Each method called on the block variable must take an options hash as its final argument.

Without `with_options>`, this code contains duplication:

    class Account < ActiveRecord::Base
      has_many :customers, :dependent => :destroy
      has_many :products,  :dependent => :destroy
      has_many :invoices,  :dependent => :destroy
      has_many :expenses,  :dependent => :destroy
    end

Using `with_options`, we can remove the duplication:

    class Account < ActiveRecord::Base
      with_options :dependent => :destroy do |assoc|
        assoc.has_many :customers
        assoc.has_many :products
        assoc.has_many :invoices
        assoc.has_many :expenses
      end
    end

It can also be used with an explicit receiver:

    I18n.with_options :locale => user.locale, :scope => "newsletter" do |i18n|
      subject i18n.t :subject
      body    i18n.t :body, :user_name => user.name
    end

`with_options` can also be nested since the call is forwarded to its receiver. Each nesting level will merge inherited defaults in addition to their own.

    # File lib/active_support/core_ext/object/with_options.rb, line 40
    def with_options(options)
      yield ActiveSupport::OptionMerger.new(self, options)
    end