Flex for Rails Scaffolding (cont) – the controller template

I’ve made a little improvement  to my development process, in such a way that the scaffolding i do for creating the web services I later use for my flex client are generated in their final form without the need to adjust them.
What i did was make some changes to the controller scaffold template.
The controller.rb template file is located at: [Ruby Home]\lib\ruby\gems\1.8\gems\rails-2.3.4\lib\rails_generator\generators\components\scaffold\templates

Backup the original (or pick it up from here).
Download the modified template

The Template should end up looking like:

class <%= controller_class_name %>Controller < ApplicationController
# GET /<%= table_name %>
# GET /<%= table_name %>.xml
def index
@<%= file_name %> = <%= class_name %>.all
render :xml => @<%= file_name %>
end

# GET /<%= table_name %>/1
# GET /<%= table_name %>/1.xml
def show
@<%= file_name %> = <%= class_name %>.find(params[:id])
render :xml => @<%= file_name %>
end

# GET /<%= table_name %>/new
# GET /<%= table_name %>/new.xml
def new
@<%= file_name %> = <%= class_name %>.new
render :xml => @<%= file_name %>
end

# GET /<%= table_name %>/1/edit
def edit
@<%= file_name %> = <%= class_name %>.find(params[:id])
render :xml => @<%= file_name %>
end

# POST /<%= table_name %>
# POST /<%= table_name %>.xml
def create
@<%= file_name %> = <%= class_name %>.new(params[:<%= file_name %>])
if @<%= file_name %>.save
render :xml => {:notice => ‘<%= class_name %> was successfully created.’}
else
render :xml => {:notice => @<%= file_name %>.errors}
end
end

# PUT /<%= table_name %>/1
# PUT /<%= table_name %>/1.xml
def update
@<%= file_name %> = <%= class_name %>.find(params[:id])

if <%= file_name %>.update_attributes(params[:<%= file_name %>])
render :xml => {:notice => ‘<%= class_name %> was successfully updated.’}
else
render :xml => {:notice => @<%= file_name %>.errors}
end
end

# DELETE /<%= table_name %>/1
# DELETE /<%= table_name %>/1.xml
def destroy
@<%= file_name %> = <%= class_name %>.find(params[:id])
@<%= file_name %>.destroy

render :xml => {:notice => ‘<%= class_name %> was successfully deleted.’}
end
end

Posted in Software Development | Leave a comment

Passing a Byte Array through JSON

Its a well known issue when communicating complex structures between client and server, using the JSON encoding.
I’ve encountered it when attempting to transfer an encrypted Byte Array back and forth between a client and server, that communicate via JSON.

What doesn’t work:
Base64 encodings and conversions to string formats

What does work:
Converting the Byte[] to a number array and back

Here is an example code in Flex (works just as well in Java / PHP / Python etc)

original post from giladmanor.com

Posted in Software Development | Leave a comment

Flex For Rails Scaffold

I’ve written a little component for connecting flex with rails scaffold as close as possible.

Step 1: Create a scaffold for Card

Within your rails application run the script:

./script/generate scaffold card id:integer timeStamp:timestamp data:text

(data types with Ruby and mySQL)

Step 2: Change the Card controller

Edit the Card Controller found at: myApp/app/controllers/cards_controller.rb and remove all view elements. this will make the controller omit pure XML structures

should result with the controller looking like:

class CardsController < ApplicationController

# GET /cards
# GET /cards.xml
def index
@cards = Card.all
render :xml => @cards
end

# GET /cards/1
# GET /cards/1.xml
def show
@card = Card.find(params[:id])
render :xml => @card
end

# GET /cards/new
# GET /cards/new.xml
def new
@card = Card.new
render :xml => @card
end

# GET /cards/1/edit
def edit
@card = Card.find(params[:id])
render :xml => @card
end

# POST /cards
# POST /cards.xml
def create
@card = Card.new(params[:card])
if @card.save
render :xml => {:notice => ‘Card was successfully updated.’}
else
render :xml => {:notice => @card.errors}
end

end

# PUT /cards/1
# PUT /cards/1.xml
def update
@card = Card.find(params[:id])

if @card.update_attributes(params[:card])
render :xml => {:notice => ‘Card was successfully updated.’}
else
render :xml => {:notice => @card.errors}
end

end

# DELETE /cards/1
# DELETE /cards/1.xml
def destroy
@card = Card.find(params[:id])
@card.destroy
render :xml => {:notice => ‘Card was successfully updated.’}

end
end

Step 3: Client Side

To connect to the Rails server use an intermediate adapter called ActiveResourceClient.as

For testing, use the ServiceTester.mxml

original post: giladmanor.com
good luck

Posted in Software Development | Leave a comment