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