Permalink
Fetching contributors…
Cannot retrieve contributors at this time
77 lines (66 sloc) 2.56 KB
module ResourceController # :nodoc:
module Accessors # :nodoc:
private
def block_accessor(*accessors)
accessors.each do |block_accessor|
class_eval <<-"end_eval", __FILE__, __LINE__
def #{block_accessor}(*args, &block)
unless args.empty? && block.nil?
args.push block if block_given?
@#{block_accessor} = [args].flatten
end
@#{block_accessor}
end
end_eval
end
end
def scoping_reader(*accessor_names)
accessor_names.each do |accessor_name|
class_eval <<-"end_eval", __FILE__, __LINE__
def #{accessor_name}(&block)
@#{accessor_name}.instance_eval &block if block_given?
@#{accessor_name}
end
end_eval
end
end
def class_scoping_reader(accessor_name, start_value)
write_inheritable_attribute accessor_name, start_value
class_eval <<-"end_eval", __FILE__, __LINE__
def self.#{accessor_name}(&block)
read_inheritable_attribute(:#{accessor_name}).instance_eval(&block) if block_given?
read_inheritable_attribute(:#{accessor_name})
end
end_eval
end
def reader_writer(accessor_name)
class_eval <<-"end_eval", __FILE__, __LINE__
def #{accessor_name}(*args, &block)
args << block unless block.nil?
@#{accessor_name} = args.first unless args.empty?
@#{accessor_name}
end
end_eval
end
def class_reader_writer(*accessor_names)
accessor_names.each do |accessor_name|
class_eval <<-"end_eval", __FILE__, __LINE__
def self.#{accessor_name}(*args)
unless args.empty?
write_inheritable_attribute :#{accessor_name}, args.first if args.length == 1
write_inheritable_attribute :#{accessor_name}, args if args.length > 1
end
read_inheritable_attribute :#{accessor_name}
end
def #{accessor_name}(*args)
unless args.empty?
self.class.write_inheritable_attribute :#{accessor_name}, args.first if args.length == 1
self.class.write_inheritable_attribute :#{accessor_name}, args if args.length > 1
end
self.class.read_inheritable_attribute :#{accessor_name}
end
end_eval
end
end
end
end