Sha256: 88113b02ed85eb304d15f2d357f8a1dc0dd9d1fded523d8bce054b0a6702b249

Contents?: true

Size: 1.29 KB

Versions: 44

Compression:

Stored size: 1.29 KB

Contents

class Releaf::Builders::AssociationReflector
  delegate :macro, :name, :klass, to: :reflection

  attr_accessor :reflection, :fields, :sortable_column_name, :sortable_cache

  def initialize(reflection, fields, sortable_column_name)
    self.reflection = reflection
    self.fields = fields
    self.sortable_column_name = sortable_column_name.to_sym
  end

  def sortable?
    if @sortable.nil?
      @sortable = (expected_order_clause == actual_order_clause)
    end

    @sortable
  end

  def destroyable?
    if @destroyable.nil?
      @destroyable = reflection
        .active_record
        .nested_attributes_options
        .fetch(reflection.name, {})
        .fetch(:allow_destroy, false)
    end

    @destroyable
  end

  def actual_order_clause
    relation = reflection.klass.all

    if reflection.scope
      relation = relation.instance_exec(reflection.active_record, &reflection.scope)
    end

    extract_order_clause(relation)
  end

  def expected_order_clause
    relation = reflection.klass.all.order(sortable_column_name)
    extract_order_clause(relation)
  end

  def extract_order_clause(relation)
    relation.order_values.map{|value| value_as_sql(value) }.join(", ")
  end

  def value_as_sql(value)
    if value.respond_to?(:to_sql)
      value.to_sql
    else
      value
    end
  end
end

Version data entries

44 entries across 44 versions & 1 rubygems

Version Path
releaf-core-3.1.0 app/builders/releaf/builders/association_reflector.rb
releaf-core-3.0.3 app/builders/releaf/builders/association_reflector.rb
releaf-core-3.0.2 app/builders/releaf/builders/association_reflector.rb
releaf-core-3.0.1 app/builders/releaf/builders/association_reflector.rb
releaf-core-3.0.0 app/builders/releaf/builders/association_reflector.rb
releaf-core-2.2.1 app/builders/releaf/builders/association_reflector.rb
releaf-core-2.2.0 app/builders/releaf/builders/association_reflector.rb
releaf-core-2.1.2 app/builders/releaf/builders/association_reflector.rb
releaf-core-2.1.1 app/builders/releaf/builders/association_reflector.rb
releaf-core-2.1.0 app/builders/releaf/builders/association_reflector.rb
releaf-core-2.0.1 app/builders/releaf/builders/association_reflector.rb
releaf-core-2.0.0 app/builders/releaf/builders/association_reflector.rb
releaf-core-1.1.22 app/builders/releaf/builders/association_reflector.rb
releaf-core-1.1.21 app/builders/releaf/builders/association_reflector.rb
releaf-core-1.1.20 app/builders/releaf/builders/association_reflector.rb
releaf-core-1.1.19 app/builders/releaf/builders/association_reflector.rb
releaf-core-1.1.18 app/builders/releaf/builders/association_reflector.rb
releaf-core-1.1.17 app/builders/releaf/builders/association_reflector.rb
releaf-core-1.1.16 app/builders/releaf/builders/association_reflector.rb
releaf-core-1.1.15 app/builders/releaf/builders/association_reflector.rb