adsf 1.4.8 → 1.5.0
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/NEWS.md +10 -0
- data/README.md +25 -23
- data/bin/adsf +9 -0
- data/lib/adsf/rack/auto_file_extensions.rb +29 -0
- data/lib/adsf/rack.rb +1 -0
- data/lib/adsf/server.rb +19 -3
- data/lib/adsf/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed9bf6e0feaf4c359961448ad08440e789abdd038f0ec6df25ca94ce95692968
|
4
|
+
data.tar.gz: 6e32f017cf662136d6473ec9dafbefc83499cacaf0ead96b16a6dd4d12af3374
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1126dbb61b6a3e326faa194afc2d2a314ffbacdcccb9ff77f01e1e8fcc28aa3af5f381476fbed1235fcc40bc2c53e8145d96be2f1cb837ae52cdc7dfeb493fb8
|
7
|
+
data.tar.gz: 2383433bbb5d8b86851ae3d4d2143a18a88e3e5ef38bd6afdbf30462e9c8210f5cfa972281b127bf3e257e05d44f3d6ea7a75f5a40daf72aa3706474daddb395
|
data/NEWS.md
CHANGED
data/README.md
CHANGED
@@ -29,9 +29,32 @@ To use `adsf --live-reload`, please install the separate `adsf-live` gem. (The l
|
|
29
29
|
|
30
30
|
## Using adsf programmatically
|
31
31
|
|
32
|
+
### Server
|
33
|
+
|
34
|
+
`Adsf::Server` runs a web server programmatically. For example:
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
server = Adsf::Server.new(root: 'public')
|
38
|
+
|
39
|
+
%w[INT TERM].each do |s|
|
40
|
+
Signal.trap(s) { server.stop }
|
41
|
+
end
|
42
|
+
|
43
|
+
server.run
|
44
|
+
```
|
45
|
+
|
46
|
+
It takes the following options:
|
47
|
+
|
48
|
+
- `root` (required): the path to the web root
|
49
|
+
- `index_filenames` (optional; defaults to `['index.html']`): (see below)
|
50
|
+
- `auto_extensions` (optional; defaults to `[]`; can be a string or an array of strings): If present, the server will automatically append the given extensions when searching for files. For example, `auto_extensions: ".html"` would cause a request for `/foo` to serve `/foo.html` if there is no file or directory named `/foo`.
|
51
|
+
- `host` (optional; defaults to `'127.0.0.1'`): the address of the network interface to listen on
|
52
|
+
- `port` (optional; defaults to `3000`): the port to listen on
|
53
|
+
- `handler` (optional): the Rack handler to use
|
54
|
+
|
32
55
|
### IndexFileFinder
|
33
56
|
|
34
|
-
|
57
|
+
If you are assembling your own Rack configuration, you can use adsf’s `Adsf::Rack::IndexFileFinder` middleware to make Rack load an index file (e.g. `index.html`) when requesting a directory. For example, the following runs a web server with the 'public' directory as its web root:
|
35
58
|
|
36
59
|
```ruby
|
37
60
|
use Adsf::Rack::IndexFileFinder, root: 'public'
|
@@ -61,31 +84,10 @@ It takes the following options:
|
|
61
84
|
|
62
85
|
- When requesting a directory without specifying the trailing slash, `Adsf::Rack::IndexFileFinder` will redirect to the URL with a trailing slash, unlike `Rack::Static`. This mimics the behavior of typical HTTP servers. For example, when requesting `/foo`, when a `foo` directory exists and it contains `index.html`, `IndexFileFinder` will redirect to `/foo/`.
|
63
86
|
|
64
|
-
### Server
|
65
|
-
|
66
|
-
`Adsf::Server` runs a web server programmatically. For example:
|
67
|
-
|
68
|
-
```ruby
|
69
|
-
server = Adsf::Server.new(root: 'public')
|
70
|
-
|
71
|
-
%w[INT TERM].each do |s|
|
72
|
-
Signal.trap(s) { server.stop }
|
73
|
-
end
|
74
|
-
|
75
|
-
server.run
|
76
|
-
```
|
77
|
-
|
78
|
-
It takes the following options:
|
79
|
-
|
80
|
-
- `root` (required): the path to the web root
|
81
|
-
- `index_filenames` (optional; defaults to `['index.html']`): (see above)
|
82
|
-
- `host` (optional; defaults to `'127.0.0.1'`): the address of the network interface to listen on
|
83
|
-
- `port` (optional; defaults to `3000`): the port ot listen on
|
84
|
-
- `handler` (optional): the Rack handler to use
|
85
|
-
|
86
87
|
## Contributors
|
87
88
|
|
88
89
|
- Ed Brannin
|
89
90
|
- Larissa Reis
|
90
91
|
- Mark Meves
|
91
92
|
- Vipul Amler
|
93
|
+
- Paul Cantrell
|
data/bin/adsf
CHANGED
@@ -25,10 +25,19 @@ OptionParser.new do |opts|
|
|
25
25
|
exit
|
26
26
|
end
|
27
27
|
|
28
|
+
opts.on('-V', '--version', 'Show version') do |_o|
|
29
|
+
puts "adsf version #{Adsf::VERSION} © 2009–… Denis Defreyne."
|
30
|
+
exit
|
31
|
+
end
|
32
|
+
|
28
33
|
opts.on('-i', '--index-filenames [index-filenames]', 'Specify index filenames (comma-separated)') do |o|
|
29
34
|
options[:index_filenames] = o.split(',')
|
30
35
|
end
|
31
36
|
|
37
|
+
opts.on('-x', '--auto-extensions [extensions]', 'Specify suffixes to automatically apply to requests (comma-separated, including dot)') do |o|
|
38
|
+
options[:auto_extensions] = o.split(',')
|
39
|
+
end
|
40
|
+
|
32
41
|
opts.on('-p', '--port [port]', Integer, 'Specify the port number to use') do |o|
|
33
42
|
options[:port] = o
|
34
43
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Adsf::Rack
|
4
|
+
class AutoFileExtensions
|
5
|
+
def initialize(app, root:, extensions:)
|
6
|
+
@app = app
|
7
|
+
@root = root
|
8
|
+
# Search list starts with '' so that we first look for file as requested
|
9
|
+
@search_suffixes = [''] + Array(extensions).map { |ext| ".#{ext}" }
|
10
|
+
end
|
11
|
+
|
12
|
+
def call(env)
|
13
|
+
path_info = ::Rack::Utils.unescape(env['PATH_INFO'])
|
14
|
+
path = ::File.join(@root, path_info)
|
15
|
+
|
16
|
+
new_env = env
|
17
|
+
@search_suffixes.each do |suffix|
|
18
|
+
new_path = path + suffix
|
19
|
+
next unless ::File.exist?(new_path)
|
20
|
+
|
21
|
+
new_env = env.dup # only dup if needed
|
22
|
+
new_env['PATH_INFO'] += suffix
|
23
|
+
break
|
24
|
+
end
|
25
|
+
|
26
|
+
@app.call(new_env)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/adsf/rack.rb
CHANGED
data/lib/adsf/server.rb
CHANGED
@@ -2,10 +2,19 @@
|
|
2
2
|
|
3
3
|
module Adsf
|
4
4
|
class Server
|
5
|
-
def initialize(
|
5
|
+
def initialize(
|
6
|
+
root:,
|
7
|
+
live: false,
|
8
|
+
host: '127.0.0.1',
|
9
|
+
port: 3000,
|
10
|
+
index_filenames: ['index.html'],
|
11
|
+
auto_extensions: [],
|
12
|
+
handler: nil
|
13
|
+
)
|
6
14
|
@root = root
|
7
15
|
@live = live
|
8
16
|
@index_filenames = index_filenames
|
17
|
+
@auto_extensions = auto_extensions
|
9
18
|
@host = host
|
10
19
|
@port = port
|
11
20
|
@handler = handler
|
@@ -15,7 +24,11 @@ module Adsf
|
|
15
24
|
|
16
25
|
def run
|
17
26
|
handler = build_handler
|
18
|
-
app = build_app(
|
27
|
+
app = build_app(
|
28
|
+
root: @root,
|
29
|
+
index_filenames: @index_filenames,
|
30
|
+
auto_extensions: @auto_extensions,
|
31
|
+
)
|
19
32
|
start_watcher if @live
|
20
33
|
|
21
34
|
url = "http://#{@host}:#{@port}/"
|
@@ -47,7 +60,7 @@ module Adsf
|
|
47
60
|
server.stop
|
48
61
|
end
|
49
62
|
|
50
|
-
def build_app(root:, index_filenames:)
|
63
|
+
def build_app(root:, index_filenames:, auto_extensions:)
|
51
64
|
is_live = @live
|
52
65
|
|
53
66
|
::Rack::Builder.new do
|
@@ -60,6 +73,9 @@ module Adsf
|
|
60
73
|
use Adsf::Rack::IndexFileFinder,
|
61
74
|
root: root,
|
62
75
|
index_filenames: index_filenames
|
76
|
+
use Adsf::Rack::AutoFileExtensions,
|
77
|
+
root: root,
|
78
|
+
extensions: auto_extensions
|
63
79
|
|
64
80
|
if is_live
|
65
81
|
require 'adsf/live'
|
data/lib/adsf/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adsf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denis Defreyne
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -56,6 +56,7 @@ files:
|
|
56
56
|
- bin/adsf
|
57
57
|
- lib/adsf.rb
|
58
58
|
- lib/adsf/rack.rb
|
59
|
+
- lib/adsf/rack/auto_file_extensions.rb
|
59
60
|
- lib/adsf/rack/caching.rb
|
60
61
|
- lib/adsf/rack/cors.rb
|
61
62
|
- lib/adsf/rack/index_file_finder.rb
|
@@ -81,7 +82,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
81
82
|
- !ruby/object:Gem::Version
|
82
83
|
version: '0'
|
83
84
|
requirements: []
|
84
|
-
rubygems_version: 3.4
|
85
|
+
rubygems_version: 3.5.4
|
85
86
|
signing_key:
|
86
87
|
specification_version: 4
|
87
88
|
summary: a tiny static file server
|