class Backburner::DataObject
Constants
- TIME_REGEXP
Public Class Methods
new(h={})
click to toggle source
Calls superclass method
# File lib/backburner/data_object.rb, line 11 def initialize h={}, args={recurse_over_arrays: true} super end
Public Instance Methods
empty?()
click to toggle source
# File lib/backburner/data_object.rb, line 52 def empty? @table.empty? end
new_ostruct_member(name)
click to toggle source
# File lib/backburner/data_object.rb, line 15 def new_ostruct_member(name) name = name.to_sym unless self.respond_to?(name) class << self; self; end.class_eval do define_method(name) do v = @table[name] if v.is_a?(Hash) @sub_elements[name] ||= self.class.new(v, :recurse_over_arrays => @recurse_over_arrays) elsif v.is_a?(Array) and @recurse_over_arrays @sub_elements[name] ||= recurse_over_array v elsif v.is_a?(String) case v when /^\d+$/ then v.to_i when /^\d+\.\d+$/ then v.to_f when TIME_REGEXP then parse_time(v) when /^Yes$/i then true when /^No$/i then false else v end else v end end define_method("#{name}=") { |x| modifiable[name] = x } define_method("#{name}_as_a_hash") { @table[name] } end end name end
parse_time(time_string)
click to toggle source
# File lib/backburner/data_object.rb, line 45 def parse_time(time_string) res = time_string.scan TIME_REGEXP time = Time.parse res[0][0] time += res[0][1].to_i*60*60 time end
search(name)
click to toggle source
# File lib/backburner/data_object.rb, line 56 def search name result = dig @table, name begin case result when /^\d+$/ then result.to_i when /^\d+\.\d+$/ then result.to_f when /^\d{4}\/\d{2}\/\d{2}-\d{2}:\d{2}:\d{2}:\d{4}-\d{2}$/ then Time.parse(result) when /^Yes$/i then true when /^No$/i then false else result end rescue result end end
to_xml()
click to toggle source
# File lib/backburner/data_object.rb, line 72 def to_xml builder = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml| xml.send @table.keys.first.to_s.camelize end document = builder.doc root_element = document.children[0] xml = xml_dig root_element, @table.values.first, document document.to_xml + "\n" end
Private Instance Methods
dig(hash, name)
click to toggle source
# File lib/backburner/data_object.rb, line 84 def dig hash, name hash.each do |key, value| return value if name.to_s == key.to_s if value.kind_of?(Hash) result = dig value, name return result if result end end nil end
xml_dig(element, data, document)
click to toggle source
# File lib/backburner/data_object.rb, line 95 def xml_dig element, data, document children = [] if data.kind_of?(Hash) data.each do |key, value| if key.to_s =~ /^@(.+)/ element[$1]=value else child= Nokogiri::XML::Element.new(key.to_s.camelize, document) xml_dig(child, value, document) children << child end end elsif data.kind_of?(String) children << data elsif data.kind_of?(Numeric) children << data.to_s end children.each do |child| element.add_child child end element end