Swftly - I don't like swf files.

Swftly is a tiny gem that abstracts interactions with Google's Swiffy service, which does a decent job of providing a Javascript-driven equivalent/alternative to a swf file. This project came about because I needed to push something like 6,000 individual swfs through Swiffy. I guess I could have used Google's Flash extension, but making a gem seemed like more fun.

License

Check the LICENSE file.

Dependencies

Installation...

$ gem install swftly

Or, in your Gemfile:

gem 'swftly'

Using Swftly

the_swf = '/absolute/path/to/yourfile.swf'
swftly = Swftly.new(the_swf) #fire her up
swftly.swiff #send the_swf off to Google's hosted service for conversion

#the runtime class has info about Swiffy's client-side runtime.js
swftly.runtime.version #=> "v5.2"
swftly.runtime.url     #=> "https://www.gstatic.com/swiffy/v5.2/runtime.js"

#the converted class lets you work with the markup/javascript generated by Swiffy
swftly.converted.markup           #=> returns the complete html document generated by Swiffy
swftly.converted.json_definition  #=> returns just the javascript that creates the swiffyobject json object

#Without auto_processig
the_swf = '/absolute/path/to/yourfile.swf'
swftly = Swftly.new(the_swf, false) #don't auto process
swftly.swiff #send the_swf off to Google's hosted service for conversion

if swftly.converter_response_code == 200 #success!
  swftly.process! #buildout the Runtime and Converted stuffs
  ...
  #do some persistence or rendering or whatevs
else
  ...
  #do something fancy here like raise a warning or requeue
end

Under the Hood

Swftly takes two arguments, both optional, when instantiating. The first is a String representing the path to a swf file and is accessible on the object as swf_path. The second, available on the object as auto_process, is a boolean that, when true, automatically triggers post-processing the conversion result. This post-processing creates and populates the Runtime and Converted class objects.

If auto_process is false, calling Swftly#swiff will post the swf to Swiffy and set Swftly.converter_response_code and Swftly.raw. This is helpful if you're batching many swfs for conversion because it allows for confirmation of a successful conversion (response code == 200) before trying to do any of the post-processing.

Also, both swf_path and auto_process are attr_accessible. Setting a new swf_path and calling Swftly#swiff will generate a new set of conversion data, allowing one instance to perform many conversions.

Development & Contact

Please feel free to contribute fixes and features via fork'n'pull. Drop tests into spec/. If you wanna talk about Swftly (or most anything else, really), I'm most reachable at @_jnf.