apex 0.0.1 → 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.
- 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
|