httpit 0.4.6 → 0.4.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +2 -0
- data/bin/httpit +38 -8
- data/httpit.gemspec +23 -2
- data/views/listing.haml +7 -2
- metadata +8 -17
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 98c43fc1129be5731066b38bb0fe2f30dd0b1a67
|
4
|
+
data.tar.gz: fc6cf57c5eec0b74e4e294900fcaa31ad23adfe6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 75a9b1f86921ca2dce0394b4b3990e51541c42659de70ad5cffcf664d6e20c0cae9c51451d5de754b6d15dfa675156d17f77f6c1e5a641af6a7174748753bc57
|
7
|
+
data.tar.gz: 0040ad430f5f5adf7d331326c35031014e1dcfefb888df53cf9c51f1903941063c269a7824832cc14fed1e8af388bd57aa6c635a5f5a0bac39385d6a80e89007
|
data/README.md
CHANGED
data/bin/httpit
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
|
2
3
|
require "rubygems"
|
3
4
|
|
4
5
|
require "fileutils"
|
5
6
|
require "pathname"
|
7
|
+
require 'shellwords'
|
6
8
|
|
7
9
|
GEM_ROOT = Pathname.new(__FILE__).dirname.join("..").expand_path
|
8
10
|
ENV['BUNDLE_GEMFILE'] ||= GEM_ROOT.join("Gemfile").to_s
|
@@ -11,6 +13,7 @@ require "bundler/setup"
|
|
11
13
|
require 'sinatra/base'
|
12
14
|
require 'haml'
|
13
15
|
require 'sass'
|
16
|
+
require 'sass/plugin'
|
14
17
|
require 'redcloth'
|
15
18
|
|
16
19
|
ROOT = Pathname.pwd
|
@@ -18,6 +21,13 @@ ROOT = Pathname.pwd
|
|
18
21
|
TMP_DIR = File.expand_path("#{Dir.tmpdir}/#{Time.now.to_i}#{rand(1000)}/")
|
19
22
|
FileUtils.mkdir_p(TMP_DIR)
|
20
23
|
|
24
|
+
class Tilt::SassTemplate
|
25
|
+
alias_method :sass_options_original, :sass_options
|
26
|
+
def sass_options
|
27
|
+
sass_options_original.merge(:cache_location => File.join(TMP_DIR, 'sass-cache'))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
21
31
|
# this hack allow
|
22
32
|
# /some/folder/with/content + /subfolder => /some/folder/with/content/subfolder
|
23
33
|
class << ROOT
|
@@ -40,7 +50,7 @@ class HttpIt < Sinatra::Base
|
|
40
50
|
set :public_folder, ROOT
|
41
51
|
set :app_file, $0
|
42
52
|
set :static, false
|
43
|
-
set :sass, :cache =>
|
53
|
+
set :sass, :cache => false, :cache_location => File.join(TMP_DIR, 'sass-cache')
|
44
54
|
|
45
55
|
helpers do
|
46
56
|
def with_layout(template, &block)
|
@@ -52,12 +62,18 @@ class HttpIt < Sinatra::Base
|
|
52
62
|
end
|
53
63
|
end
|
54
64
|
|
55
|
-
def file_url(path, file)
|
65
|
+
def file_url(path, file, type = nil)
|
56
66
|
path = "#{path}/#{file}"
|
57
|
-
path.split("/").map {|p| CGI::escape(p) }.join('/')
|
67
|
+
path.split("/").map {|p| CGI::escape(p) }.join('/') + (type == :dir ? '/' : '')
|
58
68
|
end
|
59
69
|
end
|
60
70
|
|
71
|
+
def list_files(path, sorter)
|
72
|
+
cmd = %{cd "#{path.to_s.shellescape}" && ls -A #{sorter}}
|
73
|
+
result = `#{cmd}`.force_encoding(Encoding::UTF_8)
|
74
|
+
result.split("\n")
|
75
|
+
end
|
76
|
+
|
61
77
|
# build array of contents and theris type for specified folder
|
62
78
|
def get_content(folder = nil, sort = nil)
|
63
79
|
abs_path = folder ? ROOT + folder : ROOT
|
@@ -71,15 +87,15 @@ class HttpIt < Sinatra::Base
|
|
71
87
|
else ''
|
72
88
|
end
|
73
89
|
|
74
|
-
|
90
|
+
list_files(abs_path, sorter).map do |obj|
|
75
91
|
file_path = abs_path + obj
|
76
92
|
[obj,
|
77
93
|
if file_path.file?; :file
|
78
94
|
elsif file_path.directory?; :dir
|
79
95
|
elsif file_path.symlink?; :link
|
80
96
|
end,
|
81
|
-
|
82
|
-
!!`file "#{file_path.to_s.
|
97
|
+
|
98
|
+
!!`file "#{file_path.to_s.shellescape}"`.force_encoding(Encoding::UTF_8).sub(file_path.to_s, '').index(/text/i)
|
83
99
|
]
|
84
100
|
end
|
85
101
|
end
|
@@ -110,7 +126,7 @@ class HttpIt < Sinatra::Base
|
|
110
126
|
end
|
111
127
|
|
112
128
|
get '/__img_preview' do
|
113
|
-
params[:file] = params[:file].
|
129
|
+
params[:file] = params[:file].shellescape
|
114
130
|
tmppath = "/tmp/httpit_preview_#{Time.now.to_i}.jpeg"
|
115
131
|
`convert #{ROOT + params[:file]} -resize 1024 -quality 100% #{tmppath}`
|
116
132
|
content_type "image/jpeg"
|
@@ -119,6 +135,20 @@ class HttpIt < Sinatra::Base
|
|
119
135
|
content
|
120
136
|
end
|
121
137
|
|
138
|
+
get '/__view' do
|
139
|
+
params[:file] = params[:file].shellescape.sub(/^.\//, '/')
|
140
|
+
begin
|
141
|
+
@content = File.open(ROOT + params[:file], 'r:utf-8', &:read)
|
142
|
+
haml view(:view)
|
143
|
+
rescue Errno::ENOENT => e
|
144
|
+
if e.message =~ /No such file or directory/
|
145
|
+
halt 404
|
146
|
+
else
|
147
|
+
raise e
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
122
152
|
# shows folder contents
|
123
153
|
get %r{.+} do
|
124
154
|
return nil if request.path == '/favicon.ico'
|
@@ -160,7 +190,7 @@ class HttpIt < Sinatra::Base
|
|
160
190
|
end
|
161
191
|
|
162
192
|
error 404 do
|
163
|
-
@path = request.path
|
193
|
+
@path = params[:file] || request.path
|
164
194
|
haml view(:not_found)
|
165
195
|
end
|
166
196
|
end
|
data/httpit.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "httpit"
|
3
|
-
s.version = "0.4.
|
3
|
+
s.version = "0.4.7"
|
4
4
|
s.summary = "Web server for static files"
|
5
5
|
s.description = "Just go to folder and run `httpit` to make it avaliable as web-server"
|
6
6
|
s.author = "Pavel Evstigneev"
|
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.has_rdoc = false
|
10
10
|
s.executables = ["httpit"]
|
11
11
|
s.rubyforge_project = "httpit"
|
12
|
-
s.files =
|
12
|
+
s.files = File.read(__FILE__).match(/__#{'END'}__(.+)\z/m)[1].strip.split("\n")
|
13
13
|
s.licenses = ['MIT', 'GPL-2']
|
14
14
|
|
15
15
|
s.add_runtime_dependency 'sinatra', "~> 1.4.2"
|
@@ -17,3 +17,24 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.add_runtime_dependency 'RedCloth', "~> 4.2.9"
|
18
18
|
s.add_runtime_dependency 'sass', "~> 3.2.8"
|
19
19
|
end
|
20
|
+
|
21
|
+
# git ls-files
|
22
|
+
__END__
|
23
|
+
.gitignore
|
24
|
+
Gemfile
|
25
|
+
Gemfile.lock
|
26
|
+
LICENSE
|
27
|
+
README.md
|
28
|
+
bin/httpit
|
29
|
+
example/images/bird.jpg
|
30
|
+
example/index.haml
|
31
|
+
example/main.sass
|
32
|
+
example/readme.md
|
33
|
+
example/testing_design/_header.haml
|
34
|
+
example/testing_design/index.haml
|
35
|
+
example/testing_design/layout.sass
|
36
|
+
httpit.gemspec
|
37
|
+
views/listing.haml
|
38
|
+
views/not_found.haml
|
39
|
+
views/utils.js
|
40
|
+
views/view.haml
|
data/views/listing.haml
CHANGED
@@ -7,6 +7,11 @@
|
|
7
7
|
:width 800px
|
8
8
|
:margin 30 auto 50px
|
9
9
|
|
10
|
+
a
|
11
|
+
:color #1777E0
|
12
|
+
&:hover
|
13
|
+
:color #006db2
|
14
|
+
|
10
15
|
span
|
11
16
|
:color #777
|
12
17
|
|
@@ -52,11 +57,11 @@
|
|
52
57
|
- elsif file[1] == :link
|
53
58
|
%span= "→"
|
54
59
|
|
55
|
-
%a{:href => file_url(@path, file[0])}= file[0]
|
60
|
+
%a{:href => file_url(@path, file[0], file[1])}= file[0]
|
56
61
|
|
57
62
|
- if %w{.jpg .jpeg .png .gif}.include?(File.extname(file[0]).downcase)
|
58
63
|
%a{:href => "/__img_preview?file=#{file_url(@path, file[0])}", :class => "preview_link"} #1024
|
59
64
|
- if file[2]
|
60
|
-
%a{:href => "/__view?file
|
65
|
+
%a{:href => "/__view?file=.#{file_url(@path, file[0])}", :class => "preview_link"} view
|
61
66
|
|
62
67
|
%script{:type => "text/javascript"}= GEM_ROOT.join('views/utils.js').read
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: httpit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
5
|
-
prerelease:
|
4
|
+
version: 0.4.7
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Pavel Evstigneev
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-12-25 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: sinatra
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: haml
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: RedCloth
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: sass
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ~>
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ~>
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -104,26 +95,26 @@ homepage: http://github.com/Paxa/httpit
|
|
104
95
|
licenses:
|
105
96
|
- MIT
|
106
97
|
- GPL-2
|
98
|
+
metadata: {}
|
107
99
|
post_install_message:
|
108
100
|
rdoc_options: []
|
109
101
|
require_paths:
|
110
102
|
- lib
|
111
103
|
required_ruby_version: !ruby/object:Gem::Requirement
|
112
|
-
none: false
|
113
104
|
requirements:
|
114
|
-
- -
|
105
|
+
- - '>='
|
115
106
|
- !ruby/object:Gem::Version
|
116
107
|
version: '0'
|
117
108
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
|
-
none: false
|
119
109
|
requirements:
|
120
|
-
- -
|
110
|
+
- - '>='
|
121
111
|
- !ruby/object:Gem::Version
|
122
112
|
version: '0'
|
123
113
|
requirements: []
|
124
114
|
rubyforge_project: httpit
|
125
|
-
rubygems_version:
|
115
|
+
rubygems_version: 2.0.6
|
126
116
|
signing_key:
|
127
|
-
specification_version:
|
117
|
+
specification_version: 4
|
128
118
|
summary: Web server for static files
|
129
119
|
test_files: []
|
120
|
+
has_rdoc: false
|