Sha256: 6a0c17ccb000aec87ca2d5e430398aa31bac3b325f22d3c014c499b2ac1a92f8

Contents?: true

Size: 1.99 KB

Versions: 6

Compression:

Stored size: 1.99 KB

Contents

require 'sunrise/config/base'

module Sunrise
  module Config
    class Field < Base
      include Sunrise::Utils::EvalHelpers

      # The condition that must be met on an object
      attr_reader :if_condition
      
      # The condition that must *not* be met on an object
      attr_reader :unless_condition

      # Store form block
      attr_reader :block
      
      def initialize(abstract_model, parent, options = {}, &block)
        options = {:multiply => false, :sort => false}.merge(options)

        super(abstract_model, parent, options)
        
        # Build conditionals
        @if_condition = options.delete(:if)
        @unless_condition = options.delete(:unless)
        @block = block
      end

      def block_given?
        !block.nil?
      end
      
      def visible?(object = nil)
        object.nil? || matches_conditions?(object)
      end
      
      def input_options
        @config_options.dup
      end
      
      def human_name
        @config_options[:label] || abstract_model.model.human_attribute_name(@name)
      end
      
      def html_options
        css = ["padder"]
        css << "grey-but" if input_options[:boolean]
        css << "tags-edit" if association?
        
        {:class => css, :id => dom_id}.merge(input_options[:html] || {})
      end
      
      def association?
        input_options[:association] === true
      end
      
      def label?
        @config_options[:label] != false
      end

      def nested?
        false
      end

      def dom_id
        @dom_id ||= "#{name}_field"
      end

      protected
      
        # Verifies that the conditionals for this field evaluate to true for the
        # given object
        def matches_conditions?(object)
          return true if if_condition.nil? && unless_condition.nil?
          
          Array.wrap(if_condition).all? {|condition| evaluate_method(object, condition)} &&
          !Array.wrap(unless_condition).any? {|condition| evaluate_method(object, condition)}
        end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
sunrise-cms-1.0.6 lib/sunrise/config/field.rb
sunrise-cms-1.0.5 lib/sunrise/config/field.rb
sunrise-cms-1.0.4 lib/sunrise/config/field.rb
sunrise-cms-1.0.3 lib/sunrise/config/field.rb
sunrise-cms-1.0.2 lib/sunrise/config/field.rb
sunrise-cms-1.0.1 lib/sunrise/config/field.rb