rtopia 0.2.1 → 0.2.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.
data/.gitignore CHANGED
@@ -20,3 +20,4 @@ pkg
20
20
 
21
21
  ## PROJECT::SPECIFIC
22
22
  /doc
23
+ /.yardoc
@@ -1,12 +1,16 @@
1
- = Rtopia
1
+ Rtopia
2
+ ======
2
3
 
3
- A very simple, but useful route generation helper for use anytime, anywhere.
4
+ A very simple, but useful route generation helper for use anytime, anywhere.
5
+ See documentation at [http://labs.sinefunc.com/rtopia/doc](http://labs.sinefunc.com/rtopia/doc).
4
6
 
5
- == Assumptions
7
+ Assumptions
8
+ -----------
6
9
 
7
10
  It checks for a `to_param`, and if Ruby1.9 or greater is used, checks for an `id`. Last fallback uses `to_s`.
8
11
 
9
- == Examples
12
+ Examples
13
+ --------
10
14
 
11
15
  include Rtopia
12
16
 
@@ -24,18 +28,3 @@ It checks for a `to_param`, and if Ruby1.9 or greater is used, checks for an `id
24
28
  @entry = Entry.create # has an id of 1001 for example
25
29
  R(@entry) # => '/1001'
26
30
  R(:entry, @entry) # => '/entry/1001'
27
-
28
-
29
- == Note on Patches/Pull Requests
30
-
31
- * Fork the project.
32
- * Make your feature addition or bug fix.
33
- * Add tests for it. This is important so I don't break it in a
34
- future version unintentionally.
35
- * Commit, do not mess with rakefile, version, or history.
36
- (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
37
- * Send me a pull request. Bonus points for topic branches.
38
-
39
- == Copyright
40
-
41
- Copyright (c) 2010 Sinefunc. See LICENSE for details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.2.3
@@ -2,10 +2,12 @@ require 'uri'
2
2
  require 'cgi'
3
3
 
4
4
  module Rtopia
5
+ VERSION = "0.2.3"
6
+
5
7
  # In order to be able to do `Rtopia::R`, Rtopia needs to extend itself
6
8
  extend self
7
9
 
8
- # Usage:
10
+ # @example
9
11
  #
10
12
  # R(:items) # => /items
11
13
  #
@@ -24,19 +26,39 @@ module Rtopia
24
26
  # R(:user => { :lname => 'Doe', :fname => 'John' })
25
27
  # => '?user[lname]=Doe&user[fname]=John'
26
28
  #
29
+ # R("http://google.com/search", :q => "Robots")
30
+ # => 'http://google.com/search?q=Robots'
31
+ #
32
+ # @overload R()
33
+ # @return [String] returns the root '/'
34
+ # @overload R(:arg1, :arg2, ..., :argN)
35
+ # @return [String] all args joined on '/' prefixed with '/'
36
+ # @overload R(:arg1, :arg2, ..., :argN, hash)
37
+ # @param [#to_param] arg1 any object checked for #to_param, #id, and #to_s
38
+ # @param [#to_param] arg2 any object checked for #to_param, #id, and #to_s
39
+ # @param [#to_param] argN any object checked for #to_param, #id, and #to_s
40
+ # @param [Hash] hash to be represented as a query string.
41
+ # @return [String] all args joined on '/' with the hash represented
42
+ # as a query string.
43
+ # @overload R(hash)
44
+ # @param [Hash] hash to be represented as a query string.
45
+ # @return [String] the hash represented as a query string, prefix with a `?`
27
46
  def R(*args)
28
47
  hash = args.last.is_a?(Hash) ? args.pop : {}
29
48
 
30
- # No args, so we opt to make ?q=Ruby&page=1 style URIs
31
- if hash.any? and args.empty?
32
- '?' + query_string(hash)
33
- else
34
- r = args.unshift('/').map { |arg| to_param(arg) }.join('/').squeeze('/')
49
+ return '?' + query_string(hash) if hash.any? and args.empty?
50
+
51
+ host_with_port = args.shift if args.first =~ /^(https?|ftp)/
52
+
53
+ path = args.unshift('/').map { |arg| to_param(arg) }.join('/').squeeze('/')
54
+
55
+ path.tap do |ret|
35
56
  if hash.any?
36
- r << '?'
37
- r << query_string(hash)
57
+ ret.gsub!(/^\//, '') if ret == '/'
58
+ ret << '?'
59
+ ret << query_string(hash)
38
60
  end
39
- r
61
+ ret.insert(0, host_with_port.gsub(/\/$/, '')) if host_with_port
40
62
  end
41
63
  end
42
64
 
@@ -5,22 +5,22 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rtopia}
8
- s.version = "0.2.1"
8
+ s.version = "0.2.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Sinefunc"]
12
- s.date = %q{2010-04-25}
12
+ s.date = %q{2010-05-25}
13
13
  s.description = %q{For use anywhere you have objects with to_params, ids, or just to_s's}
14
14
  s.email = %q{sinefunc@gmail.com}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
17
- "README.rdoc"
17
+ "README.markdown"
18
18
  ]
19
19
  s.files = [
20
20
  ".document",
21
21
  ".gitignore",
22
22
  "LICENSE",
23
- "README.rdoc",
23
+ "README.markdown",
24
24
  "Rakefile",
25
25
  "VERSION",
26
26
  "lib/rtopia.rb",
@@ -78,4 +78,28 @@ class TestRtopia < Test::Unit::TestCase
78
78
  assert_equal '/users?user%5Blname%5D=Doe&user%5Bfname%5D=John',
79
79
  R(:users, :user => { :lname => 'Doe', :fname => 'John' })
80
80
  end
81
+
82
+ def test_Rtopia_R_of_string_prefixed_with_slash
83
+ assert_equal '/the-right-path', R('/the-right-path')
84
+ end
85
+
86
+ def test_Rtopia_R_of_string_prefix_with_http
87
+ assert_equal 'http://test.host/arg1/arg2',
88
+ R('http://test.host', :arg1, :arg2)
89
+ end
90
+
91
+ def test_Rtopia_R_of_string_prefix_with_http_and_hash
92
+ assert_equal 'http://test.host/arg1/arg2?key1=value1&key2=value2',
93
+ R('http://test.host', :arg1, :arg2, :key1 => :value1, :key2 => :value2)
94
+ end
95
+
96
+ def test_Rtopia_R_of_string_prefix_with_http_and_hash_and_suffixed
97
+ assert_equal 'http://test.host/arg1/arg2?key1=value1&key2=value2',
98
+ R('http://test.host/', :arg1, :arg2, :key1 => :value1, :key2 => :value2)
99
+ end
100
+
101
+ def test_facebook_oauth_example
102
+ assert_equal "https://graph.facebook.com/oauth/authorize?client_id=123",
103
+ R('https://graph.facebook.com/oauth/authorize', :client_id => '123')
104
+ end
81
105
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 1
9
- version: 0.2.1
8
+ - 3
9
+ version: 0.2.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Sinefunc
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-25 00:00:00 +08:00
17
+ date: 2010-05-25 00:00:00 +08:00
18
18
  default_executable:
19
19
  dependencies: []
20
20
 
@@ -26,12 +26,12 @@ extensions: []
26
26
 
27
27
  extra_rdoc_files:
28
28
  - LICENSE
29
- - README.rdoc
29
+ - README.markdown
30
30
  files:
31
31
  - .document
32
32
  - .gitignore
33
33
  - LICENSE
34
- - README.rdoc
34
+ - README.markdown
35
35
  - Rakefile
36
36
  - VERSION
37
37
  - lib/rtopia.rb