Sha256: 7e05f9d7d8ac5bb809d16235ef72636d03304128b109745a971e8a7b7753a199

Contents?: true

Size: 847 Bytes

Versions: 1

Compression:

Stored size: 847 Bytes

Contents

module ActsAsConcatenation
  module ClassMethods
    def acts_as_concatenation(*args)
      options = args.extract_options!
      separator = options.delete(:separator) || '|'
      args.each do |attr|
        class_eval do
          define_method "#{attr}=".to_sym do |a|
            if (!a.nil?) && (!a.empty?) && (a.respond_to? :join)
              a.delete_if {|x| x.nil? || x.strip.empty? } #for a fake checkbox in html page to crack empty selection
              self[attr] = a.join(separator)
            else
              self[attr] = a
            end
          end

          define_method attr do
            value = self[attr]
            value.nil? ? [] : value.split(separator)
          end
        end
      end
    end
  end

  def self.included(base)
    base.send :extend, ClassMethods
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
acts_as_concatenation-0.1.0 lib/acts_as_concatenation.rb