atoms 0.0.2

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.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+ gem 'cool.io'
3
+ gem 'rocketamf'
4
+ gemspec
data/README ADDED
File without changes
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,20 @@
1
+ $:.push File.expand_path("../lib", __FILE__)
2
+ require "atoms/version"
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "atoms"
6
+ s.version = Atoms::VERSION
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ["rusintez"]
9
+ s.email = ["rusintez@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{atoms = cool.io + rocketamf + grape}
12
+ s.description = %q{an experiment of using cool.io for serving AMF3 to flash clients with API written in grape style}
13
+
14
+ s.rubyforge_project = "atoms"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+ end
@@ -0,0 +1,142 @@
1
+ require 'cool.io'
2
+ require 'stringio'
3
+ require 'rocketamf'
4
+
5
+ module Atoms
6
+ class Server
7
+
8
+ def self.run(host = "0.0.0.0", port = 5000)
9
+ @server = Cool.io::TCPServer.new(host, port, Atoms::Connection)
10
+ @server.attach(Cool.io::Loop.default)
11
+ puts "Echo server listening on #{host}:#{port}"
12
+ Cool.io::Loop.default.run
13
+ end
14
+
15
+ end
16
+
17
+ class Router
18
+
19
+ attr_accessor :routes
20
+
21
+ class << self
22
+
23
+ attr_accessor :endpoints
24
+
25
+ def config(&block)
26
+ @router = new
27
+ @router.routes = []
28
+ instance_eval(&block)
29
+ end
30
+
31
+ def attach(c)
32
+ @router.routes << c.new
33
+ end
34
+
35
+ def add(endpoint)
36
+ self.endpoints = [] unless self.endpoints
37
+ self.endpoints << endpoint
38
+ end
39
+
40
+ def respond(header, data = {})
41
+ index = endpoints.index{|e| e.header == header}
42
+ endpoint = endpoints[index] if index
43
+ endpoint.call(data) if endpoint # encode to rocket_amf and send back to server
44
+ end
45
+ end
46
+ end
47
+
48
+ class Route
49
+
50
+ #self.class.to_s
51
+
52
+ class << self
53
+
54
+ attr_accessor :ns
55
+
56
+ def namespace(space = nil, &block)
57
+ @ns ||= []
58
+ @ns << space
59
+ nest(block)
60
+ @ns.delete(space)
61
+ end
62
+
63
+ alias_method :group, :namespace
64
+ alias_method :resource, :namespace
65
+ alias_method :resources, :namespace
66
+
67
+ def nest(*blocks)
68
+ blocks.reject!{ |b| b.nil? }
69
+ if blocks.any?
70
+ blocks.each {|b| instance_eval &b}
71
+ end
72
+ end
73
+
74
+ def get(path, &block);
75
+ endpoint = Atoms::Endpoint.generate(header(path), &block)
76
+ Atoms::Router.add endpoint
77
+ end
78
+
79
+ def header(path)
80
+ parts = []
81
+ parts << self.to_s
82
+ #parts << version.to_s if version
83
+ parts << ns.collect{ |n| n.capitalize }.join('.') if ns
84
+ #parts << ns.to_s.capitalize if ns
85
+ parts << path.to_s.capitalize if path
86
+ p = parts.join('.')
87
+ puts p
88
+ p
89
+ end
90
+ end
91
+ end
92
+
93
+ class Endpoint
94
+
95
+ attr_reader :params
96
+
97
+ def params
98
+ @params ||= {}
99
+ end
100
+
101
+ def call(prms)
102
+ @params = prms
103
+ response = instance_eval &self.class.block
104
+ end
105
+
106
+ class << self
107
+
108
+ attr_accessor :block, :header
109
+
110
+ def generate(header, &block)
111
+ c = Class.new(Atoms::Endpoint)
112
+ c.class_eval do
113
+ @header = header
114
+ @block = block
115
+ end
116
+ c
117
+ end
118
+
119
+ def call(prms)
120
+ new.call(prms)
121
+ end
122
+ end
123
+ end
124
+
125
+ class Connection < Cool.io::TCPSocket
126
+
127
+ def on_connect
128
+ #puts "#{remote_addr}:#{remote_port} connected"
129
+ # todo - create a session
130
+ end
131
+
132
+ def on_close
133
+ #puts "#{remote_addr}:#{remote_port} disconnected"
134
+ #todo - destroy session
135
+ end
136
+
137
+ def on_read(data)
138
+ request = RocketAMF.deserialize(data,3)
139
+ write RocketAMF.serialize(Atoms::Router.respond(request[:header], request[:data]),3)
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,3 @@
1
+ module Atoms
2
+ VERSION = "0.0.2"
3
+ end
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: atoms
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.2
6
+ platform: ruby
7
+ authors:
8
+ - rusintez
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-02-08 00:00:00 +08:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description: an experiment of using cool.io for serving AMF3 to flash clients with API written in grape style
18
+ email:
19
+ - rusintez@gmail.com
20
+ executables: []
21
+
22
+ extensions: []
23
+
24
+ extra_rdoc_files: []
25
+
26
+ files:
27
+ - .gitignore
28
+ - Gemfile
29
+ - README
30
+ - Rakefile
31
+ - atoms.gemspec
32
+ - lib/atoms.rb
33
+ - lib/atoms/version.rb
34
+ has_rdoc: true
35
+ homepage: ""
36
+ licenses: []
37
+
38
+ post_install_message:
39
+ rdoc_options: []
40
+
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: "0"
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: "0"
55
+ requirements: []
56
+
57
+ rubyforge_project: atoms
58
+ rubygems_version: 1.5.0
59
+ signing_key:
60
+ specification_version: 3
61
+ summary: atoms = cool.io + rocketamf + grape
62
+ test_files: []
63
+