apex 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +42 -12
- data/lib/apex.rb +5 -1
- data/lib/apex/apex.rb +1 -2
- data/lib/apex/cocoa/delegate_interface.rb +10 -0
- data/lib/apex/request.rb +43 -0
- data/lib/apex/response.rb +9 -0
- data/lib/apex/server.rb +100 -0
- data/lib/apex/version.rb +3 -0
- data/spec/main_spec.rb +9 -0
- metadata +72 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ce8882c6a877b50d8b2fbbe8db5469d03d6b657
|
4
|
+
data.tar.gz: a815007e4186159f5ce2afb1e26a9b8dd37b9fb6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f8903362700a01513fdcca170ee89109ccb8f401e8340f5898bd96eac3cf4b45144425774ca09210738365003678420b580d449f6ebfda0829321acf0c9b3ec6
|
7
|
+
data.tar.gz: a4aa2357797d5ce7e404928c6fdb5a39abe4eeaf9061f9dbd999e3c586cef82cdee30da8c4d681852ad716640692b0da323acbc5ea87384f49d83c91b75c67c1
|
data/README.md
CHANGED
@@ -1,24 +1,54 @@
|
|
1
1
|
# apex
|
2
2
|
|
3
|
-
|
3
|
+
Apex is a RubyMotion web framework for OS X. It uses
|
4
|
+
GCDWebServer under the hood and provides a Sinatra-like
|
5
|
+
router and DSL.
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
Add this line to your application's Gemfile:
|
8
|
-
|
9
|
-
gem 'apex'
|
7
|
+
Apex is currently experimental and in development. I'd
|
8
|
+
love to have help; feel free get in touch [on Twitter](http://twitter.com/jamonholmgren).
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
$ bundle
|
10
|
+
## Installation
|
14
11
|
|
15
|
-
|
12
|
+
```ruby
|
13
|
+
# In Gemfile:
|
14
|
+
gem 'apex'
|
16
15
|
|
17
|
-
|
16
|
+
# In Terminal:
|
17
|
+
bundle install
|
18
|
+
rake pod:install
|
19
|
+
```
|
18
20
|
|
19
21
|
## Usage
|
20
22
|
|
21
|
-
|
23
|
+
```ruby
|
24
|
+
class AppDelegate < Apex::Server
|
25
|
+
port 8080 # defaults to 8080
|
26
|
+
|
27
|
+
layout do
|
28
|
+
"<html>" +
|
29
|
+
"<head><title>Apex</title></head>" +
|
30
|
+
"<body>" +
|
31
|
+
content +
|
32
|
+
"</body>" +
|
33
|
+
"</html>"
|
34
|
+
end
|
35
|
+
|
36
|
+
get "/" do |r|
|
37
|
+
"<h1>Apex is running. Response: #{r}</h1>" +
|
38
|
+
"<p><a href='/about'>About Apex</a></p>"
|
39
|
+
end
|
40
|
+
|
41
|
+
get "/about" do |r|
|
42
|
+
"<h1>About Apex</h1>" +
|
43
|
+
"<p><a href='/'>Home</a></p>"
|
44
|
+
end
|
45
|
+
|
46
|
+
post "/some_post" do |request|
|
47
|
+
request.headers["User-Agent"]
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
```
|
22
52
|
|
23
53
|
## Contributing
|
24
54
|
|
data/lib/apex.rb
CHANGED
@@ -3,8 +3,12 @@
|
|
3
3
|
unless defined?(Motion::Project::Config)
|
4
4
|
raise "This file must be required within a RubyMotion project Rakefile."
|
5
5
|
end
|
6
|
+
require 'motion-cocoapods'
|
6
7
|
|
7
8
|
lib_dir_path = File.dirname(File.expand_path(__FILE__))
|
8
9
|
Motion::Project::App.setup do |app|
|
9
|
-
app.files.unshift(Dir.glob(File.join(lib_dir_path, "
|
10
|
+
app.files.unshift(Dir.glob(File.join(lib_dir_path, "apex/**/*.rb")))
|
11
|
+
app.pods do
|
12
|
+
pod "GCDWebServer", "~> 2.4"
|
13
|
+
end
|
10
14
|
end
|
data/lib/apex/apex.rb
CHANGED
data/lib/apex/request.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
module Apex
|
2
|
+
class Request
|
3
|
+
attr_accessor :raw
|
4
|
+
|
5
|
+
def initialize(raw)
|
6
|
+
@raw = raw
|
7
|
+
end
|
8
|
+
|
9
|
+
def body?
|
10
|
+
raw.hasBody
|
11
|
+
end
|
12
|
+
|
13
|
+
def content_type
|
14
|
+
raw.contentType
|
15
|
+
end
|
16
|
+
|
17
|
+
def headers
|
18
|
+
raw.headers
|
19
|
+
end
|
20
|
+
|
21
|
+
def content_length
|
22
|
+
raw.contentLength
|
23
|
+
end
|
24
|
+
alias_method :length, :content_length
|
25
|
+
|
26
|
+
def query
|
27
|
+
raw.query
|
28
|
+
end
|
29
|
+
|
30
|
+
def path
|
31
|
+
raw.path
|
32
|
+
end
|
33
|
+
|
34
|
+
def url
|
35
|
+
raw.URL
|
36
|
+
end
|
37
|
+
|
38
|
+
def url_string
|
39
|
+
url.absoluteString
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
data/lib/apex/server.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
module Apex
|
2
|
+
class Server
|
3
|
+
include DelegateInterface
|
4
|
+
|
5
|
+
def on_launch
|
6
|
+
add_static_handler
|
7
|
+
add_app_handlers
|
8
|
+
start
|
9
|
+
end
|
10
|
+
|
11
|
+
def server
|
12
|
+
@server ||= GCDWebServer.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def routes
|
16
|
+
self.class.routes
|
17
|
+
end
|
18
|
+
|
19
|
+
def layouts
|
20
|
+
self.class.layouts
|
21
|
+
end
|
22
|
+
|
23
|
+
def add_app_handlers
|
24
|
+
[ :get, :post, :put, :patch, :delete ].each do |verb|
|
25
|
+
self.server.addDefaultHandlerForMethod(verb.to_s.upcase,
|
26
|
+
requestClass: GCDWebServerRequest,
|
27
|
+
processBlock: -> (raw_request) {
|
28
|
+
layout = false
|
29
|
+
request = Request.new(raw_request)
|
30
|
+
if response_block = self.routes[verb][request.path][:handler] rescue nil
|
31
|
+
request_args = [request].first(response_block.arity)
|
32
|
+
response = response_block.call(*request_args)
|
33
|
+
layout = self.routes[verb][request.path][:layout]
|
34
|
+
else
|
35
|
+
response = "<h1>404 not found</h1>"
|
36
|
+
end
|
37
|
+
GCDWebServerDataResponse.responseWithHTML apply_layout(response, layout)
|
38
|
+
}
|
39
|
+
)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def apply_layout(response, name)
|
44
|
+
layouts[name] ? layouts[name].call.to_s.gsub(self.class.content(:main), response) : response
|
45
|
+
end
|
46
|
+
|
47
|
+
def add_static_handler
|
48
|
+
public_path = NSBundle.mainBundle.pathForResource("assets", ofType:nil)
|
49
|
+
self.server.addGETHandlerForBasePath("/", directoryPath:public_path, indexFilename:nil, cacheAge:3600, allowRangeRequests:false)
|
50
|
+
end
|
51
|
+
|
52
|
+
def start
|
53
|
+
server.runWithPort self.class.port, bonjourName: nil
|
54
|
+
end
|
55
|
+
|
56
|
+
# Class methods *************************
|
57
|
+
|
58
|
+
def self.get(path, args={}, &block)
|
59
|
+
routes[:get][path] = { handler: block, layout: args[:layout] }
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.post(path, args={}, &block)
|
63
|
+
routes[:post][path] = { handler: block, layout: args[:layout] }
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.put(path, args={}, &block)
|
67
|
+
routes[:put][path] = { handler: block, layout: args[:layout] }
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.patch(path, args={}, &block)
|
71
|
+
routes[:patch][path] = { handler: block, layout: args[:layout] }
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.delete(path, args={}, &block)
|
75
|
+
routes[:delete][path] = { handler: block, layout: args[:layout] }
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.routes
|
79
|
+
@routes ||= { get: {}, post: {}, put: {}, patch: {}, delete: {} }
|
80
|
+
end
|
81
|
+
|
82
|
+
def self.layouts
|
83
|
+
@layouts ||= {}
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.port(port_number=nil)
|
87
|
+
@port = port_number if port_number
|
88
|
+
@port || 8080
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.layout(name=:main, &block)
|
92
|
+
layouts[name] = block
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.content(name=:main)
|
96
|
+
"%CONTENT-#{name}%"
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
end
|
data/lib/apex/version.rb
ADDED
data/spec/main_spec.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamon Holmgren
|
@@ -10,21 +10,77 @@ bindir: bin
|
|
10
10
|
cert_chain: []
|
11
11
|
date: 2014-06-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: motion-cocoapods
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.5.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.5.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: webstub
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: motion-stump
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: motion-redgreen
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.1'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.1'
|
13
69
|
- !ruby/object:Gem::Dependency
|
14
70
|
name: rake
|
15
71
|
requirement: !ruby/object:Gem::Requirement
|
16
72
|
requirements:
|
17
73
|
- - ">="
|
18
74
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
75
|
+
version: '10.0'
|
20
76
|
type: :development
|
21
77
|
prerelease: false
|
22
78
|
version_requirements: !ruby/object:Gem::Requirement
|
23
79
|
requirements:
|
24
80
|
- - ">="
|
25
81
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
|
-
description:
|
82
|
+
version: '10.0'
|
83
|
+
description: 'Apex: the RubyMotion web framework for OS X.'
|
28
84
|
email:
|
29
85
|
- jamon@clearsightstudio.com
|
30
86
|
executables: []
|
@@ -34,9 +90,15 @@ files:
|
|
34
90
|
- README.md
|
35
91
|
- lib/apex.rb
|
36
92
|
- lib/apex/apex.rb
|
37
|
-
|
93
|
+
- lib/apex/cocoa/delegate_interface.rb
|
94
|
+
- lib/apex/request.rb
|
95
|
+
- lib/apex/response.rb
|
96
|
+
- lib/apex/server.rb
|
97
|
+
- lib/apex/version.rb
|
98
|
+
- spec/main_spec.rb
|
99
|
+
homepage: https://github.com/clearsightstudio/apex
|
38
100
|
licenses:
|
39
|
-
-
|
101
|
+
- MIT
|
40
102
|
metadata: {}
|
41
103
|
post_install_message:
|
42
104
|
rdoc_options: []
|
@@ -57,5 +119,7 @@ rubyforge_project:
|
|
57
119
|
rubygems_version: 2.2.2
|
58
120
|
signing_key:
|
59
121
|
specification_version: 4
|
60
|
-
summary:
|
61
|
-
|
122
|
+
summary: Apex is a RubyMotion web framework for OS X. It uses GCDWebServer under the
|
123
|
+
hood and provides a Sinatra-like router and DSL.
|
124
|
+
test_files:
|
125
|
+
- spec/main_spec.rb
|