urls_for_humans 0.0.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 781ea4d78f5f63c5f05cd5cf429a9e22cd4ad95a
4
- data.tar.gz: 5c62c5b45cdb175e6d21bffc34f8d6e93c33bbde
3
+ metadata.gz: adc219f6fec209e61ef474a4371f16d7787be5da
4
+ data.tar.gz: 30e269e5d75bae8b28829db3cc1facfeaf6a6269
5
5
  SHA512:
6
- metadata.gz: e450763c2eec2fcb6a3a3f3b2c46e1835275292af89eb2db66ff9b07233741758cc3c8352b354aaa356cb9c24feb749e0af22bf3caa79d2c363ae3634ce05140
7
- data.tar.gz: 7ed304d075f09ff68290b7d81971176037a48951bba78309a3f790c7726bae0216995d42f3fc7ce3cfa3e3426583b68b44a0e16405cae9af18ba3823cb401afd
6
+ metadata.gz: feb54b5172dd50f1d673b793dd8e7121afcdab7f32ca459a742a93841083da79c427970197702edcc78f77eca04bcf6d56eb31762175a15e363794b47fa69b28
7
+ data.tar.gz: 3cd6bb0278871ddcdcad586f5b101254d88bda0764b0b5eb5b9cd3f1e305eb2e211094a800f052e8fef34ce08e9895d12e763ef9b316add8ac4969d9668ef1e6
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9
4
+ - 2.0
5
+ - 2.1
data/README.md CHANGED
@@ -1,10 +1,31 @@
1
- # Urls For Humans
1
+ # Urls for Humans
2
2
 
3
- Urls For Humans allows you to apply meaningful names to your Rails Application's urls by leveraging what happens under the covers with `Model.find(params[:id])` and `to_param`. So long as the url is prefixed with the model's id, the lookup will happen exactly how we intend it to with a few key benefits:
3
+ [![Build Status](https://travis-ci.org/johnotander/urls_for_humans.svg?branch=master)](https://travis-ci.org/johnotander/urls_for_humans)
4
4
 
5
- * Simplicity
6
- * Lightweight
7
- * Persistent urls because changes the the latter portions of a param won't affect it's lookup.
5
+ Urls for Humans is a gem that allows you to apply meaningful names to your Rails Application's urls
6
+ by leveraging what happens under the covers with `Model.find(params[:id])`, `to_i`, and `to_param`.
7
+ This makes it easy to turn `users/1` to `users/1-john-otander`. So long as the url is prefixed with
8
+ the model's `id` (which Urls for Humans ensures), the lookup will happen exactly how we intend it
9
+ to with a few key benefits:
10
+
11
+ * Simple thanks to ActiveSupport.
12
+ * Lightweight, weighing in at roughly 20 something lines of added gem code to your Rails app (since
13
+ ActiveSupport is already a dependency).
14
+ * Persistent urls because changes in the latter portions of a param won't affect it's lookup.
15
+ * There are no slugs required.
16
+
17
+ ### Why use Urls for Humans in place of Friendly ID?
18
+
19
+ This is a different approach to friendly URLs than the `friendly_id` gem because it doesn't modify
20
+ the db queries themselves. The `urls_for_humans` approach essentially allows all urls fitting the
21
+ form `resource/<id>-<anything else>` to route to `resource/:id` because `to_i` is called on the
22
+ `id` parameter.
23
+
24
+ Personally, I prefer this approach because a link out there in the wild to a user's profile
25
+ `users/previous_username` isn't broken (404'd) when they change their username to `users/new_username`
26
+ because the slug has been changed.
27
+
28
+ Also, I'm biased.
8
29
 
9
30
  ## Installation
10
31
 
@@ -29,11 +50,12 @@ $ gem install urls_for_humans
29
50
  ## Usage
30
51
 
31
52
 
32
- To use Urls For Humans you need to extend the `UrlsForHumans` module, and call the class method `urls_for_humans`:
53
+ To use Urls For Humans you need to extend the `UrlsForHumans` module, and call the class method
54
+ `urls_for_humans`:
33
55
 
34
56
  ```ruby
35
57
  class User < ActiveRecord::Base
36
- extend UrlsForHumans
58
+ include UrlsForHumans
37
59
 
38
60
  # ...
39
61
 
@@ -43,7 +65,8 @@ class User < ActiveRecord::Base
43
65
  end
44
66
  ```
45
67
 
46
- The `urls_for_humans` method can be a collection of any information that you'd like to include in the url. For example, with the above class we'd result in:
68
+ The `urls_for_humans` method can be a collection of any information that you'd like to include in
69
+ the url. For example, with the above class we'd result in:
47
70
 
48
71
  ```ruby
49
72
  u = User.create(first_name: 'John', last_name: 'Otander')
@@ -56,14 +79,36 @@ u.to_param
56
79
  # => '1-otander'
57
80
  ```
58
81
 
59
- With this solution, an ActiveRecord object will always produce the correct url throughout the application:
82
+ With this solution, an ActiveRecord object will always produce the correct url throughout the
83
+ application:
60
84
 
61
85
  ```ruby
62
86
  link_to user.first_name, user
63
- # => <a href="http://localhost:3000/users/1-john-otander"
87
+ # => <a href="http://localhost:3000/users/1-john-otander"
64
88
  ```
65
89
 
66
- Additionally, any link that hits the internet will persist because `1-random-content`, `1-other-random-content`, and `1-john-doe` will all route to the same resource.
90
+ Additionally, any link that hits the internet will persist because `1-random-content`, `1-other-random-content`,
91
+ and `1-john-doe` will all route to the same resource.
92
+
93
+ ### I don't like it when you leverage executable class bodies
94
+
95
+ That's fine. You can add a method to your model, instead.
96
+
97
+ ```ruby
98
+ class User < ActiveRecord::Base
99
+ include UrlsForHumans
100
+
101
+ # ...
102
+
103
+ def humanly_attrs
104
+ [:first_name, :last_name, :favorite_food]
105
+ end
106
+
107
+ # ...
108
+ end
109
+ ```
110
+
111
+ This will result in `"#{ id }-#{ first_name }-#{ last_name }-#{ favorite_food }"`. Yay.
67
112
 
68
113
  ## Resources
69
114
 
@@ -77,3 +122,5 @@ Additionally, any link that hits the internet will persist because `1-random-con
77
122
  3. Commit your changes (`git commit -am 'Add some feature'`)
78
123
  4. Push to the branch (`git push origin my-new-feature`)
79
124
  5. Create new Pull Request
125
+
126
+ Crafted with <3 by [John Otander](http://johnotander.com) ([@4lpine](https://twitter.com/4lpine)).
@@ -6,15 +6,15 @@ require 'active_support/core_ext/object/blank'
6
6
 
7
7
  module UrlsForHumans
8
8
  extend ActiveSupport::Concern
9
-
9
+
10
10
  module ClassMethods
11
11
  attr_accessor :humanly_attrs
12
-
12
+
13
13
  def urls_for_humans(*humanly_attrs)
14
14
  @humanly_attrs = humanly_attrs
15
15
  end
16
16
  end
17
-
17
+
18
18
  def to_param
19
19
  (self.class.humanly_attrs || humanly_attrs).dup.unshift(:id).map do |attrib|
20
20
  send(attrib).to_s.parameterize
@@ -1,3 +1,3 @@
1
1
  module UrlsForHumans
2
- VERSION = '0.0.2'
2
+ VERSION = '1.0.0'
3
3
  end
data/spec/spec_helper.rb CHANGED
@@ -6,10 +6,6 @@ require 'urls_for_humans'
6
6
 
7
7
  I18n.enforce_available_locales = false
8
8
 
9
- RSpec.configure do |config|
10
- config.color_enabled = true
11
- end
12
-
13
9
  class User
14
10
  include UrlsForHumans
15
11
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: urls_for_humans
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Otander
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-15 00:00:00.000000000 Z
11
+ date: 2014-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -75,6 +75,7 @@ extensions: []
75
75
  extra_rdoc_files: []
76
76
  files:
77
77
  - ".gitignore"
78
+ - ".travis.yml"
78
79
  - Gemfile
79
80
  - LICENSE.txt
80
81
  - README.md
@@ -104,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
105
  version: '0'
105
106
  requirements: []
106
107
  rubyforge_project:
107
- rubygems_version: 2.2.2
108
+ rubygems_version: 2.4.3
108
109
  signing_key:
109
110
  specification_version: 4
110
111
  summary: Urls for humans in Rails apps.