<commit_before># Rhodes 

## Introduction

Rhodes is a framework for building locally executing, device-optimized mobile applications. These applications are optimized for interacting with transactional enterprise application backends. It is also designed to work with synced local data using a local database such as SQLite or HSQLDB and a generic backend synchronization framework such as [RhoSync](../rhosync) (another open source component available from [Rhomobile](http://rhomobile.com)). Rhodes is available for iPhone, Research in Motion (Blackberry), Windows Mobile, and Android phones.

The [Tutorial](tutorial) describes how to install Rhodes and start on building your apps. The rest of this Developer Reference covers all Rhodes features.

## Supported Operating Systems
### BlackBerry
BlackBerry 4.6, 4.7, 5.0, 6.0

NOTE: 4.2 and 4.5 are supported but database access is very slow on this devices.

### Windows Mobile
Windows Mobile 6.1 Professional, 6.0 Standard

### Android
Android 1.6 and greater

### iPhone
All versions of iPhone 3.0 or greater, iPad

## Rhodes Application

Rhodes Application is a web application running locally on the device. It is implement standard MVC architecture:

* Views are set of ERB templates, HTML, CSS, and JavaScript files executed by the WebView control available on the device and served by the local web server. That server is very lightweight web server running on the device. See [User Interface](ui) section for more details on [Layouts](ui#view-layouts), [CSS framework](ui#css-framework), [JavaScrip frameworks](ui#javascript-frameworks), [Menus](ui#menu), and [Native UI elements](ui#native-toolbar-control) you may use in the View.  
* Controllers are set of usually very simple Ruby scripts in controller.rb files. You have access to many [native device capabilities](device-caps) from your controllers.
* Models are defined by a Ruby script in model.rb file.

See Rhodes [App Structure](application) topic for more details.

You may generate Rhodes Application using [rhodes](generator) utility. 

## Contributing
Want to add features to Rhodes? Found a bug that you want report or fix?

### Report Rhodes Issues
Please report bugs/features/enhancements to the [google group](http://groups.google.com/group/rhomobile).

### Run Rhodes Specs
First run the rhodes specs to make sure your environment is up-to-date for development (currently the specs only run on OSX):

[Fork](http://help.github.com/forking/)  the [Rhodes repository](http://github.com/rhomobile/rhodes).

Clone your new repo: 
	:::term
	$ git clone git://github.com/<yourhandle>/rhodes.git
	$ cd rhodes
	$ bin/rhodes-setup

Run Rhodes framework_spec and phone_spec targets
	:::term
	$ rake run:allspecs 


If everything passes (pending specs are OK), then your environment is ready for development. If you have trouble installing a particular gem or the specs just won't run properly, please feel free to ping the [rhomobile google group](mailto:<EMAIL>) or [hop on IRC](http://webchat.freenode.net/?channels=rhomobile) to chat with other Rhodes developers.

### Contributing your Patch
Now that you're environment is ready, make your changes!

Create a topic branch:
	:::term
	$ git checkout -b cool_new_feature
	
Write tests, [for example](http://github.com/rhomobile/rhodes/blob/a905e9c9781bfe6e5003e8c8a11cd5418b08df73/spec/framework_spec/app/spec/rhom_object_spec.rb#L239).

Make changes...

Add relevant documentation (RDoc, update the README if relevant)

Push to your branch:
	:::term
	$ git push origin cool_new_feature

Send a note to the [google group](http://groups.google.com/group/rhomobile)

That's it! We recommend following [these ruby style guidelines](http://github.com/chneukirchen/styleguide/blob/master/RUBY-STYLE) when coding.

If you are interested us using your patch to Rhodes you will need to submit a [contribution agreement](http://rhomobile.com/community/contributing/) to us.

## Framework Architecture

TBD

<commit_msg>doc: added rhodes framework img to intro topic<commit_after># Rhodes 

## Introduction

Rhodes is a framework for building locally executing, device-optimized mobile applications. These applications are optimized for interacting with transactional enterprise application backends. It is also designed to work with synced local data using a local database such as SQLite or HSQLDB and a generic backend synchronization framework such as [RhoSync](../rhosync) (another open source component available from [Rhomobile](http://rhomobile.com)). Rhodes is available for iPhone, Research in Motion (Blackberry), Windows Mobile, and Android phones.

The [Tutorial](tutorial) describes how to install Rhodes and start on building your apps. The rest of this Developer Reference covers all Rhodes features.

## Supported Operating Systems
### BlackBerry
BlackBerry 4.6, 4.7, 5.0, 6.0

NOTE: 4.2 and 4.5 are supported but database access is very slow on this devices.

### Windows Mobile
Windows Mobile 6.1 Professional, 6.0 Standard

### Android
Android 1.6 and greater

### iPhone
All versions of iPhone 3.0 or greater, iPad

## Rhodes Application

Rhodes Application is a web application running locally on the device. It is implement standard MVC architecture:

* Views are set of ERB templates, HTML, CSS, and JavaScript files executed by the WebView control available on the device and served by the local web server. That server is very lightweight web server running on the device. See [User Interface](ui) section for more details on [Layouts](ui#view-layouts), [CSS framework](ui#css-framework), [JavaScrip frameworks](ui#javascript-frameworks), [Menus](ui#menu), and [Native UI elements](ui#native-toolbar-control) you may use in the View.  
* Controllers are set of usually very simple Ruby scripts in controller.rb files. You have access to many [native device capabilities](device-caps) from your controllers.
* Models are defined by a Ruby script in model.rb file.

See Rhodes [App Structure](application) topic for more details.

You may generate Rhodes Application using [rhodes](generator) utility. 

## Contributing
Want to add features to Rhodes? Found a bug that you want report or fix?

### Report Rhodes Issues
Please report bugs/features/enhancements to the [google group](http://groups.google.com/group/rhomobile).

### Run Rhodes Specs
First run the rhodes specs to make sure your environment is up-to-date for development (currently the specs only run on OSX):

[Fork](http://help.github.com/forking/)  the [Rhodes repository](http://github.com/rhomobile/rhodes).

Clone your new repo: 
	:::term
	$ git clone git://github.com/<yourhandle>/rhodes.git
	$ cd rhodes
	$ bin/rhodes-setup

Run Rhodes framework_spec and phone_spec targets
	:::term
	$ rake run:allspecs 


If everything passes (pending specs are OK), then your environment is ready for development. If you have trouble installing a particular gem or the specs just won't run properly, please feel free to ping the [rhomobile google group](mailto:<EMAIL>) or [hop on IRC](http://webchat.freenode.net/?channels=rhomobile) to chat with other Rhodes developers.

### Contributing your Patch
Now that you're environment is ready, make your changes!

Create a topic branch:
	:::term
	$ git checkout -b cool_new_feature
	
Write tests, [for example](http://github.com/rhomobile/rhodes/blob/a905e9c9781bfe6e5003e8c8a11cd5418b08df73/spec/framework_spec/app/spec/rhom_object_spec.rb#L239).

Make changes...

Add relevant documentation (RDoc, update the README if relevant)

Push to your branch:
	:::term
	$ git push origin cool_new_feature

Send a note to the [google group](http://groups.google.com/group/rhomobile)

That's it! We recommend following [these ruby style guidelines](http://github.com/chneukirchen/styleguide/blob/master/RUBY-STYLE) when coding.

If you are interested us using your patch to Rhodes you will need to submit a [contribution agreement](http://rhomobile.com/community/contributing/) to us.

## Framework Architecture

<img src='/images/rhodes-framework.png'/>



{'fraction_non_alphanumeric': 0.08298084100522518, 'fraction_numerical': 0.011943269470017417, 'mean_word_length': 4.906686260102865, 'pattern_counts': {'":': 0, '<': 8, '<?xml version=': 0, '>': 8, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7516684', 'n_tokens_mistral': 2334, 'n_tokens_neox': 2159, 'n_words': 970}