zooplankton 1.1.0 → 1.2.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: 07178fdc94e41e3d73816c73617dca152a1c2220
4
- data.tar.gz: 202ce012feb0b347b5863219052b008096d36bf2
3
+ metadata.gz: c878d585575f883e203938c61e037c88a667446b
4
+ data.tar.gz: 0636a9f4041b56d76e419b2e9c25ea0a70b5f4ff
5
5
  SHA512:
6
- metadata.gz: 3f81add78dbebd1b84126ace5d89e9eec047196a48d3ea33086ed8374b3a255e87b22900c92a8e76ff57938d37c209f6158404603f3aa1f88d7cb9086e201cb5
7
- data.tar.gz: d02fa7b216e7b9c71e18bf7c9175437996e35e5422698519941fa899505afed5ea57a144b78907fefe742e5193a5c3e3b5c3ddde88307870d2c44fcf89c559f3
6
+ metadata.gz: 48c544b8b85fd25ccddab92c59a3c188d25939214a18ee531a313f9071b531f9df1d70dc1fb1c36dfd7d9621ca88ed81fffc68c91e3e3be70c3c4968d10a724b
7
+ data.tar.gz: 1334e12ea45556b4e50dea5fe21c583b6d745b4a43f075adf02829b02b53cb3180ed0197b42e2070bd9f8d0353dce1f9ddb2c279427e37fcbc56fc1e35eac8cc
data/.travis.yml CHANGED
@@ -1,3 +1,4 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.0.0
4
+ - 2.1.2
data/CHANGES.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changes
2
2
 
3
+ ## 1.2.0
4
+
5
+ * Added support for Ruby 2.1. - Ben Weiner
6
+ * Better examples in `README`. - Filippos Vasilakis
7
+
3
8
  ## 1.1.0
4
9
 
5
10
  * Added supplied query parameter handling, including the use of continuation
data/README.md CHANGED
@@ -1,23 +1,14 @@
1
- # Zooplankton [![Build Status](https://travis-ci.org/benhamill/zooplankton.png)](https://travis-ci.org/benhamill/zooplankton) [![Code Climate](https://codeclimate.com/github/benhamill/zooplankton.png)](https://codeclimate.com/github/benhamill/zooplankton)
1
+ # Zooplankton
2
2
 
3
- Zooplankton is a library for helping you turn Rails routes into
4
- [URI Template strings](http://tools.ietf.org/html/rfc6570). It's useful for
5
- helping yourself generate the `_links` part of
6
- [HAL](http://stateless.co/hal_specification.html), for example.
3
+ [![Build Status](https://travis-ci.org/benhamill/zooplankton.png)](https://travis-ci.org/benhamill/zooplankton)
4
+ [![Code Climate](https://codeclimate.com/github/benhamill/zooplankton.png)](https://codeclimate.com/github/benhamill/zooplankton)
7
5
 
8
- ## Installation
6
+ [Zooplankton](http://en.wikipedia.org/wiki/Zooplankton) are the kind of
7
+ plankton that are animals (as opposed to phytoplankton, which are plants).
9
8
 
10
- Add this line to your application's Gemfile:
11
-
12
- gem 'zooplankton'
13
-
14
- And then execute:
15
-
16
- $ bundle
17
-
18
- Or install it yourself as:
19
-
20
- $ gem install zooplankton
9
+ Zooplankton is a library for helping you turn Rails routes into [URI Template
10
+ strings](#uri-templates-lolwut). It's useful for helping yourself generate the
11
+ `_links` part of [HAL](http://stateless.co/hal_specification.html), for example.
21
12
 
22
13
  ## Usage
23
14
 
@@ -26,47 +17,67 @@ Given a route file like this:
26
17
  ```ruby
27
18
  SomeApp::Application.routes.draw do
28
19
  root 'root#index'
29
- get '/post/:slug', to: 'posts#show', as: :post
30
- get '/post/:slug/comment/:comment_id', to: 'commendts#show', as: :comment
20
+ get '/posts/:slug', to: 'posts#show', as: :post
21
+ get '/posts/:slug/comments', to: 'comments#index', as: :comments
22
+ get '/posts/:slug/comments/:comment_id', to: 'commendts#show', as: :comment
31
23
  end
32
24
  ```
33
25
 
34
- You can use it like this:
26
+ Without Zooplankton, you might end up generating a URI template for a route by
27
+ abusing Rails's url helpers like this:
28
+
29
+ ```ruby
30
+ CGI.unescape post_path(slug: "{slug}")
31
+ # => '/posts/{slug}'
32
+ CGI.unescape comment_path(slug: "{slug}", comment_id: "{comment_id}")
33
+ # => '/posts/{slug}/comments/{comment_id}'
34
+ ```
35
+
36
+ If you needed to include query parameters in your template, you'd have an even
37
+ harder time. Something like:
38
+
39
+ ```ruby
40
+ CGI.unescape "#{comments_path(slug: "{slug}")}{?page,page_size}"
41
+ # => '/posts/{slug}/comments{?page,page_size}'
42
+ ```
43
+
44
+ With Zooplankton, you can use it like this:
35
45
 
36
46
  ```ruby
37
47
  > Zooplankton.path_template_for(:root)
38
48
  # => '/'
39
49
  > Zooplankton.path_template_for(:post)
40
- # => '/post/{slug}'
50
+ # => '/posts/{slug}'
41
51
  > Zooplankton.path_template_for(:comment)
42
- # => '/post/{slug}/comment/{comment_id}'
52
+ # => '/posts/{slug}/comments/{comment_id}'
43
53
  ```
44
54
 
45
- It also handles replacing some (or all) of the templated variables if you want
46
- to prepopulate some of them ahead of time:
55
+ It also handles replacing some (or all, though you might decide to use a Rails
56
+ url helper at that point) of the templated variables if you want to prepopulate
57
+ some of them ahead of time:
47
58
 
48
59
  ``` ruby
49
60
  > Zooplankton.path_template_for(:comment, slug: 'the-best-post-ever')
50
- # => '/post/the-best-post-ever/comment/{comment_id}'
61
+ # => '/posts/the-best-post-ever/comments/{comment_id}'
51
62
  ```
52
63
 
53
64
  And you can add some query parameters when you're generating the template, if
54
65
  you need:
55
66
 
56
67
  ``` ruby
57
- > Zooplankton.path_template_for(:comment, :q, slug: 'the-best-post-ever')
58
- # => '/post/the-best-post-ever/comment/{comment_id}{?q}'
59
- > Zooplankton.path_template_for(:comment, %i(foo bar), slug: 'the-best-post-ever')
60
- # => '/post/the-best-post-ever/comment/{comment_id}{?foo,bar}'
61
- > Zooplankton.path_template_for(:comment, %i(foo bar))
62
- # => '/post/{slug}/comment/{comment_id}{?foo,bar}'
68
+ > Zooplankton.path_template_for(:comments, :page, slug: 'the-best-post-ever')
69
+ # => '/posts/the-best-post-ever/comments{?page}'
70
+ > Zooplankton.path_template_for(:comments, %i(page page_size), slug: 'the-best-post-ever')
71
+ # => '/posts/the-best-post-ever/comments{?page,page_size}'
72
+ > Zooplankton.path_template_for(:comments, %i(page page_size))
73
+ # => '/posts/{slug}/comments{?page,page_size}'
63
74
  ```
64
75
 
65
76
  If you supply a query parameter for replacement, it'll denote a continuation:
66
77
 
67
78
  ``` ruby
68
- > Zooplankton.path_template_for(:comment, %i(foo bar), slug: 'the-best-post-ever', bar: 'baz')
69
- # => '/post/the-best-post-ever/comment/{comment_id}?bar=baz{&foo}'
79
+ > Zooplankton.path_template_for(:comments, %i(page page_size), slug: 'the-best-post-ever', page: 1)
80
+ # => '/posts/the-best-post-ever/comments?page=1{&page_size}'
70
81
  ```
71
82
 
72
83
  It'll generate URLs, too, not just paths.
@@ -75,9 +86,47 @@ It'll generate URLs, too, not just paths.
75
86
  > Zooplankton.url_template_for(:root)
76
87
  # => 'http://example.com/'
77
88
  > Zooplankton.url_template_for(:post)
78
- # => 'http://example.com/post/{slug}'
89
+ # => 'http://example.com/posts/{slug}'
79
90
  ```
80
91
 
92
+ ## URI Templates LOLWUT
93
+
94
+ [URI Templates](http://tools.ietf.org/html/rfc6570) are a notation for teaching
95
+ machines how to build URIs. They're basically rules for string interpolation.
96
+ Zooplankton supports a small subset of all the notations, outlined here.
97
+
98
+ ### Simple String Expansion
99
+
100
+ [RFC direct link](http://tools.ietf.org/html/rfc6570#section-3.2.2)
101
+
102
+ This is the simplest part of URI Templates and is what Zooplankton uses for
103
+ parameters that are part of the path of a URI. Basically, given a template like
104
+ `"foo{var}baz"` and assuming you have a value of `'bar'` for `var`, you'd end up
105
+ with `"foobarbaz"`.
106
+
107
+ ### Form-Style Query Expansion
108
+
109
+ [RFC direct link](http://tools.ietf.org/html/rfc6570#section-3.2.8)
110
+
111
+ This expansion is for telling a computer to build a query string. Something like
112
+ `"name{?first,last}" with values like in the hash `{first: 'ben', last:
113
+ 'hamill'}` would expand to `"name?first=ben&last=hamill"`. Zooplankton will use
114
+ this when it's appropriate for building query strings.
115
+
116
+ ### Form-Style Query Continuation
117
+
118
+ [RFC direct link](http://tools.ietf.org/html/rfc6570#section-3.2.9)
119
+
120
+ This expansion is for telling a computer to finish off a query string that
121
+ you've already started. Basically, it's like a query expansion, but instructs
122
+ the computer to use a starting `&`, rather than a `?`. So `"name{&first,last}"`
123
+ with values like `{first: 'ben', last: 'hamill'}` would end up as
124
+ `"name&first=ben&last=hamill"`, but the greatest usefulness is for something
125
+ like `"name?middle=dale{?first,last}"` which would end up as
126
+ `"name?middle=dale&first=ben&last=hamill"`. Zooplankton will use this when it's
127
+ appropriate for building query strings.
128
+
129
+
81
130
  ## Contributing
82
131
 
83
132
  Help is gladly welcomed. If you have a feature you'd like to add, it's much more
@@ -1,3 +1,3 @@
1
1
  module Zooplankton
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
3
3
  end
data/lib/zooplankton.rb CHANGED
@@ -15,7 +15,7 @@ module Zooplankton
15
15
  private
16
16
 
17
17
  def parse_params(*args)
18
- if args.first.respond_to?(:to_h)
18
+ if args.first.respond_to?(:to_h) && !args.first.is_a?(Array)
19
19
  query_params = []
20
20
  supplied_params = args.first.to_h
21
21
  else
data/zooplankton.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["git-commits@benhamill.com"]
11
11
  spec.description = %q{A library for turning Rails routes into URI Templates, like maybe for HAL.}
12
12
  spec.summary = %q{A library for turning Rails routes into URI Templates.}
13
- spec.homepage = "https://github.com/benhamill/zooplankton#zooplankton"
13
+ spec.homepage = "https://github.com/benhamill/zooplankton#readme"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
metadata CHANGED
@@ -1,83 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zooplankton
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Hamill
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-21 00:00:00.000000000 Z
11
+ date: 2014-07-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.3'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pry
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '2.14'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '2.14'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rails
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '4.0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '4.0'
83
83
  description: A library for turning Rails routes into URI Templates, like maybe for
@@ -88,9 +88,9 @@ executables: []
88
88
  extensions: []
89
89
  extra_rdoc_files: []
90
90
  files:
91
- - .gitignore
92
- - .rspec
93
- - .travis.yml
91
+ - ".gitignore"
92
+ - ".rspec"
93
+ - ".travis.yml"
94
94
  - CHANGES.md
95
95
  - Gemfile
96
96
  - LICENSE.txt
@@ -101,7 +101,7 @@ files:
101
101
  - spec/spec_helper.rb
102
102
  - spec/zooplankton_spec.rb
103
103
  - zooplankton.gemspec
104
- homepage: https://github.com/benhamill/zooplankton#zooplankton
104
+ homepage: https://github.com/benhamill/zooplankton#readme
105
105
  licenses:
106
106
  - MIT
107
107
  metadata: {}
@@ -111,20 +111,21 @@ require_paths:
111
111
  - lib
112
112
  required_ruby_version: !ruby/object:Gem::Requirement
113
113
  requirements:
114
- - - '>='
114
+ - - ">="
115
115
  - !ruby/object:Gem::Version
116
116
  version: '0'
117
117
  required_rubygems_version: !ruby/object:Gem::Requirement
118
118
  requirements:
119
- - - '>='
119
+ - - ">="
120
120
  - !ruby/object:Gem::Version
121
121
  version: '0'
122
122
  requirements: []
123
123
  rubyforge_project:
124
- rubygems_version: 2.0.3
124
+ rubygems_version: 2.2.2
125
125
  signing_key:
126
126
  specification_version: 4
127
127
  summary: A library for turning Rails routes into URI Templates.
128
128
  test_files:
129
129
  - spec/spec_helper.rb
130
130
  - spec/zooplankton_spec.rb
131
+ has_rdoc: