36 lines
665 B
Ruby
36 lines
665 B
Ruby
|
module DocumentResource
|
||
|
def field name, options = {}
|
||
|
attributes = self.instance_variable_get :@attributes
|
||
|
attributes[name.to_sym] = Document::OPTIONS.merge(options)
|
||
|
|
||
|
create_reader_for name
|
||
|
create_writer_for name
|
||
|
end
|
||
|
|
||
|
def mod
|
||
|
if !@mod
|
||
|
@mod = Module.new
|
||
|
self.class_eval do
|
||
|
include @mod
|
||
|
end
|
||
|
end
|
||
|
@mod
|
||
|
end
|
||
|
|
||
|
def create_reader_for name
|
||
|
mod.module_eval <<-RUBYCODE
|
||
|
def #{name.to_s}
|
||
|
attribute_get :#{name}
|
||
|
end
|
||
|
RUBYCODE
|
||
|
end
|
||
|
|
||
|
def create_writer_for name
|
||
|
mod.module_eval <<-RUBYCODE
|
||
|
def #{name.to_s}= o
|
||
|
attribute_set :#{name}, o
|
||
|
end
|
||
|
RUBYCODE
|
||
|
end
|
||
|
end
|