lib/prospecto/presenter_view.rb in prospecto-0.0.9 vs lib/prospecto/presenter_view.rb in prospecto-0.1.1

- old
+ new

@@ -9,22 +9,45 @@ raise ArgumentError.new("Unknown property '#{name}' for class '#{self.class.name}'.") end end end + def method_missing(name, *args, &block) + if property_name = self.class.__properties.find{|m| name.to_s.start_with? "#{m}_"} + field_name = name.to_s.sub("#{property_name}_", "") + self.send(property_name).send(field_name) + else + super + end + end + class << self - # "Presents" means a member will be reflected out to the view + # "Presents" means a member will be reflected out to the view. Use of presents should be + # limited to very special cases. alias :presents :attr_reader + def __properties + @__properties ||= [] + end + # Accepts means the view uses the member internally, but it is not available # outside the class. def accepts(*args) args.each do |name| define_method name do instance_variable_get("@#{name}") end protected name end + end + + # Proxies means that the properties of the object can be accessed directly from this object + # when prefixed with the object name. (ie: @view.user_full_name) + def proxies(*args) + args.each do |name| + __properties << name + end + accepts(*args) end end end end