module DotNotation
Constants
- VERSION
Public Class Methods
included(base)
click to toggle source
Your code goes hereā¦
# File lib/dot_notation.rb, line 5 def self.included(base) raise "Unsupported Class" unless base.respond_to?('[]') end
Public Instance Methods
dot(path)
click to toggle source
# File lib/dot_notation.rb, line 9 def dot(path) return nil if self.nil? # optimization for NilClass data = self path.split(/\./).each do |selector| selector = selector.to_i if selector =~ /^\d+$/ if value = access(data, selector) data = value else return nil end end if @dot_options && @dot_options[:autodot] extend_result!(data) data.each{|e| extend_result!(e) } if data.kind_of? Array end data end
dot_options(options)
click to toggle source
# File lib/dot_notation.rb, line 32 def dot_options(options) @dot_options = (@dot_options || {}).merge(options) end
Private Instance Methods
access(data, selector)
click to toggle source
# File lib/dot_notation.rb, line 47 def access(data, selector) if defined?(ActiveRecord::Base) && data.kind_of?(ActiveRecord::Base) access_active_record(data, selector) else access_generic(data, selector) end end
access_active_record(data, selector)
click to toggle source
# File lib/dot_notation.rb, line 55 def access_active_record(data, selector) selsym = selector.respond_to?(:to_sym) ? selector.to_sym : nil if selsym && data.respond_to?(selsym) data.send(selsym) else access_generic(data, selector) end end
access_generic(data, selector)
click to toggle source
# File lib/dot_notation.rb, line 64 def access_generic(data, selector) if data[selector] data[selector] else selsym = selector.respond_to?(:to_sym) ? selector.to_sym : nil if selsym && data[selsym] data[selsym] else nil end end end
extend_result!(result)
click to toggle source
# File lib/dot_notation.rb, line 38 def extend_result!(result) begin result.extend(DotNotation) result.dot_options(@dot_options) rescue TypeError # ignore, we get this when trying to extend an int or something end end