<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -11,28 +11,48 @@ Copyright:
 */
 var SubtleTransformer = new Class({
 	
-	initialize: function(obj, keys, _set, _get){
-		keys = $splat(keys);
-		this.obj = obj;
+	initialize: function(obj, options){
+		var self = this;
+		self.obj = obj;
 		
-		_set &amp;&amp; (this._set = _set);
-		_get &amp;&amp; (this._get = _get);
+		switch($type(options)){
+		case 'string':
+		case 'array':
+			self.keys = $splat(options);
+			break;
+		case 'hash':
+		case 'object':
+			options.keys &amp;&amp; (this.keys = $splat(options.keys));
+			options.get &amp;&amp; (this._get = options.get);
+			options.set &amp;&amp; (this._set = options.set);
+			break;
+		}
 		
-		var self = this;
-		this.set = function(keyOrValue, value) {
-			if (value==undefined)
-				return self.obj.set(keys[0], self._set(keyOrValue));
-			else
-				return self.obj.set(key, self._set(value));
+		self.set = function(key, value) {
+			if (self.keys &amp;&amp; self.keys.length &amp;&amp; value==undefined){
+				value = key;
+				self.keys.each(function(key){
+					self.obj.set(key, self._set(value));
+				});
+				return self;
+			}else{
+				self.obj.set(key, self._set(value));
+				return self;
+			}
 		};
-		this.get = function(key) {
-			if (key==undefined)
-				return self._get( self.obj.get(keys[0]) );
-			else
+		
+		self.get = function(key) {
+			if (self.keys &amp;&amp; self.keys.length &amp;&amp; key==undefined){
+				if (self.keys.length == 1)
+					return self._get( self.obj.get(self.keys[0]) );
+				return self.keys.map(function(key){
+					return self._get( self.obj.get(key) );
+				});
+			}else
 				return self._get( self.obj.get(key) );
 		};
 		
-		keys.each(function(key){
+		self.keys &amp;&amp; self.keys.each(function(key){
 			self['set' + String.camelCase(key).capitalize()] = function(value) {
 				return self.obj.set(key, self._set(value));
 			};</diff>
      <filename>Source/Plugins/SubtleTransformer.js</filename>
    </modified>
    <modified>
      <diff>@@ -14,8 +14,153 @@ describe('SubtleTransformer', {
 	'after all': function(){
 	},
 
-	'should do what it was designed to do': function(){
+	'should exist': function(){
 		value_of( SubtleTransformer ).should_not_be_undefined();
+	},
+
+	'should implement get and set': function(){
+		value_of( $type(new SubtleTransformer().get) ).should_be('function');
+		value_of( $type(new SubtleTransformer().set) ).should_be('function');
+	},
+
+	'should pass get and set messages to wrapped object': function(){
+		var myObject = {
+			get: function(){ myObject.gotten = true; return 'myObject.get'; },
+			set: function(){ myObject.wasSet = true; return 'myObject.set'; }
+		};
+		var myObjectTransformer = new SubtleTransformer(myObject);
+		
+		value_of(myObjectTransformer.get()).should_be('myObject.get');
+		value_of(myObjectTransformer.set()).should_be(myObjectTransformer);
+		
+		value_of(myObject.gotten).should_be_true();
+		value_of(myObject.wasSet).should_be_true();
+	},
+
+	'should pass get and set messages to wrapped object with keys': function(){
+		var myObject = $H({
+			name:&quot;Tom&quot;,
+			address:&quot;123 address st&quot;,
+			phone:3692581470
+		});
+		var myObjectTransformer = new SubtleTransformer(myObject);
+		
+		value_of(myObjectTransformer.get('name')).should_be('Tom');
+		value_of(myObjectTransformer.set('name',&quot;fred&quot;)).should_be(myObjectTransformer);
+		value_of(myObjectTransformer.get('name')).should_be('fred');
+	},
+
+	'should accept key argument and then assumes that key as the default': function(){
+		var myObject = $H({
+			name:&quot;Tom&quot;,
+			address:&quot;123 address st&quot;,
+			phone:3692581470
+		});
+		var myObjectTransformer = new SubtleTransformer(myObject, 'name');
+		
+		value_of(myObjectTransformer.get()).should_be('Tom');
+		value_of(myObjectTransformer.set(&quot;fred&quot;)).should_be(myObjectTransformer);
+		value_of(myObjectTransformer.get()).should_be('fred');
+	},
+
+	'should accept key argument and still work with keys normally': function(){
+		var myObject = $H({
+			name:&quot;Tom&quot;,
+			address:&quot;123 address st&quot;,
+			phone:3692581470
+		});
+		var myObjectTransformer = new SubtleTransformer(myObject, 'name');
+		
+		value_of(myObjectTransformer.get('name')).should_be('Tom');
+		value_of(myObjectTransformer.set('name',&quot;fred&quot;)).should_be(myObjectTransformer);
+		value_of(myObjectTransformer.get('name')).should_be('fred');
+		
+		value_of(myObjectTransformer.get('phone')).should_be(3692581470);
+		value_of(myObjectTransformer.set('phone',&quot;Tom&quot;)).should_be(myObjectTransformer);
+		value_of(myObjectTransformer.get('phone')).should_be('Tom');
+	},
+
+	'should accept multiple keys and effect all by default': function(){
+		var myObject = $H({
+			name:&quot;Tom&quot;,
+			address:&quot;123 address st&quot;,
+			phone:3692581470
+		});
+		var myObjectTransformer = new SubtleTransformer(myObject, ['name', 'address', 'phone'] );
+		
+		// Getting should get an array of all the values
+		value_of(myObjectTransformer.get()).should_be(['Tom', '123 address st', 3692581470]);
+		
+		// Setting a value should set all three
+		value_of(myObjectTransformer.set(&quot;fred&quot;)).should_be(myObjectTransformer);
+		value_of(myObjectTransformer.get()).should_be(['fred','fred','fred']);
+	},
+
+	'should accept a getter passthrough function': function(){
+		var myObject = $H({
+			name:&quot;Tom&quot;,
+			address:&quot;123 address st&quot;,
+			phone:3692581470
+		});
+		var get = function(value){ return &quot;got: &quot; + value; };
+		var myObjectTransformer = new SubtleTransformer(myObject, {get:get} );
+		
+		value_of(myObjectTransformer.get('name')).should_be('got: Tom');
+	},
+	
+	'should accept a setter passthrough function': function(){
+		var myObject = $H({
+			name:&quot;Tom&quot;,
+			address:&quot;123 address st&quot;,
+			phone:3692581470
+		});
+		var set = function(value){ return &quot;set: &quot; + value; };
+		var myObjectTransformer = new SubtleTransformer(myObject, {set:set} );
+		
+		value_of(myObjectTransformer.set('name',&quot;fred&quot;)).should_be(myObjectTransformer);
+		value_of(myObjectTransformer.get('name')).should_be('set: fred');
+	},
+	
+	'':function(){}
+
+});
+
+
+
+/*
+describe('SubtleTransformer.Boolean', {
+
+	'before all': function(){
+	},
+
+	'after all': function(){
+	},
+
+	'should exist': function(){
+		value_of( SubtleTransformer.Boolean ).should_not_be_undefined();
+	},
+
+	'should implement get and set': function(){
+		value_of( $type(new SubtleTransformer.Boolean().get) ).should_be('function');
+		value_of( $type(new SubtleTransformer.Boolean().set) ).should_be('function');
+	},
+
+	'should pass get and set messages to wrapped object': function(){
+		var myObject = $H({
+			&quot;true&quot;:1,
+			&quot;false&quot;:0
+		});
+		var myObjectTransformer = new SubtleTransformer.Boolean(myObject);
+		
+		value_of(myObjectTransformer.get(&quot;true&quot;)).should_be_true();
+		value_of(myObjectTransformer.set(&quot;true&quot;,)).should_be_true();
+		
+		value_of(myObject.gotten).should_be_true();
+		value_of(myObject.wasSet).should_be_true();
 	}
 
 });
+*/
+
+
+</diff>
      <filename>Specs/Plugins/SubtleTransformer.js</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>a7a5d5b6e813e7314291aae986b81c06461d9405</id>
    </parent>
  </parents>
  <author>
    <name>Thomas Aylott</name>
    <email>oblivious+git@subtlegradient.com</email>
  </author>
  <url>http://github.com/subtleGradient/mootools-mvc-transformer/commit/a68155592bf6d47a171d5a3b789dcc04fef54375</url>
  <id>a68155592bf6d47a171d5a3b789dcc04fef54375</id>
  <committed-date>2008-12-24T17:00:32-08:00</committed-date>
  <authored-date>2008-12-24T17:00:32-08:00</authored-date>
  <message>passing specs</message>
  <tree>0415af9717e1001eab4afaafddda19c18fcf4fbe</tree>
  <committer>
    <name>Thomas Aylott</name>
    <email>oblivious+git@subtlegradient.com</email>
  </committer>
</commit>
