Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ bin
dist

# IDE crud.
.iml
.project
.idea
.DS_Store
Expand Down
68 changes: 49 additions & 19 deletions README.mkd
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
AS3 Vanilla
===========

Download v0.1.3 Release Archive: [as3-vanilla-0.1.3.zip](https://dl.dropbox.com/u/4551551/github/as3-vanilla/as3-vanilla-0.1.3.zip)
Download v0.2.0 Release Archive: [as3-vanilla-0.2.0.swc](hhttps://dl.dropboxusercontent.com/u/22095429/maven/org/osflash/as3-vanilla/0.2.0/as3-vanilla-0.2.0.zip)

A lightweight library which enables a developer to extract a strongly typed Model Object from a untyped dynamic object
without having to write a single line of parsing or marshalling code. An example use case would be turning data
returned from a JSON endpoint into a Model, if you've ever written the following code, then you can benefit from this
library:

```actionscript
```
// Use a JSON library to convert a JSON String into an AS3 Object.
var jsonObject : Object = JSON.decode('{"name":"Jonny", "age": 28, "music":["nin","mew"]}');

Expand All @@ -23,7 +23,7 @@ trace(myPerson.name) // Jonny.

Using the Vanilla library, you can turn the above code into this:

```actionscript
```
// Use a JSON library to convert a JSON String into an AS3 Object.
var jsonObject : Object = JSON.decode('{"name":"Jonny", "age": 28, "music":["nin","mew"]}');

Expand All @@ -35,15 +35,15 @@ trace(myPerson.name); // "Jonny"

Things get even easier when you make use of the `extract` convenience method:

```actionscript
```
var jsonObject : Object = JSON.decode('{"name":"Jonny", "age": 28, "music":["nin","mew"]}');
var myPerson : PersonVO = extract(jsonObject, PersonVO);
```

Got a complex object graph? Well that's where Vanilla really shines, making light work of parsing and
marshalling nested objects, for example:

```actionscript
```
// The PersonVO Model contains an 'address' field which is a complex datatype (AddressVO).
package app.model {
class PersonVO {
Expand Down Expand Up @@ -77,7 +77,7 @@ Mapping Fields
Sometimes the fields on your Model object don't quite match up to the fields in your source object; not a problem,
you can use Metadata to define the mappings in your Model object:

```actionscript
```
package app.model {
public class PersonVO {
public var name : String;
Expand All @@ -93,7 +93,7 @@ Mapping to Constructor Arguments
If you're a fan of immutable models then you will want to define some Metadata to map the fields in your source object
to the constructor arguments of your Model object:

```actionscript
```
package app.model {
// Don't forget, constructor metadata is annotated to the class, not the constructor method!
[Marshall(field="name", field="age", field="music")]
Expand All @@ -116,7 +116,7 @@ Mapping to Methods / Mutators
-----------------------------
You can map the fields of your source object to a setter method in your Model object:

```actionscript
```
package app.model {
public class PersonModel {
private var _name : String;
Expand All @@ -141,7 +141,7 @@ Ignoring fields
-----------------------------
You can ignore fields by using [Transient] metadata:

```actionscript
```
package app.model {
public class PersonModel {
[Transient]
Expand All @@ -158,7 +158,7 @@ Automatic Coercion
Vanilla will automatically coerce Arrays found in your source object into Vectors defined in your target Model
Class, take the following example:

```actionscript
```
// The Target Model Class Definition.
class app.model {
public class ColourList {
Expand All @@ -176,7 +176,7 @@ trace(getQualifiedClassName(result.colours)); // __AS3__.vec::Vector.<String>
If you aren't using Vectors in your project, then you will have to give Vanilla a hand and provide it with a type hint
as to what the Array is expected to contain, for example:

```actionscript
```
// The Target Model Class Definition.
class app.model {
public class Contact {
Expand Down Expand Up @@ -209,22 +209,52 @@ trace(result.phoneNumbers); // [object PhoneNumber],[object PhoneNumber]
trace((result.phoneNumbers[0] as PhoneNumber).type) // "home".
```

Enum support
------------
Java style Enum support is implemented using the IEnum interface, which marks a class for being processed as an Enum.

An As3 example enum:

Dependencies
------------
`as3commons-reflect` is used for all reflection; in order to use as3-vanilla you will need to download and add
the following SWCs to your project's libs folder.
```
public class LocaleEnum implements IEnum {

public static var DA:LocaleEnum = new LocaleEnum("DA");
public static var EN:LocaleEnum = new LocaleEnum("EN");

private var localeName:String;

function LocaleEnum(localeName:String) {
this.localeName = localeName;
}
}
```

```
// The Target Model Class Definition.
class app.model {
public class Locale {
public var supportedLocale : LocaleEnum;
}
}

* [ascommons-reflect-1.4.1](http://projects.yoolab.org/maven/content/repositories/releases/org/as3commons/as3commons-reflect/1.4.1/as3commons-reflect-1.4.1.swc)
* [as3commons-lang-0.3.4](http://projects.yoolab.org/maven/content/repositories/releases/org/as3commons/as3commons-lang/0.3.4/as3commons-lang-0.3.4.swc)
* [as3commons-logging-2.0](http://projects.yoolab.org/maven/content/repositories/releases/org/as3commons/as3commons-logging/2.0/as3commons-logging-2.0.swc)
var source : Object = { supportedLocale:"DA" };
var result : Locale = extract(source, Locale);

trace(getQualifiedClassName(result.supportedLocale)); // LocaleEnum


```



Dependencies
------------
* [ascommons-reflect-1.6.4](https://as3-commons.googlecode.com/files/as3commons-reflect-1.6.4.swc)
* [as3commons-lang-0.3.7](https://as3-commons.googlecode.com/files/as3commons-lang-0.3.7.swc)

Future Features / Wish List
---------------------------
* The user should be able to define mapping rules without having to use Metadata.
* Caching of the InjectionMap (assuming Class definitions won't change at run time).
* Java style mutators (eg: `setFoo()`) could be mapped automatically.
* By using `as3commons-bytecode` we could perform ByteCode reflection to retrieve the names of parameters; this would
would remove the need for constructor marshalling metadata.
Expand Down
159 changes: 159 additions & 0 deletions as3-vanilla.iml
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="Flex" version="4">
<component name="FlexBuildConfigurationManager" active="as3-vanilla">
<configurations>
<configuration name="as3-vanilla" output-type="Library" output-file="as3-vanilla-0.2.0-SNAPSHOT.swc" output-folder="$MODULE_DIR$/target">
<dependencies>
<entries>
<entry library-name="Maven: com.adobe.flash.framework:playerglobal:swc:15.0" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:advancedgrids:swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:advancedgrids:rb.swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:apache:swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:apache:rb.swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:authoringsupport:swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:charts:swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:charts:rb.swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:core:swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:experimental:swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:experimental:rb.swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:flash-integration:swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:flash-integration:rb.swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:framework:swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:framework:rb.swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:osmf:swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:rpc:swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:rpc:rb.swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:spark:swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:spark:rb.swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:spark_dmv:swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:sparkskins:swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:textLayout:swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:textLayout:rb.swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:mx:swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.apache.flex.framework:mx:rb.swc:4.13.0.20140701" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.as3commons:as3commons-lang:swc:0.3.7" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.as3commons:as3commons-reflect:swc:1.6.4" library-level="project">
<dependency linkage="Merged" />
</entry>
<entry library-name="Maven: org.flexunit:flexunit:swc:as3_4.12.0:4.2.0-20140410" library-level="project">
<dependency linkage="Test" />
</entry>
<entry library-name="Maven: org.mockolate:mockolate:swc:as3:0.12.4" library-level="project">
<dependency linkage="Test" />
</entry>
<entry library-name="Maven: org.hamcrest:hamcrest-as3:swc:as3:1.2.0" library-level="project">
<dependency linkage="Test" />
</entry>
</entries>
<sdk name="Flexmojos SDK 4.13.0.20140701" />
</dependencies>
<compiler-options>
<map>
<entry key="compiler.locale" value="" />
</map>
<option name="additionalConfigFilePath" value="$MODULE_DIR$/.idea/flexmojos/as3-vanilla-org.osflash.xml" />
</compiler-options>
<packaging-air-desktop />
<packaging-android />
<packaging-ios />
</configuration>
</configurations>
<compiler-options />
</component>
<component name="NewModuleRootManager" inherit-compiler-output="false">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/as3" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="jdk" jdkName="Flexmojos SDK 4.13.0.20140701" jdkType="Flexmojos SDK Type" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" name="Maven: com.adobe.flash.framework:playerglobal:swc:15.0" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:advancedgrids:swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:advancedgrids:rb.swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:apache:swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:apache:rb.swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:authoringsupport:swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:charts:swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:charts:rb.swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:core:swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:experimental:swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:experimental:rb.swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:flash-integration:swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:flash-integration:rb.swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:framework:swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:framework:rb.swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:osmf:swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:rpc:swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:rpc:rb.swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:spark:swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:spark:rb.swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:spark_dmv:swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:sparkskins:swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:textLayout:swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:textLayout:rb.swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:mx:swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.flex.framework:mx:rb.swc:4.13.0.20140701" level="project" />
<orderEntry type="library" exported="" name="Maven: org.as3commons:as3commons-lang:swc:0.3.7" level="project" />
<orderEntry type="library" exported="" name="Maven: org.as3commons:as3commons-reflect:swc:1.6.4" level="project" />
<orderEntry type="library" exported="" name="Maven: org.flexunit:flexunit:swc:as3_4.12.0:4.2.0-20140410" level="project" />
<orderEntry type="library" exported="" name="Maven: org.mockolate:mockolate:swc:as3:0.12.4" level="project" />
<orderEntry type="library" exported="" name="Maven: org.hamcrest:hamcrest-as3:swc:as3:1.2.0" level="project" />
</component>
</module>

16 changes: 0 additions & 16 deletions build.properties

This file was deleted.

Loading