Sha256: 38d02edd6239ee5599f04b22f02b085816dc644f7b97cd042c443346978d7ef4

Contents?: true

Size: 1.91 KB

Versions: 37

Compression:

Stored size: 1.91 KB

Contents

module ForestLiana
  class AssociationsController < ForestLiana::ApplicationController
    if Rails::VERSION::MAJOR < 4
      before_filter :find_resource
      before_filter :find_association
    else
      before_action :find_resource
      before_action :find_association
    end

    def index
      getter = HasManyGetter.new(@resource, @association, params)
      getter.perform

      render serializer: nil, json: serialize_models(getter.records,
                                                     include: getter.includes,
                                                     count: getter.count,
                                                     params: params)
    end

    def update
      updater = BelongsToUpdater.new(@resource, @association, params)
      updater.perform

      head :no_content
    end

    def associate
      associator = HasManyAssociator.new(@resource, @association, params)
      associator.perform

      head :no_content
    end

    def dissociate
      dissociator = HasManyDissociator.new(@resource, @association, params)
      dissociator.perform

      head :no_content
    end

    private

    def find_resource
      @resource = SchemaUtils.find_model_from_table_name(params[:collection])

      if @resource.nil? || !@resource.ancestors.include?(ActiveRecord::Base)
        render serializer: nil, json: {status: 404}, status: :not_found
      end
    end

    def find_association
      # Rails 3 wants a :sym argument.
      @association = @resource.reflect_on_association(
        params[:association_name].try(:to_sym))

      # Only accept "many" associations
      if @association.nil? ||
        ([:belongs_to, :has_one].include?(@association.macro) &&
         params[:action] == 'index')
        render serializer: nil, json: {status: 404}, status: :not_found
      end
    end

    def resource_params
      ResourceDeserializer.new(@resource, params[:resource], true).perform
    end
  end
end

Version data entries

37 entries across 37 versions & 1 rubygems

Version Path
forest_liana-1.6.5 app/controllers/forest_liana/associations_controller.rb
forest_liana-1.6.4 app/controllers/forest_liana/associations_controller.rb
forest_liana-1.6.3 app/controllers/forest_liana/associations_controller.rb
forest_liana-1.6.2 app/controllers/forest_liana/associations_controller.rb
forest_liana-1.6.1 app/controllers/forest_liana/associations_controller.rb
forest_liana-1.6.0 app/controllers/forest_liana/associations_controller.rb
forest_liana-1.5.26 app/controllers/forest_liana/associations_controller.rb
forest_liana-1.5.25 app/controllers/forest_liana/associations_controller.rb
forest_liana-1.5.24 app/controllers/forest_liana/associations_controller.rb
forest_liana-1.5.23 app/controllers/forest_liana/associations_controller.rb
forest_liana-1.5.22 app/controllers/forest_liana/associations_controller.rb
forest_liana-1.5.21 app/controllers/forest_liana/associations_controller.rb
forest_liana-1.5.20 app/controllers/forest_liana/associations_controller.rb
forest_liana-1.5.19 app/controllers/forest_liana/associations_controller.rb
forest_liana-1.5.18 app/controllers/forest_liana/associations_controller.rb
forest_liana-1.5.17 app/controllers/forest_liana/associations_controller.rb
forest_liana-1.5.16 app/controllers/forest_liana/associations_controller.rb
forest_liana-1.5.15 app/controllers/forest_liana/associations_controller.rb
forest_liana-1.5.14 app/controllers/forest_liana/associations_controller.rb
forest_liana-1.5.13 app/controllers/forest_liana/associations_controller.rb