Sha256: 6bd47810f3ccc2e579c4eb3b17713bef9ca5e7e55db9fca9b89c6fdf4ebb5561

Contents?: true

Size: 952 Bytes

Versions: 1

Compression:

Stored size: 952 Bytes

Contents

module RademadeAdmin
  module Linker

    def link(item)
      if has_one_relation?
        set_attribute(item, params[:parent_id])
      else
        old_data = get_attribute(item)
        old_data << params[:parent_id]
        set_attribute(item, old_data)
      end

    end

    def unlink(item)
      if has_one_relation?
        set_attribute(item, nil)
      else
        old_data = get_attribute(item)
        new_data = old_data - Array(params[:parent_id])
        set_attribute(item, new_data)
      end

    end

    private

    def has_one_relation?
      model_info.has_one.include? params[:parent]
    end

    def relation_suffix
      has_one_relation? ? '_id' : '_ids'
    end

    def get_attribute(item)
      item.send(relation_field)
    end

    def relation_field
      params[:parent].downcase + relation_suffix
    end

    def set_attribute(item, new_value)
      item.send(relation_field + '=', new_value)
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rademade_admin-0.0.1 app/services/model_controller/linker.rb