module GmailBritta::SingleWriteAccessors::ClassMethods

@!parse extend SingleWriteAccessors::ClassMethods

Public Instance Methods

single_write_accessor(name, gmail_name, &block) click to toggle source

Defines a string-typed filter accessor DSL method. Generates the `[name]`, `get_` and `output_` methods. @param name [Symbol] the name of the accessor method @param gmail_name [String] the name of the attribute in the

gmail Atom export
# File lib/gmail-britta/single_write_accessors.rb, line 23
def single_write_accessor(name, gmail_name, &block)
  direct_single_write_accessors[name] = gmail_name
  ivar = ivar_name(name)
  define_method(name) do |words|
    if instance_variable_get(ivar) and instance_variable_get(ivar) != []
      raise "Only one use of #{name} is permitted per filter"
    end
    instance_variable_set(ivar, words)
  end
  get(name, ivar)
  if block_given?
    define_method("output_#{name}") do
      instance_variable_get(ivar) && block.call(instance_variable_get(ivar)) unless instance_variable_get(ivar) == []
    end
  else
    output(name, ivar)
  end
end
single_write_accessors() click to toggle source

@return [Array<Symbol>] the single write accessors defined on

this class and every superclass.
# File lib/gmail-britta/single_write_accessors.rb, line 10
def single_write_accessors
  super_accessors = {}
  if self.superclass.respond_to?(:single_write_accessors)
    super_accessors = self.superclass.single_write_accessors
  end
  super_accessors.merge(direct_single_write_accessors)
end
single_write_boolean_accessor(name, gmail_name) click to toggle source

Defines a boolean-typed filter accessor DSL method. If the method gets called in the filter definition block, that causes the value to switch to `true`. @note There is no way to turn these boolean values back off in

Gmail's export XML.

@param name [Symbol] the name of the accessor method @param gmail_name [String] the name of the attribute in the

gmail Atom export
# File lib/gmail-britta/single_write_accessors.rb, line 50
def single_write_boolean_accessor(name, gmail_name)
  direct_single_write_accessors[name] = gmail_name
  ivar = ivar_name(name)
  define_method(name) do |*args|
    value = args.length > 0 ? args[0] : true
    if instance_variable_get(ivar)
      raise "Only one use of #{name} is permitted per filter"
    end
    instance_variable_set(ivar, value)
  end
  get(name, ivar)
  output(name, ivar)
end

Private Instance Methods

direct_single_write_accessors() click to toggle source
# File lib/gmail-britta/single_write_accessors.rb, line 82
def direct_single_write_accessors
  @direct_single_write_accessors ||= {}
end
get(name, ivar) click to toggle source
# File lib/gmail-britta/single_write_accessors.rb, line 70
def get(name, ivar)
  define_method("get_#{name}") do
    instance_variable_get(ivar)
  end
end
ivar_name(name) click to toggle source
# File lib/gmail-britta/single_write_accessors.rb, line 66
def ivar_name(name)
  :"@#{name}"
end
output(name, ivar) click to toggle source
# File lib/gmail-britta/single_write_accessors.rb, line 76
def output(name, ivar)
  define_method("output_#{name}") do
    instance_variable_get(ivar)
  end
end