Class: Backburner::DataObject
- Inherits:
-
RecursiveOpenStruct
- Object
- RecursiveOpenStruct
- Backburner::DataObject
- Defined in:
- lib/backburner/data_object.rb
Constant Summary collapse
- TIME_REGEXP =
/(^\d{4}\/\d{2}\/\d{2}-\d{2}:\d{2}:\d{2}:\d{4})(-\d{2})$/
Instance Method Summary collapse
- #empty? ⇒ Boolean
-
#initialize(h = {}, args = {recurse_over_arrays: true}) ⇒ DataObject
constructor
A new instance of DataObject.
- #new_ostruct_member(name) ⇒ Object
- #parse_time(time_string) ⇒ Object
- #search(name) ⇒ Object
- #to_xml ⇒ Object
Constructor Details
#initialize(h = {}, args = {recurse_over_arrays: true}) ⇒ DataObject
Returns a new instance of DataObject.
10 11 12 |
# File 'lib/backburner/data_object.rb', line 10 def initialize h={}, args={recurse_over_arrays: true} super end |
Instance Method Details
#empty? ⇒ Boolean
51 52 53 |
# File 'lib/backburner/data_object.rb', line 51 def empty? @table.empty? end |
#new_ostruct_member(name) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/backburner/data_object.rb', line 14 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) ⇒ Object
44 45 46 47 48 49 |
# File 'lib/backburner/data_object.rb', line 44 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) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/backburner/data_object.rb', line 55 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 ⇒ Object
71 72 73 74 75 76 77 78 79 |
# File 'lib/backburner/data_object.rb', line 71 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 |