## Recess You know... to break up your classes. ### Inside You can make classes that completely encapsulate behavior and have a defined interface with a parent object. For example, let's define the behavior. class TestInside1 < Recess::Inside::Base parent_instance :foo def my_method "yes: #{foo}" end def other_method "no" end end This has methods that interact with the parent's foo method. This is then included within the parent. The parent also declares what method it wants from the inside class. class TestContainer1 inside TestInside1, :my_method def initialize(val) @val = val end def foo @val end end Technically, calling the inside method, defines a method on the parent that delegates to the inner class. Note that in the above other_method is not actually available on the parent, but my_method is. The parent_instance method does something similar to get/set data on the parent. Why would you want to do such a thing? * TestInside1 is completely testable as a standalone class * The inner class can be shared among models but the surface area of the inside class is minimized to only what is needed * Understanding dependencies through these strict mechanisms helps understand the impact of changes to shared code ### Outside The other functionality is for class methods and stretches the metaphor a bit. module TestOutside1 recess_group :something do def self.test_class_method "class_level" end def test_instance_method "instance_level" end end recess_group :else do def self.other_test_class_method "class_level2" end def other_test_instance_method "instance_level2" end end end class TestOutsideExample1 outside TestOutside1, :something end It's like doing an include but with a certain name. In the above, only the :something group is included into TestOutsideExample1. Again, this is mainly about understanding dependencies. Copyright (c) 2011 Brian Leonard, released under the MIT license