named-routes 0.2.5 → 0.2.6
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/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.
|