------ art_18102_10160252.1188153255817 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline On 8/20/07, Mario T. Lanza <mlanza / comcast.net> wrote: > > I am trying to use 'aspectr' to add aspects to Rails FormHelpers like > 'text_field'. I want the aspects to be able to intercept the return > value and modify it so that the original method call 'text_field' > returns the value that I modified in the aspect. > > It appears to me that aspects do not allow return values to be modified. > Too bad. This would have perfectly met the need I am after. I want to > add extra markup surrounding the 'input' markup in order to standardize > my views in a DRY way. > > I don't really want to fool with the original FormHelpers because I want > my add-on to be modular and separate. I considered inheriting to create > a new FormHelper, but thought better of it, since aspects seemed more > suited. > > Am I wrong about aspects? Can they intercept and modify return values? > If not, what are the alternatives? > > I am working on a library that will DRY up my presentation logic. > Eventually, if I can overcome these hurdles, I intend to open source the > library. > > Thanks Much! > Mario T. Lanza > -- > Posted via http://www.ruby-forum.com/. I'm not sure about aspectr, but the convention for most AOP frameworks is that "after" advice, which runs after the method, in this case, cannot change the value that is actually returned to the caller. Instead, you have to use "around" advice, where you explicit invoke the wrapped method (in a way that is defined by the AOP toolkit), modify the value returned, as desired, and finally return the resulting value to the original caller. This is how Aquarium works (sort-of...), the AOP framework for Ruby that I released earlier this week. (http://aquarium.rubyforge.org) In this case, you could do what you want this way: # inside your FormHelpers "helper" file around :types /FormHelper$/, :methods [...?] do | join_point, *args | result roceed # Call the "wrapped" method result + <my-mark-up>..." end I believe that aspectr has similar behavior. Currently, Aquarium does allow "after" (and the more restrictive "after_returning") advice to modify the value returned to the caller: after_returning :types /FormHelper$/, :methods [...?] do | join_point, *args | join_point.context.returned_value <some-mark-up>..." + join_point.context.returned_value + "<some-more-mark-up..." end However, this may change, so I wouldn't count on this behavior in surviving... dean -- Dean Wampler http://www.objectmentor.com http://www.aspectprogramming.com http://aquarium.rubyforge.org http://www.contract4j.org ------ art_18102_10160252.1188153255817--