diff --git a/lib/liudesk_cmdb/model.rb b/lib/liudesk_cmdb/model.rb index b97fc9fb67a3065c7c955777968e172f835dced7..6f6e41296d6667ab9f55edf877199657edafbc0c 100644 --- a/lib/liudesk_cmdb/model.rb +++ b/lib/liudesk_cmdb/model.rb @@ -128,6 +128,36 @@ module LiudeskCMDB superclass.fields.merge(@fields || {}) end + def convert_cmdb_to_ruby(data) + fields.each do |key, attributes| + next unless data[key] + + case attributes[:convert].to_s + when Time.to_s + data[key] = Time.parse(data[key]).round + when Symbol.to_s + data[key] = data[key].to_sym + end + end + + data + end + + def convert_ruby_to_cmdb(data) + fields.each do |key, attributes| + next unless data.key? key + + case attributes[:convert].to_s + when Time.to_s + data[key] = data[key].utc.round.strftime("%FT%T.%LZ") if data[key].is_a? Time + when Symbol.to_s + data[key] = data[key].to_s if data[key].is_a? Symbol + end + end + + data + end + protected def read_fields(*fields) @@ -266,16 +296,7 @@ module LiudeskCMDB data = data.dup write_fields = self.class.fields.select { |_, field| field[:access].to_s.end_with?("write") }.map { |k, _| k } - self.class.fields.each do |key, attributes| - next unless data.key? key - - case attributes[:convert].to_s - when Time.to_s - data[key] = data[key].utc.round.strftime("%FT%T.%LZ") if data[key].is_a? Time - when Symbol.to_s - data[key] = data[key].to_s if data[key].is_a? Symbol - end - end + self.class.convert_ruby_to_cmdb(data) data.select { |k, _| write_fields.include?(k) }.transform_keys { |k| self.class.fields.dig(k, :name) } end @@ -291,16 +312,7 @@ module LiudeskCMDB @data = {} unless merge @data.merge!(converted) - self.class.fields.each do |key, attributes| - next unless @data[key] - - case attributes[:convert].to_s - when Time.to_s - @data[key] = Time.parse(@data[key]).round - when Symbol.to_s - @data[key] = @data[key].to_sym - end - end + self.class.convert_cmdb_to_ruby(@data) @retrieved = Time.now self