Sha256: 914f4c6320638cd75958551b2b224823124fc65f7a6a762043c3c12f9946fd2b

Contents?: true

Size: 1.56 KB

Versions: 15

Compression:

Stored size: 1.56 KB

Contents

module FilteredColumn
  @@filters = {}
  @@macros  = {}
  mattr_reader :filters, :macros

  class Processor
    @@patterns = [
      /<(filter|macro|typo):([_a-zA-Z0-9]+)([^>]*)\/>/,
      /<(filter|macro|typo):([_a-zA-Z0-9]+)([^>]*)>(.*?)<\/(filter|macro|typo):([_a-zA-Z0-9]+)>/m
      ].freeze
      
    def self.process_filter(filter_name, text)
      new(filter_name, text).filter
    end
    
    def initialize(filter_name, text)
      @filter = FilteredColumn.filters[filter_name.to_sym] rescue nil
      @text   = text
    end

    def filter
      process_macros
      @filter ? @filter.filter(@text) : @text
    end
    
    protected
      def process_macros
        #RAILS_DEFAULT_LOGGER.warn "PROCESSING MACROS: #{::FilteredColumn.macros.keys.inspect}"
        @@patterns.each do |pattern|
          @text.gsub!(pattern) do |match|
            #RAILS_DEFAULT_LOGGER.warn "our match: #{$2}"
            key = "#{$2}_macro".to_sym
            if !$2.blank? && FilteredColumn.macros.has_key?(key)
              #RAILS_DEFAULT_LOGGER.warn "It has the key!"
              macro = FilteredColumn.macros[key]
              macro_text = macro ? macro.filter(hash_from_attributes($3), $4.to_s) : $4.to_s
              @filter ? @filter.escape(macro_text) : macro_text
            end
          end
        end
      end

      def hash_from_attributes(string)
        attributes = {}
        string.gsub(/([^ =]+="[^"]*")/) do |match|
          key, value = match.split(/=/, 2)
          attributes[key] = value.gsub(/"/, '')
        end
        attributes.symbolize_keys!
      end
  end
end

Version data entries

15 entries across 15 versions & 2 rubygems

Version Path
adva-0.3.2 vendor/gems/filtered_column/lib/filtered_column/processor.rb
adva-0.3.1 vendor/gems/filtered_column/lib/filtered_column/processor.rb
adva-0.3.0 vendor/gems/filtered_column/lib/filtered_column/processor.rb
adva-0.2.4 vendor/gems/filtered_column/lib/filtered_column/processor.rb
adva-0.2.3 vendor/gems/filtered_column/lib/filtered_column/processor.rb
adva-0.2.2 vendor/gems/filtered_column/lib/filtered_column/processor.rb
adva-0.2.1 vendor/gems/filtered_column/lib/filtered_column/processor.rb
adva-0.2.0 vendor/gems/filtered_column/lib/filtered_column/processor.rb
adva-0.1.4 vendor/gems/filtered_column/lib/filtered_column/processor.rb
adva-0.1.3 vendor/gems/filtered_column/lib/filtered_column/processor.rb
adva-0.1.2 vendor/gems/filtered_column/lib/filtered_column/processor.rb
adva-0.1.1 vendor/gems/filtered_column/lib/filtered_column/processor.rb
adva-0.1.0 vendor/gems/filtered_column/lib/filtered_column/processor.rb
adva_cms-0.0.1 vendor/gems/filtered_column/lib/filtered_column/processor.rb
adva-0.0.1 adva_cms/vendor/gems/filtered_column/lib/filtered_column/processor.rb