Sha256: 045fee29b74f677737d31bcad25e269c7bdff728d9de27d371e5eace83252dff

Contents?: true

Size: 1.71 KB

Versions: 2

Compression:

Stored size: 1.71 KB

Contents

module Cas
  class SectionConfig
    def initialize(section)
      @section = section
    end

    def list_order_by
      order_field = load_section_config[1]['list_order_by']
      order_field || ['created_at']
    end

    def list_fields
      fields = load_section_config[1]["list_fields"]
      fields || ['title', 'created_at']
    end

    def accessible_by_user?(user)
      roles = user.roles.map(&:to_s)
      accessible_roles = load_field["accessible_roles"]

      if accessible_roles.present?
        (accessible_roles.map(&:to_s) & roles).compact.present?
      else
        true
      end
    end

    def form_has_field?(field)
      section_fields = load_section_config[1]["fields"]

      Array.wrap(section_fields).any? do |section_field|
        if section_field.is_a?(Hash)
          section_field.keys.map(&:to_s).include?(field.to_s)
        else
          section_field.to_s == field.to_s
        end
      end
    end

    private

    def filename
      if Rails.env.test?
        "spec/fixtures/cas.yml"
      else
        Cas::CONFIG_PATH
      end
    end

    def load_field
      @config ||= begin
        field = load_section_config
        (field && field[1]) || {}
      end
    end

    def load_section_config
      begin
        config = YAML.safe_load_file(filename, aliases: true)
      rescue NoMethodError, ArgumentError
        config = YAML.load_file(filename)
      end

      sites = config["sites"]
      site = sites[@section.site.slug]

      if site.blank?
        raise(
          Cas::Exceptions::UndefinedSite,
          "Site #{@section.site.slug} is undefined in the #{filename} file."
        )
      end

      site["sections"].find { |key, value| key == @section.slug }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
cas-cms-1.0.0.alpha2 lib/cas/section_config.rb
cas-cms-1.0.0.alpha1 lib/cas/section_config.rb