publicious 0.2.3 → 0.3.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.
- data/lib/publicious.rb +65 -9
- data/lib/publicious/mime_types.rb +3 -0
- data/lib/publicious/railtie.rb +9 -0
- data/publicious.gemspec +2 -2
- data/test/test_helper.rb +14 -12
- metadata +6 -5
- data/config/routes.rb +0 -5
- data/lib/publicious/responder.rb +0 -51
data/lib/publicious.rb
CHANGED
@@ -1,18 +1,74 @@
|
|
1
1
|
if defined?(Rails)
|
2
|
+
require 'publicious/railtie'
|
3
|
+
require 'publicious/mime_types'
|
4
|
+
end
|
5
|
+
|
6
|
+
class Publicious
|
7
|
+
FILE_METHODS = %w(GET HEAD).freeze
|
8
|
+
|
9
|
+
def initialize(app)
|
10
|
+
@app = app
|
11
|
+
yield if block_given?
|
12
|
+
end
|
13
|
+
|
14
|
+
def klass
|
15
|
+
self.class
|
16
|
+
end
|
17
|
+
|
18
|
+
def call(env)
|
19
|
+
puts "we're in Publicious"
|
20
|
+
request = Rack::Request.new(env)
|
21
|
+
return @app.call(env) unless FILE_METHODS.include?(request.request_method)
|
22
|
+
|
23
|
+
if request.path_info =~ %r{^\/(#{klass.allowed_dirs.join("|")})}
|
24
|
+
file_name = nil
|
25
|
+
path = nil
|
26
|
+
|
27
|
+
klass.public_paths.detect do |pub_path|
|
28
|
+
path = pub_path
|
29
|
+
fp = File.join(pub_path, request.path_info)
|
30
|
+
file_name = fp if File.file?(fp)
|
31
|
+
end
|
32
|
+
|
33
|
+
return respond_not_found! unless file_name
|
2
34
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
35
|
+
# Make sure pricks aren't ../../config/database.yml ing us
|
36
|
+
respond_not_found! unless file_name.gsub(%r[^#{path}], "") == request.path_info
|
37
|
+
|
38
|
+
Rack::Response.new(
|
39
|
+
File.open(file_name),
|
40
|
+
200,'Content-Type' => content_type_for_file(file_name)
|
41
|
+
).finish
|
42
|
+
else
|
43
|
+
@app.call(env)
|
9
44
|
end
|
10
45
|
end
|
11
|
-
|
12
|
-
end
|
13
46
|
|
47
|
+
def respond_not_found!
|
48
|
+
Rack::Response.new("Not Found", 404).finish
|
49
|
+
end
|
50
|
+
|
51
|
+
def content_type_for_file(name)
|
52
|
+
file_name = File.basename(name).split(".").last.to_s
|
53
|
+
Mime::Type.lookup_by_extension(file_name).to_s
|
54
|
+
end
|
14
55
|
|
56
|
+
def self.allowed_dirs
|
57
|
+
%w(stylesheets javascripts images)
|
58
|
+
end
|
15
59
|
|
16
|
-
|
60
|
+
def self.public_paths
|
61
|
+
@public_paths ||= begin
|
62
|
+
paths = []
|
63
|
+
paths += add_engines_public_paths! if defined?(::Rails::Engine)
|
64
|
+
paths
|
65
|
+
end
|
66
|
+
end
|
17
67
|
|
68
|
+
def self.add_engines_public_paths!
|
69
|
+
::Rails::Engine.subclasses.map { |klass|
|
70
|
+
klass.config.paths.public.paths.first
|
71
|
+
}.flatten.compact.reject { |path| path =~ /publicious/}
|
72
|
+
end
|
73
|
+
end
|
18
74
|
|
@@ -0,0 +1,9 @@
|
|
1
|
+
#class PubliciousRailtie < Rails::Railtie
|
2
|
+
# config.app.middelware.insert_before(Rack::Lock, Publicious)
|
3
|
+
#end
|
4
|
+
|
5
|
+
class MyRailtie < Rails::Railtie
|
6
|
+
initializer "my_railtie.configure_rails_initialization" do |app|
|
7
|
+
app.middleware.insert_before(Rack::Lock, Publicious)
|
8
|
+
end
|
9
|
+
end
|
data/publicious.gemspec
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = %q{publicious}
|
3
|
-
s.version = "0.
|
3
|
+
s.version = "0.3.0"
|
4
4
|
|
5
5
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
6
6
|
s.authors = ["Justin French", "Daniel Neighman"]
|
7
|
-
s.date = %q{2010-07-
|
7
|
+
s.date = %q{2010-07-22}
|
8
8
|
s.description = %q{A Rails 3 gem plugin for plugins to serve images, javascripts and stylesheets from thier own public directory}
|
9
9
|
s.summary = %q{A Rails gem plugin for plugins to serve images, javascripts and stylesheets from thier own public directory}
|
10
10
|
s.email = %q{justin@indent.com.au}
|
data/test/test_helper.rb
CHANGED
@@ -7,20 +7,22 @@ require "publicious"
|
|
7
7
|
|
8
8
|
RAILS_ROOT = "/tmp"
|
9
9
|
|
10
|
+
NOT_FOUND_APP = lambda{|e| Rack::Response.new("NOT FOUND", 404).finish}
|
11
|
+
|
10
12
|
module TestHelper
|
11
13
|
include Rack::Test::Methods
|
12
|
-
|
14
|
+
|
13
15
|
def app
|
14
|
-
Publicious
|
16
|
+
Publicious.new(NOT_FOUND_APP)
|
15
17
|
end
|
16
|
-
|
18
|
+
|
17
19
|
def setup_vendor_dir
|
18
20
|
unless @vendor_dir
|
19
21
|
@vendor_dir = "/tmp/vendor"
|
20
22
|
FileUtils.mkdir(@vendor_dir)
|
21
23
|
end
|
22
24
|
end
|
23
|
-
|
25
|
+
|
24
26
|
def teardown_vendor_dir
|
25
27
|
if @vendor_dir
|
26
28
|
begin
|
@@ -30,25 +32,25 @@ module TestHelper
|
|
30
32
|
end
|
31
33
|
end
|
32
34
|
end
|
33
|
-
|
35
|
+
|
34
36
|
def setup_standard_view_paths
|
35
37
|
ActionController::Base.view_paths = ['/tmp/app/views']
|
36
38
|
end
|
37
|
-
|
39
|
+
|
38
40
|
def setup
|
39
41
|
setup_vendor_dir
|
40
42
|
setup_standard_view_paths
|
41
43
|
end
|
42
|
-
|
44
|
+
|
43
45
|
def teardown
|
44
46
|
teardown_vendor_dir
|
45
47
|
setup_standard_view_paths
|
46
48
|
end
|
47
|
-
|
49
|
+
|
48
50
|
def setup_plugin(*plugin_names)
|
49
51
|
plugin_names.each do |plugin_name|
|
50
52
|
plugin_name = plugin_name.to_s
|
51
|
-
|
53
|
+
|
52
54
|
class_eval "
|
53
55
|
module ::#{plugin_name.classify}
|
54
56
|
class Engine < ::Rails::Engine
|
@@ -56,9 +58,9 @@ module TestHelper
|
|
56
58
|
paths.public = '#{@vendor_dir}/#{plugin_name}/public'
|
57
59
|
end
|
58
60
|
end"
|
59
|
-
|
61
|
+
|
60
62
|
#ActionController::Base.view_paths << File.join(@vendor_dir, plugin_name, 'app', 'views')
|
61
|
-
|
63
|
+
|
62
64
|
FileUtils.mkdir(File.join(@vendor_dir, plugin_name))
|
63
65
|
FileUtils.mkdir(File.join(@vendor_dir, plugin_name, 'public'))
|
64
66
|
FileUtils.mkdir(File.join(@vendor_dir, plugin_name, 'public', 'stylesheets'))
|
@@ -66,5 +68,5 @@ module TestHelper
|
|
66
68
|
FileUtils.mkdir(File.join(@vendor_dir, plugin_name, 'public', 'javascripts'))
|
67
69
|
end
|
68
70
|
end
|
69
|
-
|
71
|
+
|
70
72
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
- 2
|
8
7
|
- 3
|
9
|
-
|
8
|
+
- 0
|
9
|
+
version: 0.3.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Justin French
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-07-
|
18
|
+
date: 2010-07-22 00:00:00 +10:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -28,10 +28,11 @@ extensions: []
|
|
28
28
|
extra_rdoc_files:
|
29
29
|
- README.textile
|
30
30
|
files:
|
31
|
-
-
|
32
|
-
- lib/publicious/
|
31
|
+
- lib/publicious/mime_types.rb
|
32
|
+
- lib/publicious/railtie.rb
|
33
33
|
- lib/publicious.rb
|
34
34
|
- MIT-LICENSE
|
35
|
+
- publicious-0.3.0.gem
|
35
36
|
- publicious.gemspec
|
36
37
|
- Rakefile
|
37
38
|
- README.textile
|
data/config/routes.rb
DELETED
data/lib/publicious/responder.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
module Publicious
|
2
|
-
class Responder
|
3
|
-
|
4
|
-
def self.call(env)
|
5
|
-
request = Rack::Request.new(env)
|
6
|
-
if request.path_info =~ %r{^\/(#{allowed_dirs.join("|")})}
|
7
|
-
file_name = nil
|
8
|
-
path = nil
|
9
|
-
|
10
|
-
public_paths.detect do |pub_path|
|
11
|
-
path = pub_path
|
12
|
-
fp = File.join(pub_path, request.path_info)
|
13
|
-
file_name = fp if File.file?(fp)
|
14
|
-
end
|
15
|
-
|
16
|
-
return respond_not_found! unless file_name
|
17
|
-
|
18
|
-
# Make sure pricks aren't ../../config/database.yml ing us
|
19
|
-
respond_not_found! unless file_name.gsub(%r[^#{path}], "") == request.path_info
|
20
|
-
|
21
|
-
Rack::Response.new(
|
22
|
-
File.open(file_name),
|
23
|
-
200,'Content-Type' => content_type_for_file(file_name)
|
24
|
-
).finish
|
25
|
-
else
|
26
|
-
respond_not_found!
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.respond_not_found!
|
31
|
-
Rack::Response.new("Not Found", 404).finish
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.allowed_dirs
|
35
|
-
%w(stylesheets javascripts images)
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.content_type_for_file(name)
|
39
|
-
file_name = File.basename(name).split(".").last.to_s
|
40
|
-
Mime::Type.lookup_by_extension(file_name).to_s
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.public_paths
|
44
|
-
::Rails::Engine.subclasses.map { |klass|
|
45
|
-
klass.config.paths.public.paths.first
|
46
|
-
}.flatten.compact.reject { |path| path =~ /publicious/}
|
47
|
-
end
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|