Sha256: 8196a46014f2322becd7a26438fe69fa43a0da0a7312041288b97b7cf3feba10
Contents?: true
Size: 1.43 KB
Versions: 6
Compression:
Stored size: 1.43 KB
Contents
require 'xml/mapping' module XML class XXPath attr_reader :xpathstr end end module Datacite module Mapping module ReadOnlyNodes def warn_reason @warn_reason ||= @options[:warn_reason] end def value_from(obj) obj.send(@attrname) end def value_str(val) return "[ #{val.map(&:to_s).join(', ')} ]" if val.is_a?(Array) "'#{val}'" end def obj_to_xml(obj, _xml) val = value_from(obj) return unless val warn_ignored(val) end def warn_ignored(val) warning = "ignoring #{@attrname} #{value_str(val)}" warning.prepend("#{warn_reason}; ") if warn_reason ReadOnlyNodes.warn(warning) end # public to allow testing def self.warn(warning) super end end class ReadOnlyTextNode < XML::Mapping::TextNode def warn_ignored(val) fail ArgumentError, "Expected string, got #{val}" unless val.respond_to?(:strip) return if val.strip.empty? super end include ReadOnlyNodes end XML::Mapping.add_node_class ReadOnlyTextNode class ReadOnlyArrayNode < XML::Mapping::ArrayNode def warn_ignored(val) fail ArgumentError, "Expected array, got #{val}" unless val.respond_to?(:empty?) return if val.empty? super end include ReadOnlyNodes end XML::Mapping.add_node_class ReadOnlyArrayNode end end
Version data entries
6 entries across 6 versions & 1 rubygems