dynamic_router 0.0.1 → 0.0.3
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.
- checksums.yaml +4 -4
- data/.gitignore +4 -1
- data/README.md +41 -4
- data/dynamic_router.gemspec +1 -1
- data/lib/dynamic_router/class_methods.rb +12 -3
- data/lib/dynamic_router/version.rb +1 -1
- data/spec/dynamic_router_spec.rb +18 -0
- metadata +2 -4
- data/spec/dummy/log/test.log +0 -1463
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 59b9c8ce0c8e7f5607f7f6f66dce1a35f31292f2
|
4
|
+
data.tar.gz: 7b9a38b8bea748f00c1029e6e33f8264855b6fd4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 076391a6883e1a5457bb6572cb24bbda2c5332e36ecd12e8a86672fab621ca72a006cefc98351502fe7ef3df17c424d66bdb4f82e3074d4f2ecc0cf5324dddec
|
7
|
+
data.tar.gz: 3458f3b113f4d67dfe49d1ebc7baffc9da0deb32a0064fe871431d7fb66446453f7fbaacbdf0da1f10d58cff56e2acfc8adbfb1228b77f86fcdfb6c9862ea0cd
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# DynamicRouter
|
2
2
|
|
3
|
-
[](https://travis-ci.org/coyosoftware/dynamic_router) [](http://badge.fury.io/rb/dynamic_router) [](https://coveralls.io/r/coyosoftware/dynamic_router)
|
4
4
|
|
5
|
-
Add dynamic routes
|
5
|
+
Add dynamic routes based on model attributes
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
@@ -20,11 +20,48 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
|
23
|
+
Suppose you want to create a friendly URL for a resource based on fields of an example model:
|
24
|
+
|
25
|
+
class Example < ActiveRecord::Base
|
26
|
+
# This model has a field called 'url'
|
27
|
+
end
|
28
|
+
|
29
|
+
You can create a route to a resource using this field as URL, just use the notation:
|
30
|
+
|
31
|
+
class Example < ActiveRecord::Base
|
32
|
+
# This model has a field called 'url'
|
33
|
+
|
34
|
+
has_dynamic_route Proc.new {|example| "/#{example.url}"}, "dummy#dummy_method"
|
35
|
+
end
|
36
|
+
|
37
|
+
With this notation, when you create models like:
|
38
|
+
|
39
|
+
Example.create!(:url => "abc")
|
40
|
+
Example.create!(:url => "123")
|
41
|
+
|
42
|
+
The dynamic router will create the routes "/abc" and "/123" mapping to DummyController#dummy_method
|
43
|
+
|
44
|
+
You can pass the desired HTTP method also:
|
45
|
+
|
46
|
+
class Example < ActiveRecord::Base
|
47
|
+
# This model has a field called 'url'
|
48
|
+
|
49
|
+
has_dynamic_route Proc.new {|example| "/#{example.url}"}, "dummy#dummy_method", :method => :post
|
50
|
+
end
|
51
|
+
|
52
|
+
And can specify default values to be passed, like:
|
53
|
+
|
54
|
+
class Example < ActiveRecord::Base
|
55
|
+
# This model has two fields called 'url' and 'default_field'
|
56
|
+
|
57
|
+
has_dynamic_route Proc.new {|example| "/#{example.url}"}, "dummy#dummy_method", :defaults => {:some_value => Proc.new {|example| example.default_field}}
|
58
|
+
end
|
59
|
+
|
60
|
+
The dynamic router will map ALL records of the model on the startup and will create an after_save hook to create new routes as the models are created.
|
24
61
|
|
25
62
|
## Contributing
|
26
63
|
|
27
|
-
1. Fork it ( https://github.com/
|
64
|
+
1. Fork it ( https://github.com/coyosoftware/dynamic_router/fork )
|
28
65
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
29
66
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
30
67
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/dynamic_router.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["gberdugo@gmail.com"]
|
11
11
|
spec.summary = %q{Add dynamic routes to your project}
|
12
12
|
spec.description = %q{Use this gem to add dynamic routes to your project.}
|
13
|
-
spec.homepage = "
|
13
|
+
spec.homepage = "https://github.com/coyosoftware/dynamic_router"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
@@ -9,7 +9,7 @@ module DynamicRouter
|
|
9
9
|
klass.find_each do |model|
|
10
10
|
defaults = DynamicRouter::ClassMethods.parse_defaults(options[:defaults], model)
|
11
11
|
|
12
|
-
|
12
|
+
DynamicRouter::ClassMethods.draw_route(self, method, url.call(model).to_s, target.to_s, defaults)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
@@ -34,11 +34,16 @@ module DynamicRouter
|
|
34
34
|
def create_route
|
35
35
|
klass = self
|
36
36
|
|
37
|
-
Rails.application.routes
|
37
|
+
_routes = Rails.application.routes
|
38
|
+
_routes.disable_clear_and_finalize = true
|
39
|
+
|
40
|
+
_routes.draw do
|
38
41
|
defaults = DynamicRouter::ClassMethods.parse_defaults(klass._defaults, klass)
|
39
42
|
|
40
|
-
|
43
|
+
DynamicRouter::ClassMethods.draw_route(self, klass._method, klass._url.call(klass).to_s, klass._target.to_s, defaults)
|
41
44
|
end
|
45
|
+
|
46
|
+
_routes.disable_clear_and_finalize = false
|
42
47
|
end
|
43
48
|
end
|
44
49
|
end
|
@@ -55,5 +60,9 @@ module DynamicRouter
|
|
55
60
|
|
56
61
|
defaults
|
57
62
|
end
|
63
|
+
|
64
|
+
def draw_route(route, method, url, target, defaults)
|
65
|
+
route.send(method, url, :to => target, :defaults => defaults) unless url.blank? || url.gsub(/\//, "").blank?
|
66
|
+
end
|
58
67
|
end
|
59
68
|
end
|
data/spec/dynamic_router_spec.rb
CHANGED
@@ -6,7 +6,9 @@ RSpec.describe DynamicRouter do
|
|
6
6
|
extend DynamicRouter
|
7
7
|
end
|
8
8
|
|
9
|
+
Example.destroy_all
|
9
10
|
Example.create!(:first_path => "path_a", :second_path => "path_a_a", :default_field => "default_value")
|
11
|
+
Example.create!(:first_path => "path_a", :second_path => "path_a_c", :default_field => "default_value")
|
10
12
|
end
|
11
13
|
|
12
14
|
it "should check the the existence of the table" do
|
@@ -22,6 +24,7 @@ RSpec.describe DynamicRouter do
|
|
22
24
|
Example.send(:has_dynamic_route, Proc.new {|example| "/#{example.first_path}/#{example.second_path}"}, "dummy#dummy_method")
|
23
25
|
|
24
26
|
expect(Rails.application.routes.recognize_path('/path_a/path_a_a', :method => :get))
|
27
|
+
expect(Rails.application.routes.recognize_path('/path_a/path_a_c', :method => :get))
|
25
28
|
end
|
26
29
|
|
27
30
|
it "should accept the method option" do
|
@@ -43,4 +46,19 @@ RSpec.describe DynamicRouter do
|
|
43
46
|
|
44
47
|
expect(Rails.application.routes.recognize_path('/path_a/path_a_b', :method => :get))
|
45
48
|
end
|
49
|
+
|
50
|
+
it "should not create the route if the url is blank" do
|
51
|
+
Example.send(:has_dynamic_route, Proc.new {|example| ""}, "dummy#dummy_method")
|
52
|
+
|
53
|
+
expect(Rails.application.routes.routes.named_routes).to be_empty
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should not create the route if the url eval to blank" do
|
57
|
+
Example.send(:has_dynamic_route, Proc.new {|example| "/#{example.first_path}/#{example.second_path}"}, "dummy#dummy_method")
|
58
|
+
|
59
|
+
Example.create!(:first_path => "")
|
60
|
+
|
61
|
+
expect(Rails.application.routes.routes.named_routes.size).to eq(2)
|
62
|
+
expect(Rails.application.routes.routes.size).to eq(2)
|
63
|
+
end
|
46
64
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dynamic_router
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gustavo Berdugo
|
@@ -150,7 +150,6 @@ files:
|
|
150
150
|
- spec/dummy/config/locales/pt_BR.yml
|
151
151
|
- spec/dummy/config/routes.rb
|
152
152
|
- spec/dummy/db/test.sqlite3
|
153
|
-
- spec/dummy/log/test.log
|
154
153
|
- spec/dummy/public/404.html
|
155
154
|
- spec/dummy/public/422.html
|
156
155
|
- spec/dummy/public/500.html
|
@@ -159,7 +158,7 @@ files:
|
|
159
158
|
- spec/dummy/script/rails
|
160
159
|
- spec/dynamic_router_spec.rb
|
161
160
|
- spec/spec_helper.rb
|
162
|
-
homepage:
|
161
|
+
homepage: https://github.com/coyosoftware/dynamic_router
|
163
162
|
licenses:
|
164
163
|
- MIT
|
165
164
|
metadata: {}
|
@@ -207,7 +206,6 @@ test_files:
|
|
207
206
|
- spec/dummy/config/locales/pt_BR.yml
|
208
207
|
- spec/dummy/config/routes.rb
|
209
208
|
- spec/dummy/db/test.sqlite3
|
210
|
-
- spec/dummy/log/test.log
|
211
209
|
- spec/dummy/public/404.html
|
212
210
|
- spec/dummy/public/422.html
|
213
211
|
- spec/dummy/public/500.html
|