compose_url 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/compose_url.rb +66 -0
  3. metadata +45 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4f02e1ca714b06f3162a64ccc1aad00263342ae5
4
+ data.tar.gz: a02d63d16c71d7519c1379fb986cf9f1003a0e1e
5
+ SHA512:
6
+ metadata.gz: 60b15d22131abe5877144faaffdae86a8f8fac04820aef93d299f39429bf616e804cf4bbdc7d031cc26dbba6ccb88df9d6f7ee5ac6f0653b63f9d5eb394bcf20
7
+ data.tar.gz: 94d78cbcfaefd8baf1e98e18fe153507f4feee202cccae8baf122dbdfe7f8ab9fa86769e7ce762218a3e0aa53d2adc8bf8c8e6be1692c2c3846fd048a117dc3f
@@ -0,0 +1,66 @@
1
+ require 'cgi'
2
+ require 'uri'
3
+
4
+ class ComposeURL
5
+ attr_accessor :params
6
+
7
+ def initialize(baseurl, params={})
8
+ @url = baseurl
9
+ @params = params
10
+ end
11
+
12
+ def add_param(k, v)
13
+ @params[k] = v
14
+ end
15
+
16
+ def remove_param(k)
17
+ @params.delete(k)
18
+ end
19
+
20
+ def url
21
+ validate_url(build_url)
22
+ end
23
+
24
+ def to_s
25
+ url
26
+ end
27
+
28
+ private
29
+
30
+ # todo: is this a valid key?
31
+ def validate_key(k)
32
+ raise ComposeURLError.new('Invalid key') unless k == escape(k) # key shouldn't require escaping, or should it?
33
+ escape(k)
34
+ end
35
+
36
+ # todo: is this a valid value?
37
+ def validate_value(v)
38
+ escape(v)
39
+ end
40
+
41
+ def validate_url(url)
42
+ raise ComposeURLError.new('Resulting URL is invalid') unless url =~ /\A#{URI::regexp}\z/
43
+ url
44
+ end
45
+
46
+ def params_string
47
+ @params.map { |k,v|
48
+ "#{validate_key(k)}=#{validate_value(v)}"
49
+ }.join('&')
50
+ end
51
+
52
+ def escape(s)
53
+ CGI.escape(s)
54
+ end
55
+
56
+ def build_url
57
+ @params.length == 0 ? "#{@url}" : "#{@url}?#{params_string}"
58
+ end
59
+
60
+ # todo: support arrays
61
+ # todo: support hash
62
+ end
63
+
64
+ class ComposeURLError < StandardError
65
+ # todo: custom error handling
66
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: compose_url
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Ryan Burnette
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-01 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A Ruby class that helps you compose a URL string with query parameters
14
+ without all the fuss.
15
+ email: ryan.burnette@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/compose_url.rb
21
+ homepage: https://github.com/ryanburnette/compose_url
22
+ licenses:
23
+ - Apache2
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 2.2.2
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: Helps you compose a URL.
45
+ test_files: []