publicious 0.1.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +0 -10
- data/config/routes.rb +5 -0
- data/lib/publicious.rb +13 -1
- data/lib/publicious/responder.rb +51 -0
- data/publicious-0.2.0.gem +0 -0
- data/publicious.gemspec +29 -0
- data/test/multiple_match_test.rb +1 -13
- data/test/single_match_test.rb +1 -13
- data/test/test_helper.rb +13 -5
- metadata +21 -19
- data/VERSION +0 -1
- data/app/metal/publicious_metal.rb +0 -49
- data/rails/init.rb +0 -3
data/Rakefile
CHANGED
@@ -10,16 +10,6 @@ Rake::TestTask.new(:test) do |t|
|
|
10
10
|
t.pattern = 'test/*_test.rb'
|
11
11
|
end
|
12
12
|
|
13
|
-
require 'jeweler'
|
14
|
-
Jeweler::Tasks.new do |gemspec|
|
15
|
-
gemspec.name = "publicious"
|
16
|
-
gemspec.summary = "A Rails gem plugin for plugins to serve images, javascripts and stylesheets from thier own public directory"
|
17
|
-
gemspec.description = "A Rails gem plugin for plugins to serve images, javascripts and stylesheets from thier own public directory"
|
18
|
-
gemspec.email = "justin@indent.com.au"
|
19
|
-
gemspec.homepage = "http://github.com/justinfrench/publicious"
|
20
|
-
gemspec.authors = ["Justin French", "Daniel Neighman"]
|
21
|
-
end
|
22
|
-
|
23
13
|
desc 'Generate documentation for the Publicious plugin.'
|
24
14
|
Rake::RDocTask.new(:rdoc) do |rdoc|
|
25
15
|
rdoc.rdoc_dir = 'rdoc'
|
data/config/routes.rb
ADDED
data/lib/publicious.rb
CHANGED
@@ -1 +1,13 @@
|
|
1
|
-
|
1
|
+
Mime::Type.register "image/jpeg", :jpg
|
2
|
+
Mime::Type.register "image/gif", :gif
|
3
|
+
Mime::Type.register "image/png", :png
|
4
|
+
|
5
|
+
module Publicious
|
6
|
+
class Engine < Rails::Engine
|
7
|
+
engine_name :publicious
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
require "publicious/responder"
|
12
|
+
|
13
|
+
|
@@ -0,0 +1,51 @@
|
|
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
|
Binary file
|
data/publicious.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = %q{publicious}
|
3
|
+
s.version = "0.2.1"
|
4
|
+
|
5
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
6
|
+
s.authors = ["Justin French", "Daniel Neighman"]
|
7
|
+
s.date = %q{2010-07-02}
|
8
|
+
s.description = %q{A Rails 3 gem plugin for plugins to serve images, javascripts and stylesheets from thier own public directory}
|
9
|
+
s.summary = %q{A Rails gem plugin for plugins to serve images, javascripts and stylesheets from thier own public directory}
|
10
|
+
s.email = %q{justin@indent.com.au}
|
11
|
+
s.homepage = %q{http://github.com/justinfrench/publicious}
|
12
|
+
s.extra_rdoc_files = [
|
13
|
+
"README.textile"
|
14
|
+
]
|
15
|
+
s.files = Dir["**/*"]
|
16
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
s.rubygems_version = %q{1.3.5}
|
19
|
+
|
20
|
+
if s.respond_to? :specification_version then
|
21
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
22
|
+
s.specification_version = 3
|
23
|
+
|
24
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
25
|
+
else
|
26
|
+
end
|
27
|
+
else
|
28
|
+
end
|
29
|
+
end
|
data/test/multiple_match_test.rb
CHANGED
@@ -33,19 +33,7 @@ class MultipleMatchesTest < Test::Unit::TestCase
|
|
33
33
|
def test_should_respond_with_success
|
34
34
|
assert last_response.ok?
|
35
35
|
end
|
36
|
-
|
37
|
-
def test_view_paths_should_contain_three_items
|
38
|
-
assert_equal 4, ActionController::Base.view_paths.size
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_public_paths_should_contain_two_items
|
42
|
-
assert_equal 3, app.public_paths.size # one less that view_paths
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_public_paths_should_contain_the_plugins_public_dir
|
46
|
-
assert_equal "/tmp/vendor/my_plugin/public", app.public_paths.second
|
47
|
-
end
|
48
|
-
|
36
|
+
|
49
37
|
def test_should_respond_with_first_file_contents
|
50
38
|
assert_equal File.read(@filename_1), last_response.body
|
51
39
|
assert_equal @filecontents_1, last_response.body
|
data/test/single_match_test.rb
CHANGED
@@ -23,19 +23,7 @@ class SingleMatchTest < Test::Unit::TestCase
|
|
23
23
|
def test_should_respond_with_success
|
24
24
|
assert last_response.ok?
|
25
25
|
end
|
26
|
-
|
27
|
-
def test_view_paths_should_contain_three_items
|
28
|
-
assert_equal 2, ActionController::Base.view_paths.size
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_public_paths_should_contain_two_items
|
32
|
-
assert_equal 1, app.public_paths.size # one less that view_paths
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_public_paths_should_contain_the_plugins_public_dir
|
36
|
-
assert_equal "/tmp/vendor/my_plugin/public", app.public_paths.first
|
37
|
-
end
|
38
|
-
|
26
|
+
|
39
27
|
def test_should_respond_with_first_file_contents
|
40
28
|
assert_equal File.read(@filename), last_response.body
|
41
29
|
assert_equal @filecontents, last_response.body
|
data/test/test_helper.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'test/unit'
|
3
3
|
require "rack/test"
|
4
|
+
require "rails"
|
4
5
|
require "action_controller"
|
5
|
-
require
|
6
|
-
require File.join(File.dirname(__FILE__), "../rails/init")
|
6
|
+
require "publicious"
|
7
7
|
|
8
8
|
RAILS_ROOT = "/tmp"
|
9
9
|
|
@@ -11,7 +11,7 @@ module TestHelper
|
|
11
11
|
include Rack::Test::Methods
|
12
12
|
|
13
13
|
def app
|
14
|
-
|
14
|
+
Publicious::Responder
|
15
15
|
end
|
16
16
|
|
17
17
|
def setup_vendor_dir
|
@@ -49,8 +49,16 @@ module TestHelper
|
|
49
49
|
plugin_names.each do |plugin_name|
|
50
50
|
plugin_name = plugin_name.to_s
|
51
51
|
|
52
|
-
|
53
|
-
|
52
|
+
class_eval "
|
53
|
+
module ::#{plugin_name.classify}
|
54
|
+
class Engine < ::Rails::Engine
|
55
|
+
#engine_name :#{plugin_name}
|
56
|
+
paths.public = '#{@vendor_dir}/#{plugin_name}/public'
|
57
|
+
end
|
58
|
+
end"
|
59
|
+
|
60
|
+
#ActionController::Base.view_paths << File.join(@vendor_dir, plugin_name, 'app', 'views')
|
61
|
+
|
54
62
|
FileUtils.mkdir(File.join(@vendor_dir, plugin_name))
|
55
63
|
FileUtils.mkdir(File.join(@vendor_dir, plugin_name, 'public'))
|
56
64
|
FileUtils.mkdir(File.join(@vendor_dir, plugin_name, 'public', 'stylesheets'))
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: publicious
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 2
|
8
|
+
- 1
|
9
|
+
version: 0.2.1
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Justin French
|
@@ -10,11 +15,11 @@ autorequire:
|
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
17
|
|
13
|
-
date:
|
18
|
+
date: 2010-07-02 00:00:00 +10:00
|
14
19
|
default_executable:
|
15
20
|
dependencies: []
|
16
21
|
|
17
|
-
description: A Rails gem plugin for plugins to serve images, javascripts and stylesheets from thier own public directory
|
22
|
+
description: A Rails 3 gem plugin for plugins to serve images, javascripts and stylesheets from thier own public directory
|
18
23
|
email: justin@indent.com.au
|
19
24
|
executables: []
|
20
25
|
|
@@ -23,13 +28,14 @@ extensions: []
|
|
23
28
|
extra_rdoc_files:
|
24
29
|
- README.textile
|
25
30
|
files:
|
31
|
+
- config/routes.rb
|
32
|
+
- lib/publicious/responder.rb
|
33
|
+
- lib/publicious.rb
|
26
34
|
- MIT-LICENSE
|
27
|
-
-
|
35
|
+
- publicious-0.2.0.gem
|
36
|
+
- publicious.gemspec
|
28
37
|
- Rakefile
|
29
|
-
-
|
30
|
-
- app/metal/publicious_metal.rb
|
31
|
-
- lib/publicious.rb
|
32
|
-
- rails/init.rb
|
38
|
+
- README.textile
|
33
39
|
- test/css_test.rb
|
34
40
|
- test/image_test.rb
|
35
41
|
- test/javascript_test.rb
|
@@ -50,26 +56,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
50
56
|
requirements:
|
51
57
|
- - ">="
|
52
58
|
- !ruby/object:Gem::Version
|
59
|
+
segments:
|
60
|
+
- 0
|
53
61
|
version: "0"
|
54
|
-
version:
|
55
62
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
63
|
requirements:
|
57
64
|
- - ">="
|
58
65
|
- !ruby/object:Gem::Version
|
66
|
+
segments:
|
67
|
+
- 0
|
59
68
|
version: "0"
|
60
|
-
version:
|
61
69
|
requirements: []
|
62
70
|
|
63
71
|
rubyforge_project:
|
64
|
-
rubygems_version: 1.3.
|
72
|
+
rubygems_version: 1.3.6
|
65
73
|
signing_key:
|
66
74
|
specification_version: 3
|
67
75
|
summary: A Rails gem plugin for plugins to serve images, javascripts and stylesheets from thier own public directory
|
68
|
-
test_files:
|
69
|
-
|
70
|
-
- test/image_test.rb
|
71
|
-
- test/javascript_test.rb
|
72
|
-
- test/multiple_match_test.rb
|
73
|
-
- test/no_match_test.rb
|
74
|
-
- test/single_match_test.rb
|
75
|
-
- test/test_helper.rb
|
76
|
+
test_files: []
|
77
|
+
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.1.0
|
@@ -1,49 +0,0 @@
|
|
1
|
-
class PubliciousMetal
|
2
|
-
|
3
|
-
def self.call(env)
|
4
|
-
request = Rack::Request.new(env)
|
5
|
-
if request.path_info =~ %r{^\/(#{allowed_dirs.join("|")})}
|
6
|
-
file_name = nil
|
7
|
-
path = nil
|
8
|
-
|
9
|
-
public_paths.detect do |pub_path|
|
10
|
-
path = pub_path
|
11
|
-
fp = File.join(pub_path, request.path_info)
|
12
|
-
file_name = fp if File.file?(fp)
|
13
|
-
end
|
14
|
-
|
15
|
-
return respond_not_found! unless file_name
|
16
|
-
|
17
|
-
# Make sure pricks aren't ../../config/database.yml ing us
|
18
|
-
respond_not_found! unless file_name.gsub(%r[^#{path}], "") == request.path_info
|
19
|
-
|
20
|
-
Rack::Response.new(
|
21
|
-
File.open(file_name),
|
22
|
-
200,'Content-Type' => content_type_for_file(file_name)
|
23
|
-
).finish
|
24
|
-
else
|
25
|
-
respond_not_found!
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.respond_not_found!
|
30
|
-
Rack::Response.new("Not Found", 404).finish
|
31
|
-
end
|
32
|
-
|
33
|
-
def self.allowed_dirs
|
34
|
-
%w(stylesheets javascripts images)
|
35
|
-
end
|
36
|
-
|
37
|
-
def self.content_type_for_file(name)
|
38
|
-
file_name = File.basename(name).split(".").last.to_s
|
39
|
-
Mime::Type.lookup_by_extension(file_name).to_s
|
40
|
-
end
|
41
|
-
|
42
|
-
def self.public_paths
|
43
|
-
ActionController::Base.view_paths.map do |vp|
|
44
|
-
full_path = File.expand_path(vp.to_s, RAILS_ROOT)
|
45
|
-
full_path.sub("app/views", "public") if full_path =~ /vendor/
|
46
|
-
end.compact
|
47
|
-
end
|
48
|
-
|
49
|
-
end
|
data/rails/init.rb
DELETED