Skip to content

Commit

Permalink
reduce object creation
Browse files Browse the repository at this point in the history
  • Loading branch information
tenderlove committed Jan 16, 2013
1 parent bb40322 commit a421f59
Showing 1 changed file with 6 additions and 10 deletions.
16 changes: 6 additions & 10 deletions lib/hana.rb
Expand Up @@ -8,28 +8,24 @@ def initialize path
@path = Pointer.parse path @path = Pointer.parse path
end end


def each def each(&block); @path.each(&block); end
@path.each { |x| yield x } def to_a; @path.dup; end
end

def to_a; @path.dup; end


def eval object def eval object
Pointer.eval @path, object Pointer.eval @path, object
end end


ESC = {'^/' => '/', '^^' => '^', '~0' => '~', '~1' => '/'} # :nodoc:

def self.eval list, object def self.eval list, object
list.inject(object) { |o, part| o[(Array === o ? part.to_i : part)] } list.inject(object) { |o, part| o[(Array === o ? part.to_i : part)] }
end end


def self.parse path def self.parse path
return [''] if path == '/' return [''] if path == '/'


path.sub(/^\//, '').split(/(?<!\^)\//).map { |part| path.sub(/^\//, '').split(/(?<!\^)\//).map! { |part|
part.gsub!(/\^([\/^])/, '\1') part.gsub!(/\^[\/^]|~[01]/) { |m| ESC[m] }; part
part.gsub!(/~1/, '/')
part.gsub!(/~0/, '~')
part
} }
end end
end end
Expand Down

0 comments on commit a421f59

Please sign in to comment.