Class: Hana::Pointer
Defined Under Namespace
Classes: Exception, FormatError
Constant Summary collapse
- ESC =
:nodoc:
{'^/' => '/', '^^' => '^', '~0' => '~', '~1' => '/'}
Class Method Summary collapse
Instance Method Summary collapse
- #each(&block) ⇒ Object
- #eval(object) ⇒ Object
-
#initialize(path) ⇒ Pointer
constructor
A new instance of Pointer.
Constructor Details
Class Method Details
.eval(list, object) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/hana.rb', line 27 def self.eval list, object list.inject(object) { |o, part| return nil unless o if Array === o raise Patch::IndexError unless part =~ /\A(?:\d|[1-9]\d+)\Z/ part = part.to_i end o[part] } end |
.parse(path) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/hana.rb', line 39 def self.parse path return [''] if path == '/' return [] if path == '' unless path.start_with? '/' raise FormatError, "JSON Pointer should start with a slash" end parts = path.sub(/^\//, '').split(/(?<!\^)\//).each { |part| part.gsub!(/\^[\/^]|~[01]/) { |m| ESC[m] } } parts.push("") if path[-1] == '/' parts end |