Sha256: 8ed0a097ef43677a81a74589c5316ce56a56041540888e9c37af896e116e1ff8

Contents?: true

Size: 1.31 KB

Versions: 3

Compression:

Stored size: 1.31 KB

Contents

# coding: utf-8

module ONIX
  module ListWriter
    
    def list_writer(name, options = {})
      options.symbolize_keys!
      unless options.is_a?(Hash) && options[:list].is_a?(Integer)
        raise ArgumentError, "Must specify code list number as ':list => Integer'"
      end
      define_method("#{name}=") do |value|
        # Value can be Array, String or Fixnum
        # To iterate over all classes, convert all to Array
        # NB: Some entities (j303, j304, j305) can be space-separated string of values
        values = case value.class.to_s
        when 'Array'
          value
        when 'String'
          value.split(/\s+/)
        else
          [value]
        end
        values.each do |value|
          unless value.nil? || ONIX::Lists.list(options[:list]).keys.include?(value)
            raise ArgumentError, "Invalid #{("_" + name.to_s).downcase.gsub!(/_(.)/) { $1.upcase }} '#{value}' -- Refer to ONIX Code List #{options[:list]}"
          end
        end
        # :as option determines how value is stored in instance variable
        values = if options[:as] == Array || options[:as] == []
          values
        elsif options[:as] == String
          values.join(" ")
        else
          values.first
        end
        self.instance_variable_set("@#{name}", values)
      end
    end
    
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
milkfarm-onix-0.8.13 lib/onix/list_writer.rb
milkfarm-onix-0.8.12 lib/onix/list_writer.rb
milkfarm-onix-0.8.11 lib/onix/list_writer.rb