Sha256: 02eee719616e0e59c43e651f845116e85b7572700bbb0c3ade70feec24a20fa4
Contents?: true
Size: 1.42 KB
Versions: 1
Compression:
Stored size: 1.42 KB
Contents
$:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__))) require 'rubygems' require 'json' class Jsont VERSION = '0.1.0' def initialize(rules) @rules = rules.is_a?(String) ? JSON.parse(rules) : rules.dup @rules.each do |r,v| if r[0,4] != 'self' @rules["self.#{r}"] = @rules.delete(r) end end end def transform(target) @parent = target.is_a?(String) ? JSON.parse(target) : target apply!('self',@parent) end def apply!(target_path, target) case target when Array target.each_index do |i| target[i] = apply!("#{target_path}[*]", apply!("#{target_path}[#{i}]", target[i])) end when Hash target.each do |k, v| target[k] = apply!("#{target_path}.?", apply!("#{target_path}.#{k}", target[k])) end end if (rule = @rules[target_path]) rule.gsub(/\{([a-z0-9\$\.]+)\}/) do |match| path = match[1,match.size - 2] n = case path[0] when ?$ target else @parent end path.gsub!(/^\$\.?/,'') if path.size > 0 path.split('.').each do |piece| n = case piece when /^[0-9]+$/ n[Integer(piece)] else n[piece] end end end n end else target end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
jsont-0.1.0 | lib/jsont.rb |