Sha256: 76981730ff62aa9434bb3d5b982154ed060a0a84fef70edadae24b4fbc2b1a6d

Contents?: true

Size: 1.54 KB

Versions: 1

Compression:

Stored size: 1.54 KB

Contents

module RademadeAdmin
  class Saver

    attr_reader :item

    def initialize(model_info, params)
      @model_info = model_info
      @params = params
    end

    def create_model
      @item = @model_info.model.new filter_data_params
    end

    def update_model
      @item = @model_info.model.find(@params[:id])
      item.update filter_data_params
    end

    def save_model
      item.save @params
    end

    def save_aggregated_data
      save_model_relations
      save_model_uploads
      item.save!
    end

    def errors
      item.errors
    end

    private

    def save_model_relations
      data = @params[:data]
      model_reflection = @model_info.model_reflection
      model_reflection.relations.each do |name, rel|
        assoc_key = model_reflection.association_foreign_key(rel)
        if data.has_key? assoc_key
          ids = data[assoc_key]
          ids.reject! { |id| id.empty? } if ids.kind_of?(Array)
          item.send(assoc_key + '=', ids)
        end
      end
    end

    def save_model_uploads
      data = @params[:data]
      @model_info.model_reflection.uploaders.each do |name, _|
        if data.has_key?(name) and not data[name].blank?
          image_path = CarrierWave.root + data[name].to_s
          setter_method = (name.to_s + '=').to_sym
          begin
            item.send(setter_method, File.open(image_path))
          rescue
            #rm_todo clear image
          end
        end
      end
    end

    def filter_data_params
      @params.require(:data).permit(@model_info.save_form_fields)
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rademade_admin-0.0.1 app/services/saver.rb