directory_listing 0.1.1 → 0.1.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.
Files changed (2) hide show
  1. data/lib/sinatra/directory_listing.rb +18 -16
  2. metadata +45 -42
@@ -2,6 +2,7 @@ require 'sinatra/base'
2
2
  require 'truncate'
3
3
  require 'filesize'
4
4
  require 'pathname'
5
+ require 'uri'
5
6
 
6
7
  # = Easy, CSS-styled, Apache-like directory listings for Sinatra.
7
8
  #
@@ -72,15 +73,13 @@ require 'pathname'
72
73
  module Sinatra
73
74
  module Directory_listing
74
75
 
75
- private
76
-
77
76
  def m_time(file)
78
- f = File.join(File.join(settings.public_folder, request.fullpath), file)
77
+ f = File.join(File.join(settings.public_folder, URI.unescape(request.fullpath)), file)
79
78
  "\t<td>#{File.mtime(f).strftime $last_modified_format}</td>"
80
79
  end
81
80
 
82
81
  def size(file)
83
- f = File.join(File.join(settings.public_folder, request.fullpath), file)
82
+ f = File.join(File.join(settings.public_folder, URI.unescape(request.fullpath)), file)
84
83
  if File.directory?(f)
85
84
  "\t<td>-</td>"
86
85
  else
@@ -90,8 +89,9 @@ module Sinatra
90
89
  end
91
90
 
92
91
  def name(file)
92
+ file = URI.unescape(file)
93
93
  tfile = file.truncate($filename_truncate_length, '...')
94
- if (Pathname.new(request.path).cleanpath).eql?((Pathname.new(settings.public_folder)).cleanpath)
94
+ if (Pathname.new(URI.unescape(request.path)).cleanpath).eql?((Pathname.new(settings.public_folder)).cleanpath)
95
95
  link = file
96
96
  else
97
97
  link = File.join(request.fullpath, file)
@@ -103,25 +103,25 @@ module Sinatra
103
103
  else
104
104
  html << "\t<td class='file'><a href='#{link}'>#{tfile}</a></td>"
105
105
  end
106
- "#{html}"
106
+ html
107
107
  end
108
108
 
109
109
  def wrap(file)
110
- wrapped = ""
110
+ html = ""
111
111
  if $should_list_invisibles == "yes"
112
- wrapped << "\n\t<tr>
112
+ html << "\n\t<tr>
113
113
  #{name(file)}
114
114
  #{m_time(file)}
115
115
  #{size(file)}\n\t</tr>"
116
116
  else
117
117
  if file[0] != "."
118
- wrapped << "\n\t<tr>
118
+ html << "\n\t<tr>
119
119
  #{name(file)}
120
120
  #{m_time(file)}
121
121
  #{size(file)}\n\t</tr>"
122
122
  end
123
123
  end
124
- "#{wrapped}"
124
+ html
125
125
  end
126
126
 
127
127
  def list(o={})
@@ -138,22 +138,22 @@ module Sinatra
138
138
  $filename_truncate_length = options[:filename_truncate_length]
139
139
 
140
140
  html = "<html>\n<head>\n"
141
- html << "<title>Index of #{request.path}</title>\n"
141
+ html << "<title>Index of #{URI.unescape(request.path)}</title>\n"
142
142
  html << "<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>\n"
143
143
  if options[:stylesheet]
144
144
  html << "<link rel=\"stylesheet\" type=\"text/css\" href=\"/#{options[:stylesheet].sub(/^[\/]*/,"")}\">\n"
145
145
  end
146
146
  html << "</head>\n<body>\n"
147
- html << "<h1>Index of #{request.path}</h1>\n"
148
- if request.path != "/"
149
- html << "<a href='#{Pathname.new(request.path).parent}'>&larr; Parent directory</a><br><br>"
147
+ html << "<h1>Index of #{URI.unescape(request.path)}</h1>\n"
148
+ if URI.unescape(request.path) != "/"
149
+ html << "<a href='#{Pathname.new(URI.unescape(request.path)).parent}'>&larr; Parent directory</a><br><br>"
150
150
  else
151
151
  html << "<a>Root directory</a><br><br>"
152
152
  end
153
153
  html << "<table>\n"
154
154
  html << "\t<tr>\n\t\t<th>File</th>\n\t\t<th>Last modified</th>\n\t\t<th>Size</th>\n\t</tr>\n"
155
155
  files = Array.new
156
- Dir.foreach(File.join(settings.public_folder, request.path), &files.method(:push))
156
+ Dir.foreach(File.join(settings.public_folder, URI.unescape(request.path)), &files.method(:push))
157
157
  if files == [".", ".."]
158
158
  html << "\t<tr>\n\t\t<th>No files.</th>\n\t\t<th>-</th>\n\t\t<th>-</th>\n\t</tr>"
159
159
  else
@@ -164,8 +164,10 @@ module Sinatra
164
164
  html << "\n</table>\n"
165
165
  html << "<br>\n#{options[:readme]}\n" if options[:readme]
166
166
  html << "</body>\n</html>\n"
167
- "#{html}"
167
+ html
168
168
  end
169
+
170
+ private :wrap, :name, :size, :m_time
169
171
 
170
172
  end
171
173
 
metadata CHANGED
@@ -1,75 +1,78 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: directory_listing
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
4
5
  prerelease:
5
- version: 0.1.1
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Richard Myers
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2013-06-27 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2013-07-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: filesize
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
23
21
  version: 0.0.2
24
22
  type: :runtime
25
- version_requirements: *id001
26
- - !ruby/object:Gem::Dependency
27
- name: truncate
28
23
  prerelease: false
29
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.0.2
30
+ - !ruby/object:Gem::Dependency
31
+ name: truncate
32
+ requirement: !ruby/object:Gem::Requirement
30
33
  none: false
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
34
37
  version: 0.0.4
35
38
  type: :runtime
36
- version_requirements: *id002
37
- description: A Sinatra extension for generating easy, CSS-styled, Apache-like directory listings.
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 0.0.4
46
+ description: A Sinatra extension for generating easy, CSS-styled, Apache-like directory
47
+ listings.
38
48
  email: rick.myers@me.com
39
49
  executables: []
40
-
41
50
  extensions: []
42
-
43
51
  extra_rdoc_files: []
44
-
45
- files:
52
+ files:
46
53
  - lib/sinatra/directory_listing.rb
47
54
  homepage: https://rubygems.org/gems/directory_listing
48
55
  licenses: []
49
-
50
56
  post_install_message:
51
57
  rdoc_options: []
52
-
53
- require_paths:
58
+ require_paths:
54
59
  - lib
55
- required_ruby_version: !ruby/object:Gem::Requirement
60
+ required_ruby_version: !ruby/object:Gem::Requirement
56
61
  none: false
57
- requirements:
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- version: "0"
61
- required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
67
  none: false
63
- requirements:
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- version: "0"
68
+ requirements:
69
+ - - ! '>='
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
67
72
  requirements: []
68
-
69
73
  rubyforge_project:
70
- rubygems_version: 1.8.23
74
+ rubygems_version: 1.8.24
71
75
  signing_key:
72
76
  specification_version: 3
73
77
  summary: Easy, CSS-styled, Apache-like directory listings for Sinatra.
74
78
  test_files: []
75
-