zooplankton 0.1.0 → 1.0.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 471752a449c9e81524d8c0ce22d8ed5f0e68cd66
4
- data.tar.gz: 264eb30f3309d7855330c627a20fcb1ed1877abe
3
+ metadata.gz: ae65d74db6edba8ebc5b96293d864003f6aefad3
4
+ data.tar.gz: e0ba84294a367c0a767754a100562708131ccb1c
5
5
  SHA512:
6
- metadata.gz: 7dbde1412250a6fa7d120e6243d1101277584de10f796b93f079cd5b6eaa2114136c522fd53c43dd3f8d782677c4120c047d6533210653a8a80f41c0d0398bcf
7
- data.tar.gz: 2f9f7dc28c002a40351d2b7911b1578c70c0f06586c8b31854f5fcce87088c7c6b5a3f524f5cc70fc7d5ada6d74f66f297e5ce6d8aa5caa79c9331c6c8006542
6
+ metadata.gz: 00604a8f9af348e7d6ed678b29a9ad73bff37a520c50b1e6ae812425ba78beb10bc63a1eaa4231828bbcfac9f4f7885e9df8f7d5bf867e7ebd026762f76e797d
7
+ data.tar.gz: abebc6d574ec3c4bdc692f995de68e9c72a33097f05dab13881f9ace19a05ff66d4eb908c75e38155abb3348bbe3409c31f5145fee998f3d7dc6b7f3c840eaff
data/.rspec CHANGED
@@ -1,2 +1,2 @@
1
1
  --color
2
- --format progress
2
+ --format documentation
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
data/CHANGES.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changes
2
2
 
3
+ ## 1.0.0
4
+
5
+ * Added ability to append query parameters to your templates. - Ben Hamill
6
+
3
7
  ## 0.1.0
4
8
 
5
9
  * Basic functionality. - Ben Hamill
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Zooplankton
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)
2
2
 
3
3
  Zooplankton is a library for helping you turn Rails routes into
4
4
  [URI Template strings](http://tools.ietf.org/html/rfc6570). It's useful for
@@ -40,8 +40,31 @@ You can use it like this:
40
40
  # => '/post/{slug}'
41
41
  > Zooplankton.path_template_for(:comment)
42
42
  # => '/post/{slug}/comment/{comment_id}'
43
+ ```
44
+
45
+ It also handles replacing some (or all) of the templated variables if you want
46
+ to prepopulate some of them ahead of time:
47
+
48
+ ``` ruby
43
49
  > Zooplankton.path_template_for(:comment, slug: 'the-best-post-ever')
44
50
  # => '/post/the-best-post-ever/comment/{comment_id}'
51
+ ```
52
+
53
+ And you can add some query parameters when you're generating the template, if
54
+ you need:
55
+
56
+ ``` 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}'
63
+ ```
64
+
65
+ It'll generate URLs, too, not just paths.
66
+
67
+ ``` ruby
45
68
  > Zooplankton.url_template_for(:root)
46
69
  # => 'http://example.com/'
47
70
  > Zooplankton.url_template_for(:post)
data/Rakefile CHANGED
@@ -1 +1,6 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -1,3 +1,3 @@
1
1
  module Zooplankton
2
- VERSION = "0.1.0"
2
+ VERSION = "1.0.0"
3
3
  end
data/lib/zooplankton.rb CHANGED
@@ -4,19 +4,42 @@ require "zooplankton/version"
4
4
 
5
5
  module Zooplankton
6
6
  class << self
7
- def path_template_for(helper_name, params={})
8
- return unless named_routes.names.include?(helper_name)
7
+ def path_template_for(helper_name, query_params={}, required_params=nil)
8
+ build_template(:path, helper_name, *parse_params(query_params, required_params))
9
+ end
10
+
11
+ def url_template_for(helper_name, query_params={}, required_params=nil)
12
+ build_template(:url, helper_name, *parse_params(query_params, required_params))
13
+ end
14
+
15
+ private
9
16
 
10
- unescape_template(expand_helper(helper_name, :path, params))
17
+ def parse_params(*args)
18
+ if args.first.respond_to?(:to_h)
19
+ query_params = []
20
+ required_params = args.first.to_h
21
+ else
22
+ query_params = Array(args.shift)
23
+ required_params = args.first || {}
24
+ end
25
+
26
+ [query_params, required_params]
11
27
  end
12
28
 
13
- def url_template_for(helper_name, params={})
29
+ def build_template(type, helper_name, query_params, required_params)
14
30
  return unless named_routes.names.include?(helper_name)
15
31
 
16
- unescape_template(expand_helper(helper_name, :url, params))
32
+ escaped_template_without_query_params = expand_helper(helper_name, type, required_params)
33
+ escaped_template = append_query_params(escaped_template_without_query_params, query_params)
34
+
35
+ unescape_template(escaped_template)
17
36
  end
18
37
 
19
- private
38
+ def append_query_params(template, query_params)
39
+ return template unless query_params.any?
40
+
41
+ "#{template}{?#{query_params.join(',')}}"
42
+ end
20
43
 
21
44
  def expand_helper(helper_name, path_or_url, params)
22
45
  helper_method = "#{helper_name}_#{path_or_url}"
@@ -23,6 +23,22 @@ describe Zooplankton do
23
23
  it "returns just the path" do
24
24
  expect(subject).to eq('/')
25
25
  end
26
+
27
+ context "with one query parameter" do
28
+ subject { Zooplankton.path_template_for(:root, :q) }
29
+
30
+ it "templateizes the query param" do
31
+ expect(subject).to eq('/{?q}')
32
+ end
33
+ end
34
+
35
+ context "with some query parameters" do
36
+ subject { Zooplankton.path_template_for(:root, %i(q f)) }
37
+
38
+ it "templateizes the query params" do
39
+ expect(subject).to eq('/{?q,f}')
40
+ end
41
+ end
26
42
  end
27
43
 
28
44
  context "for a route with one required param" do
@@ -31,6 +47,22 @@ describe Zooplankton do
31
47
  it "uses simple string expansion to describe the parameter" do
32
48
  expect(subject).to eq('/post/{slug}')
33
49
  end
50
+
51
+ context "with one query parameter" do
52
+ subject { Zooplankton.path_template_for(:post, :q) }
53
+
54
+ it "templateizes the query param" do
55
+ expect(subject).to eq('/post/{slug}{?q}')
56
+ end
57
+ end
58
+
59
+ context "with some query parameters" do
60
+ subject { Zooplankton.path_template_for(:post, %i(q f)) }
61
+
62
+ it "templateizes the query params" do
63
+ expect(subject).to eq('/post/{slug}{?q,f}')
64
+ end
65
+ end
34
66
  end
35
67
 
36
68
  context "for a route with more than one required param" do
@@ -40,6 +72,22 @@ describe Zooplankton do
40
72
  it "uses simple string expansion to describe the parameters" do
41
73
  expect(subject).to eq('/post/{slug}/comment/{comment_id}')
42
74
  end
75
+
76
+ context "with one query parameter" do
77
+ subject { Zooplankton.path_template_for(:comment, :q) }
78
+
79
+ it "templateizes the query param" do
80
+ expect(subject).to eq('/post/{slug}/comment/{comment_id}{?q}')
81
+ end
82
+ end
83
+
84
+ context "with some query parameters" do
85
+ subject { Zooplankton.path_template_for(:comment, %i(q f)) }
86
+
87
+ it "templateizes the query params" do
88
+ expect(subject).to eq('/post/{slug}/comment/{comment_id}{?q,f}')
89
+ end
90
+ end
43
91
  end
44
92
 
45
93
  context "with one supplied parameter value" do
@@ -48,6 +96,22 @@ describe Zooplankton do
48
96
  it "uses simple string expansion to describe the parameters" do
49
97
  expect(subject).to eq('/post/post-slug/comment/{comment_id}')
50
98
  end
99
+
100
+ context "with one query parameter" do
101
+ subject { Zooplankton.path_template_for(:comment, :q, slug: 'post-slug') }
102
+
103
+ it "templateizes the query param" do
104
+ expect(subject).to eq('/post/post-slug/comment/{comment_id}{?q}')
105
+ end
106
+ end
107
+
108
+ context "with some query parameters" do
109
+ subject { Zooplankton.path_template_for(:comment, %i(q f), slug: 'post-slug') }
110
+
111
+ it "templateizes the query params" do
112
+ expect(subject).to eq('/post/post-slug/comment/{comment_id}{?q,f}')
113
+ end
114
+ end
51
115
  end
52
116
  end
53
117
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zooplankton
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.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-10-11 00:00:00.000000000 Z
11
+ date: 2013-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -90,6 +90,7 @@ extra_rdoc_files: []
90
90
  files:
91
91
  - .gitignore
92
92
  - .rspec
93
+ - .travis.yml
93
94
  - CHANGES.md
94
95
  - Gemfile
95
96
  - LICENSE.txt