af83/chouette-core

View on GitHub
app/decorators/routing_constraint_zone_decorator.rb

Summary

Maintainability
A
0 mins
Test Coverage
class RoutingConstraintZoneDecorator < AF83::Decorator
  decorates Chouette::RoutingConstraintZone

  set_scope { [context[:referential], context[:line]] }

  # Action links require:
  #   context: {
  #     referential: ,
  #     line:
  #   }

  create_action_link(
    if: ->() {
      h.policy(Chouette::RoutingConstraintZone).create? &&
        context[:referential].organisation == h.current_organisation &&
        context[:line].routes.with_at_least_three_stop_points.length > 0
    }
  )

  with_instance_decorator do |instance_decorator|
    instance_decorator.show_action_link
    instance_decorator.edit_action_link

    instance_decorator.action_link secondary: :show, if: ->{ object.opposite_zone.nil? } do |l|
      l.content  t('routing_constraint_zones.actions.create_opposite_zone')
      l.href     { [:new, *scope, :routing_constraint_zone, opposite_zone_id: object.id] }
      l.disabled { !object.can_create_opposite_zone? }
    end

    instance_decorator.action_link secondary: :show, if: ->{ object.opposite_zone.present? } do |l|
      l.content  t('routing_constraint_zones.actions.opposite_zone')
      l.href     { [*scope, object.opposite_zone] }
    end

    instance_decorator.destroy_action_link do |l|
      l.data {{ confirm: h.t('routing_constraint_zones.actions.destroy_confirm') }}
    end
  end
end