path_rewriter 0.0.1
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/.gitignore +1 -0
- data/README +0 -0
- data/Rakefile +32 -0
- data/VERSION +1 -0
- data/depends.rb +27 -0
- data/lib/path_rewriter/rails.rb +42 -0
- data/lib/path_rewriter/url_codec.rb +54 -0
- data/lib/path_rewriter.rb +8 -0
- data/spec/path_rewriter/url_codec_spec.rb +46 -0
- data/spec/path_rewriter_spec.rb +5 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +9 -0
- metadata +130 -0
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
coverage
|
data/README
ADDED
File without changes
|
data/Rakefile
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.expand_path("../depends.rb", __FILE__)
|
2
|
+
GemLoader.require(:rakefile)
|
3
|
+
|
4
|
+
|
5
|
+
Spec::Rake::SpecTask.new(:spec) do |spec|
|
6
|
+
spec.libs << 'lib' << 'spec'
|
7
|
+
spec.spec_opts = ['--options', "spec/spec.opts"]
|
8
|
+
spec.spec_files = FileList['spec/**/*_spec.rb']
|
9
|
+
end
|
10
|
+
|
11
|
+
namespace :spec do
|
12
|
+
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
13
|
+
spec.libs << 'lib' << 'spec'
|
14
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
15
|
+
spec.rcov = true
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
Jeweler::Tasks.new do |spec|
|
21
|
+
spec.name = "path_rewriter"
|
22
|
+
spec.summary = "rewrite rails generate url and route."
|
23
|
+
spec.email = "Sunteya@gmail.com"
|
24
|
+
spec.homepage = "http://github.com/sunteya/path_rewriter"
|
25
|
+
spec.authors = ["Sunteya"]
|
26
|
+
GemLoader.gemspec.integrate(spec)
|
27
|
+
end
|
28
|
+
Jeweler::GemcutterTasks.new
|
29
|
+
|
30
|
+
|
31
|
+
task :spec => :check_dependencies
|
32
|
+
task :default => :spec
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.1
|
data/depends.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
gem "gem_loader", ">= 0.2.0"
|
3
|
+
require "gem_loader"
|
4
|
+
|
5
|
+
|
6
|
+
GemLoader.setup do
|
7
|
+
|
8
|
+
scope :runtime do
|
9
|
+
gem "actionpack", "~> 2.3.5", :require => ["action_pack", "action_view", "action_controller"]
|
10
|
+
gem 'addressable', ">= 2.1.1", :require => "addressable/uri"
|
11
|
+
end
|
12
|
+
|
13
|
+
scope :optional do
|
14
|
+
end
|
15
|
+
|
16
|
+
scope :test do
|
17
|
+
gem "rspec", ">= 1.3.0", :require => nil
|
18
|
+
end
|
19
|
+
|
20
|
+
scope :development => [:optional, :test]
|
21
|
+
|
22
|
+
scope :rakefile do
|
23
|
+
gem "rake", ">= 0.8.7"
|
24
|
+
gem "jeweler", ">= 1.4.0"
|
25
|
+
gem "rspec", :require => "spec/rake/spectask"
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module PathRewriter
|
2
|
+
class Rails
|
3
|
+
class << self
|
4
|
+
attr_accessor :codec
|
5
|
+
|
6
|
+
def enable
|
7
|
+
self.install
|
8
|
+
self.codec = PathRewriter::UrlCodec.new
|
9
|
+
yield self
|
10
|
+
end
|
11
|
+
|
12
|
+
def install
|
13
|
+
ActionController::Base::optimise_named_routes = false
|
14
|
+
|
15
|
+
ActionController::Routing::Routes.class_eval do
|
16
|
+
def call_with_rewrite(orig)
|
17
|
+
env = orig.dup
|
18
|
+
begin
|
19
|
+
puts PathRewriter::Rails.codec
|
20
|
+
env["REQUEST_URI"] = PathRewriter::Rails.codec.decode(env["REQUEST_URI"])
|
21
|
+
call_without_rewrite(env)
|
22
|
+
rescue ActionController::NotImplemented, ActionController::MethodNotAllowed, ActionController::RoutingError
|
23
|
+
call_without_rewrite(orig)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
alias_method_chain :call, :rewrite
|
27
|
+
end
|
28
|
+
|
29
|
+
[ ActionController::Base, ActionView::Base ].each do |klass|
|
30
|
+
klass.class_eval do
|
31
|
+
def url_for_with_rewrite(*args)
|
32
|
+
url = url_for_without_rewrite(*args)
|
33
|
+
PathRewriter::Rails.codec.encode(url)
|
34
|
+
end
|
35
|
+
alias_method_chain :url_for, :rewrite
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module PathRewriter
|
2
|
+
|
3
|
+
class UrlCodec
|
4
|
+
|
5
|
+
attr_writer :base_path
|
6
|
+
attr_writer :root_path
|
7
|
+
|
8
|
+
def base_path
|
9
|
+
@base_path ||= ""
|
10
|
+
end
|
11
|
+
|
12
|
+
def root_path
|
13
|
+
@root_path ||= ""
|
14
|
+
end
|
15
|
+
|
16
|
+
def root_path_without_slash
|
17
|
+
self.root_path.sub(/^\//, "")
|
18
|
+
end
|
19
|
+
|
20
|
+
def base_path_without_slash
|
21
|
+
self.base_path.sub(/^\//, "")
|
22
|
+
end
|
23
|
+
|
24
|
+
def decode(uri)
|
25
|
+
return uri if self.base_path.blank?
|
26
|
+
uri = Addressable::URI.parse(uri)
|
27
|
+
|
28
|
+
segments = uri.path.sub(self.root_path, '').split("/")
|
29
|
+
segments.delete("")
|
30
|
+
segments.unshift(self.base_path_without_slash)
|
31
|
+
segments.unshift(self.root_path_without_slash) unless root_path.blank?
|
32
|
+
uri.path = "/" + segments.join("/")
|
33
|
+
|
34
|
+
uri.to_s
|
35
|
+
end
|
36
|
+
|
37
|
+
def encode(uri)
|
38
|
+
return uri if self.base_path.blank?
|
39
|
+
return uri unless uri.start_with?(self.root_path)
|
40
|
+
uri = Addressable::URI.parse(uri)
|
41
|
+
|
42
|
+
uri.path.sub!(self.root_path, '')
|
43
|
+
uri.path.sub!(self.base_path, '')
|
44
|
+
|
45
|
+
segments = uri.path.split("/")
|
46
|
+
segments.unshift(self.root_path_without_slash)
|
47
|
+
segments.delete("")
|
48
|
+
uri.path = "/" + segments.join("/")
|
49
|
+
|
50
|
+
uri.to_s
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PathRewriter::UrlCodec do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@codec = PathRewriter::UrlCodec.new
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should skip decode uri" do
|
10
|
+
@codec.decode("/request/foo.bar").should == "/request/foo.bar"
|
11
|
+
@codec.decode("/request/controller/foo.bar").should == "/request/controller/foo.bar"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should decode uri success" do
|
15
|
+
@codec.base_path = "/request"
|
16
|
+
|
17
|
+
@codec.decode("/").should == "/request"
|
18
|
+
@codec.decode("/foo").should == "/request/foo"
|
19
|
+
@codec.decode("/?123").should == "/request?123"
|
20
|
+
@codec.decode("/controller/foo.bar").should == "/request/controller/foo.bar"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should decode uri by namespace with root_path" do
|
24
|
+
@codec.root_path = "/root"
|
25
|
+
@codec.base_path = "/request"
|
26
|
+
@codec.decode("/root/bar").should == "/root/request/bar"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should encode uri" do
|
30
|
+
@codec.encode("/foo?123").should == "/foo?123"
|
31
|
+
@codec.encode("/").should == "/"
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should encode uri by namespace" do
|
35
|
+
@codec.base_path = "/request"
|
36
|
+
@codec.encode("/request/foo?123").should == "/foo?123"
|
37
|
+
@codec.encode("/request/").should == "/"
|
38
|
+
@codec.encode("/request").should == "/"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should encode uri by namespace with root" do
|
42
|
+
@codec.root_path = "/root"
|
43
|
+
@codec.base_path = "/request"
|
44
|
+
@codec.encode("/root/request/bar").should == "/root/bar"
|
45
|
+
end
|
46
|
+
end
|
data/spec/spec.opts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--colour
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: path_rewriter
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Sunteya
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-04-06 00:00:00 +08:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: gem_loader
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
- 2
|
30
|
+
- 0
|
31
|
+
version: 0.2.0
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: actionpack
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ~>
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 2
|
43
|
+
- 3
|
44
|
+
- 5
|
45
|
+
version: 2.3.5
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: addressable
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 2
|
57
|
+
- 1
|
58
|
+
- 1
|
59
|
+
version: 2.1.1
|
60
|
+
type: :runtime
|
61
|
+
version_requirements: *id003
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rspec
|
64
|
+
prerelease: false
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
segments:
|
70
|
+
- 1
|
71
|
+
- 3
|
72
|
+
- 0
|
73
|
+
version: 1.3.0
|
74
|
+
type: :development
|
75
|
+
version_requirements: *id004
|
76
|
+
description:
|
77
|
+
email: Sunteya@gmail.com
|
78
|
+
executables: []
|
79
|
+
|
80
|
+
extensions: []
|
81
|
+
|
82
|
+
extra_rdoc_files:
|
83
|
+
- README
|
84
|
+
files:
|
85
|
+
- .gitignore
|
86
|
+
- README
|
87
|
+
- Rakefile
|
88
|
+
- VERSION
|
89
|
+
- depends.rb
|
90
|
+
- lib/path_rewriter.rb
|
91
|
+
- lib/path_rewriter/rails.rb
|
92
|
+
- lib/path_rewriter/url_codec.rb
|
93
|
+
- spec/path_rewriter/url_codec_spec.rb
|
94
|
+
- spec/path_rewriter_spec.rb
|
95
|
+
- spec/spec.opts
|
96
|
+
- spec/spec_helper.rb
|
97
|
+
has_rdoc: true
|
98
|
+
homepage: http://github.com/sunteya/path_rewriter
|
99
|
+
licenses: []
|
100
|
+
|
101
|
+
post_install_message:
|
102
|
+
rdoc_options:
|
103
|
+
- --charset=UTF-8
|
104
|
+
require_paths:
|
105
|
+
- lib
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
segments:
|
111
|
+
- 0
|
112
|
+
version: "0"
|
113
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
segments:
|
118
|
+
- 0
|
119
|
+
version: "0"
|
120
|
+
requirements: []
|
121
|
+
|
122
|
+
rubyforge_project:
|
123
|
+
rubygems_version: 1.3.6
|
124
|
+
signing_key:
|
125
|
+
specification_version: 3
|
126
|
+
summary: rewrite rails generate url and route.
|
127
|
+
test_files:
|
128
|
+
- spec/path_rewriter/url_codec_spec.rb
|
129
|
+
- spec/path_rewriter_spec.rb
|
130
|
+
- spec/spec_helper.rb
|