amfora 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/amfora.rb ADDED
@@ -0,0 +1,2 @@
1
+ $:.unshift File.expand_path(File.dirname(__FILE__))
2
+ require 'amf'
data/lib/rack/amf.rb ADDED
@@ -0,0 +1,12 @@
1
+ require 'rack'
2
+ require 'amf'
3
+
4
+ require 'rack/amf/application'
5
+
6
+ module Rack::AMF
7
+ APPLICATION_AMF = 'application/x-amf'.freeze
8
+
9
+ def self.new(app, options={})
10
+ Rack::AMF::Application.new(app, options)
11
+ end
12
+ end
@@ -0,0 +1,54 @@
1
+ module Rack::AMF
2
+ class Application
3
+ def initialize(app, options = {})
4
+ @app = app
5
+ @options = options
6
+ end
7
+
8
+ def call(env)
9
+ # Check if we should handle it
10
+ return @app.call(env) if env['CONTENT_TYPE'] != APPLICATION_AMF
11
+
12
+ # Parse request and response
13
+ env['rack.input'].rewind
14
+ request = ::AMF::Request.new.populate_from_stream(env['rack.input'].read)
15
+ env['rack-amf.request'] = request
16
+
17
+ response = ::AMF::Response.new
18
+ response.amf_version = request.amf_version == 3 ? 3 :0
19
+ env['rack-amf.response'] = response
20
+
21
+ target_uri = request.message.response_uri
22
+ if request.message.data.is_a?(::AMF::Messages::CommandMessage)
23
+ if request.message.data.operation == ::AMF::Messages::CommandMessage::CLIENT_PING_OPERATION
24
+ data = ::AMF::Messages::AcknowledgeMessage.new(request.message.data)
25
+ else
26
+ data = ::AMF::Messages::ErrorMessage.new(Exception.new("CommandMessage #{request.message.data.operation} not implemented"),
27
+ request.message.data)
28
+ end
29
+ elsif request.message.data.is_a?(::AMF::Messages::RemotingMessage)
30
+ am = ::AMF::Messages::AcknowledgeMessage.new(request.message.data)
31
+
32
+ env["REQUEST_PATH"] = env["REQUEST_URI"] = request.message.data.source
33
+ env["REQUEST_METHOD"] = request.message.data.operation
34
+
35
+ status, headers, app_response = @app.call(env)
36
+
37
+ if !app_response.body.is_a?(String)
38
+ am.body = app_response.body.to_amf
39
+ else
40
+ am.body = app_response.body
41
+ end
42
+ data = am
43
+ end
44
+
45
+ target_uri += data.is_a?(::AMF::Messages::ErrorMessage) ? '/onStatus' : '/onResult'
46
+
47
+ response.message = ::AMF::Message.new(target_uri, '', data.to_amf({:amf_version => response.amf_version}))
48
+
49
+ # Calculate length and return result
50
+ result = response.to_s
51
+ [200, {"Content-Type" => APPLICATION_AMF, 'Content-Length' => result.length.to_s}, [result]]
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,7 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Amfora" do
4
+ it "fails" do
5
+ fail "hey buddy, you should probably rename this file and start specing for real"
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'amfora'
4
+ require 'spec'
5
+ require 'spec/autorun'
6
+
7
+ Spec::Runner.configure do |config|
8
+
9
+ end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: amfora
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Dima Berastau
8
+ - Tony Hillerson
9
+ - Stephen Augenstein
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+
14
+ date: 2009-11-19 00:00:00 -08:00
15
+ default_executable:
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: rspec
19
+ type: :development
20
+ version_requirement:
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: "0"
26
+ version:
27
+ description: RESTful Rack Middleware that provides AMF0/AMF3 support to Rails and Rack applications
28
+ email: dima.berastau@gmail.com
29
+ executables: []
30
+
31
+ extensions: []
32
+
33
+ extra_rdoc_files:
34
+ - LICENSE
35
+ - README.rdoc
36
+ files:
37
+ - .document
38
+ - .gitignore
39
+ - LICENSE
40
+ - README.rdoc
41
+ - Rakefile
42
+ - VERSION
43
+ - amfora.gemspec
44
+ - lib/amf.rb
45
+ - lib/amf/active_record.rb
46
+ - lib/amf/class_mapping.rb
47
+ - lib/amf/constants.rb
48
+ - lib/amf/messages.rb
49
+ - lib/amf/pure.rb
50
+ - lib/amf/pure/deserializer.rb
51
+ - lib/amf/pure/io_helpers.rb
52
+ - lib/amf/pure/remoting.rb
53
+ - lib/amf/pure/serializer.rb
54
+ - lib/amf/version.rb
55
+ - lib/amfora.rb
56
+ - lib/rack/amf.rb
57
+ - lib/rack/amf/application.rb
58
+ - spec/amfora_spec.rb
59
+ - spec/spec_helper.rb
60
+ has_rdoc: true
61
+ homepage: http://github.com/dima/amfora
62
+ licenses: []
63
+
64
+ post_install_message:
65
+ rdoc_options:
66
+ - --charset=UTF-8
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: "0"
74
+ version:
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: "0"
80
+ version:
81
+ requirements: []
82
+
83
+ rubyforge_project:
84
+ rubygems_version: 1.3.5
85
+ signing_key:
86
+ specification_version: 3
87
+ summary: RESTful AMF0/AMF3 Rack Middleware
88
+ test_files:
89
+ - spec/amfora_spec.rb
90
+ - spec/spec_helper.rb