serveable 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 +7 -0
- data/LICENSE +0 -0
- data/README.md +22 -0
- data/Rakefile +9 -0
- data/lib/serveable.rb +51 -0
- data/lib/serveable/version.rb +3 -0
- metadata +50 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 72c6629c8e364e6deab42b42b386c032f056645c
|
4
|
+
data.tar.gz: 89707e239b053f6707dbb446c0176472afab1d20
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 46a28d12b8db9a58e16f8c232af102d08d47fdff96eed75545707a5d5ec38df26e90f64b1fc31b086cff24427924f656d0f123124dfd8487b7d48050a72f902f
|
7
|
+
data.tar.gz: 50311a4f39704a60f6710b274557b4e566a12755d140f376df8297a1bf924082f638b34d751f786736cc3dd3236de7e42e45b302708f5a95909ccbb92bd58f30
|
data/LICENSE
ADDED
File without changes
|
data/README.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# Serveable
|
2
|
+
|
3
|
+
Serveable simplifies creating a [Rack][rack] mountable site. It contains a
|
4
|
+
`Site` module and an `Item` module. These can be mixed into classes that expose
|
5
|
+
the correct interface to turn them into easy Rack-fodder.
|
6
|
+
|
7
|
+
See [`example/simple.rb`](examples/simple.rb) for a basic implementation.
|
8
|
+
|
9
|
+
|
10
|
+
## That interface you speak of...
|
11
|
+
|
12
|
+
A `Site` must implement the following:
|
13
|
+
|
14
|
+
- `#each(&block)`, which enumerates `Item` type objects.
|
15
|
+
|
16
|
+
An `Item` must implement the following:
|
17
|
+
|
18
|
+
- `#contents`, that returns the contents;
|
19
|
+
- `#url`, that returns the full url to serve at.
|
20
|
+
|
21
|
+
|
22
|
+
[rack]: http://rack.github.com
|
data/Rakefile
ADDED
data/lib/serveable.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
module Serveable
|
2
|
+
|
3
|
+
# Include {Serveable::Site} into an object that responds to #each, which
|
4
|
+
# returns items that expose the same interface (or include) {Item}, to allow
|
5
|
+
# it to be run with Rack.
|
6
|
+
module Site
|
7
|
+
|
8
|
+
# @return [Array] Returns the payload for the given environment passed.
|
9
|
+
def call(env)
|
10
|
+
paths_equal = lambda do |a,b|
|
11
|
+
short = a.sub(/index\.html\Z/, '')
|
12
|
+
return a == b || short == b || short[0..-2] == b
|
13
|
+
end
|
14
|
+
|
15
|
+
found = Missing
|
16
|
+
each do |item|
|
17
|
+
if paths_equal.call(item.url, env['REQUEST_PATH'])
|
18
|
+
found = item
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
found.serve
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# The Item module expects the object extending/class including it to respond
|
27
|
+
# to the #url and #content methods, it then defines the #serve method which is
|
28
|
+
# used by {Site}.
|
29
|
+
module Item
|
30
|
+
|
31
|
+
# @return [String] The contents of the Item to be served.
|
32
|
+
def contents; end
|
33
|
+
|
34
|
+
# @return [String] Full url (including /index.html) to the item.
|
35
|
+
def url; end
|
36
|
+
|
37
|
+
# @return [Array] Payload for rack. Contains, in order, the status, the
|
38
|
+
# headers and the body.
|
39
|
+
def serve
|
40
|
+
mime = Rack::Mime.mime_type ::File.extname(url)
|
41
|
+
[200, {"Content-Type" => mime}, [contents]]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# The sole missing file is served when no matching item is found.
|
46
|
+
Missing = Object.new
|
47
|
+
def Missing.serve
|
48
|
+
[404, {}, ["404 not found"]]
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
metadata
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: serveable
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Joshua Hawxwell
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-05-31 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: |2
|
14
|
+
Provides a module that allow you to easily incorporate a simple
|
15
|
+
'server -> site -> page' model on top of rack.
|
16
|
+
email: m@hawx.me
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- README.md
|
22
|
+
- Rakefile
|
23
|
+
- LICENSE
|
24
|
+
- lib/serveable.rb
|
25
|
+
- lib/serveable/version.rb
|
26
|
+
homepage: http://github.com/hawx/serveable
|
27
|
+
licenses: []
|
28
|
+
metadata: {}
|
29
|
+
post_install_message:
|
30
|
+
rdoc_options: []
|
31
|
+
require_paths:
|
32
|
+
- lib
|
33
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - ">="
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
requirements: []
|
44
|
+
rubyforge_project:
|
45
|
+
rubygems_version: 2.0.14
|
46
|
+
signing_key:
|
47
|
+
specification_version: 4
|
48
|
+
summary: Minimal fuss rack server hooks.
|
49
|
+
test_files: []
|
50
|
+
has_rdoc:
|