directory_listing 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,29 +4,30 @@ module Sinatra
4
4
  LAYOUT = <<-EOF
5
5
  <html>
6
6
  <head>
7
- <title>Index of <%= $current_page %>, sorted <%= $sort_item_display %> <%= $sort_direction_display %></title>
7
+ <title>Index of <%= page.current_page %>, sorted <%= page.sort_item_display %> <%= page.sort_direction_display %></title>
8
8
  <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
9
- <%= $stylesheet %>
9
+ <%= page.stylesheet %>
10
10
  </head>
11
11
  <body>
12
- <h1>Index of <%= $current_page %></h1>
13
- <%= $back_to_link %>
12
+ <h1>Index of <%= page.current_page %></h1>
13
+ <%= page.back_to_link %>
14
14
  <br><br>
15
15
 
16
16
  <table>
17
17
  <tr>
18
- <th><a href='<%= $file_sort_link %>'>File</a></th>
19
- <th><a href='<%= $mtime_sort_link %>'>Last modified</a></th>
20
- <th><a href='<%= $size_sort_link %>'>Size</a></th>
18
+ <th><a href='<%= page.file_sort_link %>'>File</a></th>
19
+ <th><a href='<%= page.mtime_sort_link %>'>Last modified</a></th>
20
+ <th><a href='<%= page.size_sort_link %>'>Size</a></th>
21
21
  </tr>
22
- <%= $files_html %>
22
+ <%= page.files_html %>
23
23
  </table>
24
24
 
25
25
  <br>
26
- <a><%= $readme %></a>
26
+ <a><%= page.readme %></a>
27
27
  </body>
28
28
  </html>
29
29
  EOF
30
30
 
31
31
  end
32
32
  end
33
+
@@ -0,0 +1,22 @@
1
+ class Page
2
+
3
+ attr_accessor :should_list_invisibles,
4
+ :last_modified_format,
5
+ :filename_truncate_length,
6
+ :stylesheet,
7
+ :readme,
8
+ :public_folder,
9
+ :request_path,
10
+ :request_params,
11
+ :current_page,
12
+ :back_to_link,
13
+ :files_html,
14
+ :sort_item,
15
+ :sort_item_display,
16
+ :sort_direction,
17
+ :sort_direction_display,
18
+ :file_sort_link,
19
+ :mtime_sort_link,
20
+ :size_sort_link
21
+
22
+ end
@@ -1,13 +1,16 @@
1
1
  class Resource
2
-
2
+
3
+ require_relative 'page.rb'
4
+
3
5
  ##
4
6
  # Class definition for a single resource to be listed.
5
7
  # Each resource object has accessors for its file name, regular name,
6
8
  # size and mtime, as well as those components wrapped in html.
9
+
10
+ attr_accessor :file, :page, :name_html, :mtime, :mtime_html, :size, :size_html
7
11
 
8
- attr_accessor :file, :name_html, :mtime, :mtime_html, :size, :size_html
9
-
10
- def initialize(file)
12
+ def initialize(file, page)
13
+ @page = page
11
14
  @file = file
12
15
  @name_html = set_name(file)
13
16
  @mtime, @mtime_html = set_mtime(file)
@@ -20,8 +23,8 @@ class Resource
20
23
  # Returns the mtime as a Time object so it can be sorted.
21
24
 
22
25
  def set_mtime(file)
23
- f = File.join(File.join($public_folder, URI.unescape($request_path)), file)
24
- html = "\t<td>#{File.mtime(f).strftime($last_modified_format)}</td>"
26
+ f = File.join(File.join(@page.public_folder, URI.unescape(@page.request_path)), file)
27
+ html = "\t<td>#{File.mtime(f).strftime(@page.last_modified_format)}</td>"
25
28
  return [File.mtime(f), html]
26
29
  end
27
30
 
@@ -33,7 +36,7 @@ class Resource
33
36
  def set_size(file)
34
37
  html = ""
35
38
  size = ''
36
- f = File.join(File.join($public_folder, URI.unescape($request_path)), file)
39
+ f = File.join(File.join(@page.public_folder, URI.unescape(@page.request_path)), file)
37
40
  if File.directory?(f)
38
41
  size = 0
39
42
  html = "\t<td>-</td>"
@@ -55,32 +58,32 @@ class Resource
55
58
  # URI.unescape seems to work best to decode uris.
56
59
 
57
60
  file = URI.unescape(file)
58
- file_truncated = file.truncate($filename_truncate_length, '...')
61
+ file_truncated = file.truncate(@page.filename_truncate_length, '...')
59
62
 
60
63
  ##
61
64
  # If the requested resource is in the root public directory, the link is
62
65
  # just the resource itself without the public directory path as well.
63
66
 
64
- requested = Pathname.new(URI.unescape($request_path)).cleanpath
65
- pub_folder = Pathname.new($public_folder).cleanpath
67
+ requested = Pathname.new(URI.unescape(@page.request_path)).cleanpath
68
+ pub_folder = Pathname.new(@page.public_folder).cleanpath
66
69
  if requested.eql?(pub_folder)
67
70
  link = file
68
71
  else
69
- link = File.join($request_path, file)
72
+ link = File.join(@page.request_path, file)
70
73
  end
71
74
 
72
75
  ##
73
76
  # Add a class of "dir" to directories and "file" to files.
74
77
 
75
78
  html = ""
76
- if File.directory?(URI.unescape(File.join($public_folder, link)))
79
+ if File.directory?(URI.unescape(File.join(@page.public_folder, link)))
77
80
  html << "\t<td class='dir'>"
78
81
 
79
82
  ##
80
83
  # Append the sorting information if the current directory is sorted
81
84
 
82
- if $request_params["sortby"] && $request_params["direction"]
83
- link << "?sortby=" + $request_params["sortby"] + "&direction=" + $request_params["direction"]
85
+ if @page.request_params["sortby"] && @page.request_params["direction"]
86
+ link << "?sortby=" + @page.request_params["sortby"] + "&direction=" + @page.request_params["direction"]
84
87
  end
85
88
  else
86
89
  html << "\t<td class='file'>"
@@ -104,7 +107,7 @@ class Resource
104
107
 
105
108
  def wrap
106
109
  html = ""
107
- if $should_list_invisibles == true
110
+ if @page.should_list_invisibles == true
108
111
  html << "\n\t<tr>
109
112
  #{@name_html}
110
113
  #{@mtime_html}
@@ -1,3 +1,3 @@
1
1
  module Directory_listing
2
- VERSION = '0.3.3'
2
+ VERSION = '0.3.4'
3
3
  end
@@ -100,6 +100,7 @@ module Sinatra
100
100
  require_relative 'directory_listing/version.rb'
101
101
  require_relative 'directory_listing/layout.rb'
102
102
  require_relative 'directory_listing/resource.rb'
103
+ require_relative 'directory_listing/page.rb'
103
104
 
104
105
  ##
105
106
  # Generate the page.
@@ -116,26 +117,31 @@ module Sinatra
116
117
  :stylesheet => "",
117
118
  :readme => ""
118
119
  }.merge(o)
120
+
121
+ ##
122
+ # Create a page object.
123
+
124
+ page = Page.new
119
125
 
120
- $should_list_invisibles = options[:should_list_invisibles]
121
- $last_modified_format = options[:last_modified_format]
122
- $filename_truncate_length = options[:filename_truncate_length]
126
+ page.should_list_invisibles = options[:should_list_invisibles]
127
+ page.last_modified_format = options[:last_modified_format]
128
+ page.filename_truncate_length = options[:filename_truncate_length]
123
129
 
124
130
  ##
125
131
  # Get the public folder, request path, and parameters and
126
132
  # store in globals to be used by the Resource class.
127
133
 
128
- $public_folder = settings.public_folder
129
- $request_path = request.path
130
- $request_params = request.params
134
+ page.public_folder = settings.public_folder
135
+ page.request_path = request.path
136
+ page.request_params = request.params
131
137
 
132
138
  ##
133
139
  # Start generating strings to be injected into the erb template
134
140
 
135
- $current_page = URI.unescape(request.path)
136
- $readme = options[:readme] if options[:readme]
141
+ page.current_page = URI.unescape(request.path)
142
+ page.readme = options[:readme] if options[:readme]
137
143
  if options[:stylesheet]
138
- $stylesheet = "<link rel='stylesheet' type='text/css' href='/#{options[:stylesheet].sub(/^[\/]*/,"")}'>"
144
+ page.stylesheet = "<link rel='stylesheet' type='text/css' href='/#{options[:stylesheet].sub(/^[\/]*/,"")}'>"
139
145
  end
140
146
 
141
147
  ##
@@ -144,12 +150,12 @@ module Sinatra
144
150
 
145
151
  if URI.unescape(request.path) != "/"
146
152
  back_link = Pathname.new(request.path).parent
147
- if $request_params["sortby"] && $request_params["direction"]
148
- back_link = back_link.to_s + "?sortby=" + $request_params["sortby"] + "&direction=" + $request_params["direction"]
153
+ if page.request_params["sortby"] && page.request_params["direction"]
154
+ back_link = back_link.to_s + "?sortby=" + page.request_params["sortby"] + "&direction=" + page.request_params["direction"]
149
155
  end
150
- $back_to_link = "<a href='#{back_link}'>&larr; Parent directory</a>"
156
+ page.back_to_link = "<a href='#{back_link}'>&larr; Parent directory</a>"
151
157
  else
152
- $back_to_link = "<a>Root directory</a>"
158
+ page.back_to_link = "<a>Root directory</a>"
153
159
  end
154
160
 
155
161
  ##
@@ -163,9 +169,9 @@ module Sinatra
163
169
  ##
164
170
  # If the only thing in the array are invisible files, display a "No files" listing.
165
171
 
166
- $files_html = ""
172
+ page.files_html = ""
167
173
  if files == [".", ".."]
168
- $files_html << "
174
+ page.files_html << "
169
175
  <tr>
170
176
  <th>No files.</th>
171
177
  <th>-</th>
@@ -178,17 +184,17 @@ module Sinatra
178
184
 
179
185
  resources = Array.new
180
186
  Dir.foreach(File.join(settings.public_folder, URI.unescape(request.path))) do |resource|
181
- resources.push(Resource.new(resource))
187
+ resources.push(Resource.new(resource, page))
182
188
  end
183
189
 
184
190
  ##
185
191
  # Get the sortby and direction parameters ("file" and "ascending", by
186
192
  # default).
187
193
 
188
- $sort_item = "file"
189
- $sort_direction = "ascending"
190
- $sort_item = $request_params["sortby"] if $request_params["sortby"]
191
- $sort_direction = $request_params["direction"] if $request_params["direction"]
194
+ page.sort_item = "file"
195
+ page.sort_direction = "ascending"
196
+ page.sort_item = page.request_params["sortby"] if page.request_params["sortby"]
197
+ page.sort_direction = page.request_params["direction"] if page.request_params["direction"]
192
198
 
193
199
  ##
194
200
  # Sort the resources.
@@ -196,55 +202,55 @@ module Sinatra
196
202
  # or "size"), and whether to sort in order ("ascending") or reverse
197
203
  # ("descending").
198
204
 
199
- sorted_resources = Resource.sort(resources, $sort_item, $sort_direction)
205
+ sorted_resources = Resource.sort(resources, page.sort_item, page.sort_direction)
200
206
 
201
207
  ##
202
208
  # Set display variables and sort links based on sorting variables
203
209
 
204
210
  file_link_dir = mtime_link_dir = sortby_link_dir = "ascending"
205
211
 
206
- case $sort_item
212
+ case page.sort_item
207
213
  when "file"
208
- $sort_item_display = "alphabetically"
209
- case $sort_direction
214
+ page.sort_item_display = "alphabetically"
215
+ case page.sort_direction
210
216
  when "ascending"
211
- $sort_direction_display = ""
217
+ page.sort_direction_display = ""
212
218
  file_link_dir = "descending"
213
219
  when "descending"
214
- $sort_direction_display = "reversed"
220
+ page.sort_direction_display = "reversed"
215
221
  file_link_dir = "ascending"
216
222
  end
217
223
  when "mtime"
218
- $sort_item_display = "by modification date"
219
- case $sort_direction
224
+ page.sort_item_display = "by modification date"
225
+ case page.sort_direction
220
226
  when "ascending"
221
- $sort_direction_display = "oldest to newest"
227
+ page.sort_direction_display = "oldest to newest"
222
228
  mtime_link_dir = "descending"
223
229
  when "descending"
224
- $sort_direction_display = "newest to oldest"
230
+ page.sort_direction_display = "newest to oldest"
225
231
  mtime_link_dir = "ascending"
226
232
  end
227
233
  when "size"
228
- $sort_item_display = "by size"
229
- case $sort_direction
234
+ page.sort_item_display = "by size"
235
+ case page.sort_direction
230
236
  when "ascending"
231
- $sort_direction_display = "smallest to largest"
237
+ page.sort_direction_display = "smallest to largest"
232
238
  sortby_link_dir = "descending"
233
239
  when "descending"
234
- $sort_direction_display = "largest to smallest"
240
+ page.sort_direction_display = "largest to smallest"
235
241
  sortby_link_dir = "ascending"
236
242
  end
237
243
  end
238
244
 
239
- $file_sort_link = "?sortby=file&direction=#{file_link_dir}"
240
- $mtime_sort_link = "?sortby=mtime&direction=#{mtime_link_dir}"
241
- $size_sort_link = "?sortby=size&direction=#{sortby_link_dir}"
245
+ page.file_sort_link = "?sortby=file&direction=#{file_link_dir}"
246
+ page.mtime_sort_link = "?sortby=mtime&direction=#{mtime_link_dir}"
247
+ page.size_sort_link = "?sortby=size&direction=#{sortby_link_dir}"
242
248
 
243
249
  ##
244
250
  # Finally, generate the html from the array of Resources.
245
251
 
246
252
  sorted_resources.each do |resource|
247
- $files_html << resource.wrap
253
+ page.files_html << resource.wrap
248
254
  end
249
255
  end
250
256
 
@@ -252,7 +258,7 @@ module Sinatra
252
258
  # Generate and return the complete page from the erb template.
253
259
 
254
260
  erb = ERB.new(LAYOUT)
255
- erb.result
261
+ erb.result(binding)
256
262
  end
257
263
 
258
264
  end
@@ -0,0 +1,3 @@
1
+ body {
2
+ background-color: blue;
3
+ }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: directory_listing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-06 00:00:00.000000000 Z
12
+ date: 2013-09-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: filesize
@@ -123,6 +123,7 @@ files:
123
123
  - directory_listing.gemspec
124
124
  - lib/sinatra/directory_listing.rb
125
125
  - lib/sinatra/directory_listing/layout.rb
126
+ - lib/sinatra/directory_listing/page.rb
126
127
  - lib/sinatra/directory_listing/resource.rb
127
128
  - lib/sinatra/directory_listing/version.rb
128
129
  - test/public/1234.txt