require File.dirname(__FILE__) + '/table_less' class Model < Tableless column :a, :string column :b, :string column :c, :string end class ExtModel < Model #Hmm, it seems like these columns won't be inherited by #subclassing!? Don't mind yet... column :a, :string column :b, :string column :c, :string column :d, :string end class ToJsonOptionsTest < Test::Unit::TestCase def setup Model.reset_to_json_options ExtModel.reset_to_json_options @i=Model.new @ei=ExtModel.new @o=Model.new @eo=ExtModel.new end def transform_base context=nil @o.from_json(@i.to_json(:context=>context)) end def transform_extended context=nil @eo.from_json(@ei.to_json(:context=>context)) end def test_without_options @i.a="av" transform_base assert @o.a assert_nil @o.b assert_nil @o.c end def test_with_only @i.a="av" Model.to_json_options :only=>:a transform_base assert @o.a assert_nil @o.b end def test_with_two_onlies @i.a="av" @i.b="ab" Model.to_json_options :only=>:a Model.to_json_options :only=>:b transform_base assert @o.a assert @o.b assert_nil @o.c end def test_with_subclass @ei.a="av" @ei.b="ab" @ei.c="ac" ExtModel.to_json_options :except=>:b #set except b in a derived class transform_extended assert @eo.a assert_nil @eo.b assert @eo.c end def test_with_subclass_and_option_in_base_class @ei.a="av" @ei.b="ab" @ei.c="ac" Model.to_json_options :only=>:a transform_extended assert @eo.a assert_nil @eo.b assert_nil @eo.c end def test_with_context @ei.a="av" @ei.b="ab" @ei.c="ac" ExtModel.to_json_options :context1, :only=>:a ExtModel.to_json_options :context2, :only=>:b transform_extended :context1 assert @eo.a assert_nil @eo.b #reset the @eo instance, because from_json doesn't overwrite #attributes, that were not defined (@eo.a would still contain "av") @eo=ExtModel.new transform_extended :context2 assert_nil @eo.a assert @eo.b end end