class Phaseout::Handler

Attributes

action[R]
controller[R]
default[R]

Public Class Methods

new(controller, action, as_pattern, key_pattern, editable, &block) click to toggle source
# File lib/phaseout/handler.rb, line 5
def initialize(controller, action, as_pattern, key_pattern, editable, &block)
  @controller, @action, @as_pattern, @key_pattern, @editable = controller, action, as_pattern, key_pattern, editable
  @default = Phaseout::SEOFields.new key, as, &block
end

Public Instance Methods

as() click to toggle source
# File lib/phaseout/handler.rb, line 21
def as
  @as ||= eval_pattern @as_pattern
end
call(&action_block) click to toggle source
# File lib/phaseout/handler.rb, line 10
def call(&action_block)
  if seo_fields
    @controller.seo_tags = seo_fields.to_html @controller
  else
    @controller.seo_tags = @default.to_html @controller
  end
  action_block.call
  set_blank_field if @controller.status == 200 && @blank_field && @editable
  true
end
class_index_key() click to toggle source
# File lib/phaseout/handler.rb, line 42
def class_index_key
  ['action:', @controller.class.name, '#', @action].join.gsub(/\s+/, '_').underscore
end
key() click to toggle source
# File lib/phaseout/handler.rb, line 25
def key
  @key ||= I18n.transliterate( [ 'seo_key:', @controller.class.name, '#', @action, ':', eval_pattern(@key_pattern) ].join.gsub(/\s+/, '_').underscore )
end
seo_fields() click to toggle source
# File lib/phaseout/handler.rb, line 29
def seo_fields
  return @seo_fields if @seo_fields
  dump = Phaseout.redis.get key
  if dump.blank?
    @blank_field = true
    return nil
  else
    @seo_fields = Marshal.load dump
    @seo_fields.default = @default
    @seo_fields
  end
end

Protected Instance Methods

eval_pattern(pattern) click to toggle source
# File lib/phaseout/handler.rb, line 52
def eval_pattern(pattern)
  pattern.to_s.gsub( /\@([\w\d\.\_])+/ ) do |subpattern|
    varname, *methods = subpattern.split '.'
    if @controller.instance_variable_defined? varname.to_sym
      [ *methods, :to_s ].inject( @controller.instance_variable_get varname.to_sym ) do |result, method|
        result.public_send method
      end
    else
      ''
    end
  end
end
set_blank_field() click to toggle source
# File lib/phaseout/handler.rb, line 47
def set_blank_field
  Phaseout::SEOAction.new(class_index_key).add key
  Phaseout::SEOFields.new(key, as).save
end