named-routes 0.2.5 → 0.2.6
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -3
- data/Gemfile.lock +8 -9
- data/Rakefile +16 -23
- data/VERSION +1 -1
- data/lib/named-routes/routes.rb +69 -76
- data/lib/named-routes.rb +5 -1
- metadata +6 -33
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
named-routes (0.2.6)
|
5
|
+
activesupport (>= 3.0.0)
|
6
|
+
|
1
7
|
GEM
|
2
8
|
remote: http://rubygems.org/
|
3
9
|
specs:
|
10
|
+
activesupport (3.0.9)
|
4
11
|
diff-lcs (1.1.2)
|
5
|
-
extlib (0.9.15)
|
6
|
-
git (1.2.5)
|
7
|
-
jeweler (1.5.2)
|
8
|
-
bundler (~> 1.0.0)
|
9
|
-
git (>= 1.2.5)
|
10
|
-
rake
|
11
|
-
rake (0.8.7)
|
12
12
|
rr (1.0.2)
|
13
13
|
rspec (2.3.0)
|
14
14
|
rspec-core (~> 2.3.0)
|
@@ -24,7 +24,6 @@ PLATFORMS
|
|
24
24
|
|
25
25
|
DEPENDENCIES
|
26
26
|
diff-lcs (= 1.1.2)
|
27
|
-
|
28
|
-
jeweler (= 1.5.2)
|
27
|
+
named-routes!
|
29
28
|
rr (= 1.0.2)
|
30
29
|
rspec (= 2.3.0)
|
data/Rakefile
CHANGED
@@ -3,27 +3,20 @@ require 'rake/clean'
|
|
3
3
|
require 'rake/testtask'
|
4
4
|
require 'rake/rdoctask'
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
s.has_rdoc = true
|
23
|
-
s.extra_rdoc_files = [ "README.md", "CHANGES" ]
|
24
|
-
s.rdoc_options = ["--main", "README.md", "--inline-source", "--line-numbers"]
|
25
|
-
s.add_dependency "extlib", ">= 0.9.15"
|
26
|
-
end
|
27
|
-
rescue LoadError
|
28
|
-
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
6
|
+
require 'rspec/core/rake_task'
|
7
|
+
|
8
|
+
desc 'Default: run specs.'
|
9
|
+
task :default => :spec
|
10
|
+
|
11
|
+
desc "Run specs"
|
12
|
+
RSpec::Core::RakeTask.new do |t|
|
13
|
+
t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
|
14
|
+
# Put spec opts in a file named .rspec in root
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Generate code coverage"
|
18
|
+
RSpec::Core::RakeTask.new(:coverage) do |t|
|
19
|
+
t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
|
20
|
+
t.rcov = true
|
21
|
+
t.rcov_opts = ['--exclude', 'spec']
|
29
22
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.6
|
data/lib/named-routes/routes.rb
CHANGED
@@ -2,103 +2,96 @@ module NamedRoutes
|
|
2
2
|
class Routes
|
3
3
|
class_inheritable_accessor :host, :prefix
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
@instance ||= new
|
8
|
-
end
|
5
|
+
module Definition
|
6
|
+
extend ActiveSupport::Concern
|
9
7
|
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
module InstanceMethods
|
9
|
+
def eval(*args)
|
10
|
+
self.class.eval(*args)
|
11
|
+
end
|
13
12
|
|
14
|
-
|
15
|
-
|
13
|
+
def as_json(*args)
|
14
|
+
self.class.defined_routes
|
15
|
+
end
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
define_method name do |*args|
|
22
|
-
self.class.eval(full_definition, [args.first].compact.first || {})
|
18
|
+
module ClassMethods
|
19
|
+
def instance
|
20
|
+
@instance ||= new
|
23
21
|
end
|
24
|
-
yield full_definition if block_given?
|
25
|
-
full_definition
|
26
|
-
end
|
27
|
-
alias_method :path, :route
|
28
|
-
alias_method :uri, :route
|
29
22
|
|
30
|
-
|
31
|
-
|
32
|
-
memo.merge!(klass._defined_routes) if klass.respond_to?(:_defined_routes)
|
33
|
-
memo
|
23
|
+
def http
|
24
|
+
SchemedUri.new(self, "http")
|
34
25
|
end
|
35
|
-
end
|
36
26
|
|
37
|
-
|
38
|
-
|
39
|
-
|
27
|
+
def https
|
28
|
+
SchemedUri.new(self, "https")
|
29
|
+
end
|
40
30
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
31
|
+
def route(name, definition, include_prefix=true)
|
32
|
+
full_definition = eval(definition, {}, :prefix => include_prefix)
|
33
|
+
_defined_routes[name.to_s] = full_definition
|
34
|
+
define_method name do |*args|
|
35
|
+
self.class.eval(full_definition, [args.first].compact.first || {})
|
36
|
+
end
|
37
|
+
yield full_definition if block_given?
|
45
38
|
full_definition
|
46
|
-
else
|
47
|
-
full_definition.split("/").map do |segment|
|
48
|
-
segment_value = segment[/^:(.*)/, 1]
|
49
|
-
segment_value_parts = segment_value.to_s.split(".")
|
50
|
-
segment_name = segment_value_parts[0]
|
51
|
-
if segment_name
|
52
|
-
param_name = params.delete(File.basename(segment_name, '.*').to_s)
|
53
|
-
URI.escape([param_name, *segment_value_parts[1..-1]].join("."))
|
54
|
-
else
|
55
|
-
segment
|
56
|
-
end
|
57
|
-
end.join("/")
|
58
39
|
end
|
59
|
-
|
60
|
-
|
40
|
+
alias_method :path, :route
|
41
|
+
alias_method :uri, :route
|
42
|
+
|
43
|
+
def defined_routes
|
44
|
+
(ancestors.reverse + [self]).inject({}) do |memo, klass|
|
45
|
+
memo.merge!(klass._defined_routes) if klass.respond_to?(:_defined_routes)
|
46
|
+
memo
|
47
|
+
end
|
61
48
|
end
|
62
|
-
uri_string
|
63
|
-
end
|
64
49
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
50
|
+
def _defined_routes
|
51
|
+
@_defined_routes ||= {}
|
52
|
+
end
|
53
|
+
|
54
|
+
def eval(definition, params_arg={}, options={})
|
55
|
+
full_definition = (options[:prefix] && prefix) ? File.join("", prefix, definition) : definition
|
56
|
+
params = HashWithIndifferentAccess.new(params_arg)
|
57
|
+
uri_string = if params.empty?
|
58
|
+
full_definition
|
72
59
|
else
|
73
|
-
|
60
|
+
full_definition.split("/").map do |segment|
|
61
|
+
segment_value = segment[/^:(.*)/, 1]
|
62
|
+
segment_value_parts = segment_value.to_s.split(".")
|
63
|
+
segment_name = segment_value_parts[0]
|
64
|
+
if segment_name
|
65
|
+
param_name = params.delete(File.basename(segment_name, '.*').to_s)
|
66
|
+
URI.escape([param_name, *segment_value_parts[1..-1]].join("."))
|
67
|
+
else
|
68
|
+
segment
|
69
|
+
end
|
70
|
+
end.join("/")
|
71
|
+
end
|
72
|
+
unless params.empty?
|
73
|
+
uri_string << "?#{params.to_param}"
|
74
74
|
end
|
75
|
-
|
75
|
+
uri_string
|
76
76
|
end
|
77
|
-
end
|
78
77
|
|
79
|
-
|
80
|
-
|
81
|
-
|
78
|
+
def normalize(uri)
|
79
|
+
uri.gsub(Regexp.new("^#{File.join("", prefix.to_s)}"), "/").gsub("//", "/")
|
80
|
+
end
|
82
81
|
|
83
|
-
|
84
|
-
|
85
|
-
|
82
|
+
def as_json(*args)
|
83
|
+
instance.as_json(*args)
|
84
|
+
end
|
86
85
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
86
|
+
def method_missing(method_name, *args, &block)
|
87
|
+
if instance.respond_to?(method_name)
|
88
|
+
instance.send(method_name, *args, &block)
|
89
|
+
else
|
90
|
+
super
|
91
|
+
end
|
92
92
|
end
|
93
93
|
end
|
94
|
-
end)
|
95
|
-
|
96
|
-
def eval(*args)
|
97
|
-
self.class.eval(*args)
|
98
|
-
end
|
99
|
-
|
100
|
-
def as_json(*args)
|
101
|
-
self.class.defined_routes
|
102
94
|
end
|
95
|
+
include Definition
|
103
96
|
end
|
104
97
|
end
|
data/lib/named-routes.rb
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
require "
|
1
|
+
require "active_support"
|
2
|
+
require "active_support/concern"
|
3
|
+
require "active_support/hash_with_indifferent_access"
|
4
|
+
require "active_support/core_ext/object/to_query"
|
5
|
+
require "active_support/core_ext/class/inheritable_attributes"
|
2
6
|
require "uri"
|
3
7
|
|
4
8
|
module NamedRoutes
|
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: named-routes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 2
|
8
|
-
- 5
|
9
|
-
version: 0.2.5
|
4
|
+
prerelease:
|
5
|
+
version: 0.2.6
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- Brian Takita
|
@@ -18,35 +14,16 @@ date: 2011-01-19 00:00:00 -08:00
|
|
18
14
|
default_executable:
|
19
15
|
dependencies:
|
20
16
|
- !ruby/object:Gem::Dependency
|
21
|
-
name:
|
17
|
+
name: activesupport
|
22
18
|
prerelease: false
|
23
19
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
-
none: false
|
25
|
-
requirements:
|
26
|
-
- - "="
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
segments:
|
29
|
-
- 0
|
30
|
-
- 9
|
31
|
-
- 15
|
32
|
-
version: 0.9.15
|
33
|
-
type: :runtime
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: extlib
|
37
|
-
prerelease: false
|
38
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
39
20
|
none: false
|
40
21
|
requirements:
|
41
22
|
- - ">="
|
42
23
|
- !ruby/object:Gem::Version
|
43
|
-
|
44
|
-
- 0
|
45
|
-
- 9
|
46
|
-
- 15
|
47
|
-
version: 0.9.15
|
24
|
+
version: 3.0.0
|
48
25
|
type: :runtime
|
49
|
-
version_requirements: *
|
26
|
+
version_requirements: *id001
|
50
27
|
description:
|
51
28
|
email: brian.takita@gmail.com
|
52
29
|
executables: []
|
@@ -86,21 +63,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
86
63
|
requirements:
|
87
64
|
- - ">="
|
88
65
|
- !ruby/object:Gem::Version
|
89
|
-
segments:
|
90
|
-
- 0
|
91
66
|
version: "0"
|
92
67
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
68
|
none: false
|
94
69
|
requirements:
|
95
70
|
- - ">="
|
96
71
|
- !ruby/object:Gem::Version
|
97
|
-
segments:
|
98
|
-
- 0
|
99
72
|
version: "0"
|
100
73
|
requirements: []
|
101
74
|
|
102
75
|
rubyforge_project:
|
103
|
-
rubygems_version: 1.
|
76
|
+
rubygems_version: 1.5.2
|
104
77
|
signing_key:
|
105
78
|
specification_version: 3
|
106
79
|
summary: A simple and generic named routes api. It works really well with Sinatra.
|