uri_encoding 0.0.1 → 0.0.2

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: c5f8aae210a6dd4c612344e0df46f05def7de411
4
- data.tar.gz: 83c0d50dc3d711b5a422f8b676f919e70f2709ba
3
+ metadata.gz: 864c1bfccc6eaa73163f8a0b9647b90588dd7712
4
+ data.tar.gz: 5b3d86dcaa63bf612b9897a3de75ef5af5291b6a
5
5
  SHA512:
6
- metadata.gz: d6cdbc41a611966f2f9d56fb3713bea5422ac87fc2955c8ca945c2fd4953dbc20a45fcb91f935bf0c565c44be40b933106b8267d1e0004a68f5ac82d42884e11
7
- data.tar.gz: f17f755131eba4bf92dbe60cfe31d004cb2296600923752b90c9c522366e7ba42d94d3f4ebee663447d10d67b1cb6be03137c029d43bf9d52a0589c577c0a8b8
6
+ metadata.gz: 990a727a76729c3657a62b4f99b9b12e9007e0ec7dd9426f9f22232c530742d60ee717367f5318cfe56f4bda72ded98eceeda83f2c4e36c20eb988df21200b03
7
+ data.tar.gz: d85897b11abf01cd6ab16b4ac6116d3e20f721b918de6ef56577c9ef73d31c69b6245479471b97dbe76aeb93e2ab4b0b4310eabced788290de72ed0afb7044f6
data/README.md CHANGED
@@ -1,9 +1,10 @@
1
1
  # UriEncoding
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/uri_encoding.svg)](http://badge.fury.io/rb/uri_encoding)
3
4
  [![Build Status](https://travis-ci.org/s-osa/uri_encoding.svg?branch=master)](https://travis-ci.org/s-osa/uri_encoding)
4
5
  [![Coverage Status](https://coveralls.io/repos/s-osa/uri_encoding/badge.png?branch=master)](https://coveralls.io/r/s-osa/uri_encoding?branch=master)
5
6
 
6
- TODO: Write a gem description
7
+ Simple utility for URI encoding(URL encoding, percent encoding).
7
8
 
8
9
  ## Installation
9
10
 
@@ -18,10 +19,31 @@ And then execute:
18
19
  Or install it yourself as:
19
20
 
20
21
  $ gem install uri_encoding
21
-
22
+
22
23
  ## Usage
23
24
 
24
- TODO: Write usage instructions here
25
+ ### Basic
26
+
27
+ ```ruby
28
+ UriEncoding.encode("Aa1!?_%") #=> "Aa1!?_%25"
29
+ UriEncoding.decode("Aa1!?_%25") #=> "Aa1!?_%"
30
+ ```
31
+
32
+ ### Optional
33
+
34
+ `UriEncoding.encode` receives exceptions for encoding.
35
+
36
+ ```ruby
37
+ UriEncoding.encode("Aa1!?_%", []) #=> "%41%61%31%21%3F%5F%25"
38
+ UriEncoding.encode("Aa1!?_%", UriEncoding::UnreservedCharacters) #=> "Aa1%21%3F_%25"
39
+ ```
40
+
41
+ `UriEncoding.decode` receives decoded string encoding.
42
+
43
+ ```ruby
44
+ string = UriEncoding.decode("%82%A0%82%A2%82%A4", Encoding::Windows_31J) #=> "あいう"
45
+ string.encoding #=> #<Encoding:Windows-31J>
46
+ ```
25
47
 
26
48
  ## Contributing
27
49
 
@@ -2,10 +2,10 @@ module UriEncoding
2
2
  class Decoder
3
3
  EncodedCharRegexp = /^%([0-9A-Fa-f]{2})$/
4
4
 
5
- def decode(str)
6
- encoded_chars = split_encoded_string(str)
7
- decoded_chars = encoded_chars.map{|c| decode_char(c) }
8
- decoded_chars.join
5
+ def decode(str, encoding=nil)
6
+ single_byte_expressions = split_encoded_string(str)
7
+ bytes_string = single_byte_expressions.map{|e| convert_to_byte(e) }.join
8
+ bytes_string.force_encoding(encoding || str.encoding)
9
9
  end
10
10
 
11
11
  private
@@ -20,8 +20,8 @@ module UriEncoding
20
20
  arr
21
21
  end
22
22
 
23
- def decode_char(char)
24
- char =~ EncodedCharRegexp ? Integer("0x#{$1}").chr : char
23
+ def convert_to_byte(exp)
24
+ exp =~ EncodedCharRegexp ? Integer("0x#{$1}").chr : exp
25
25
  end
26
26
  end
27
27
  end
@@ -1,3 +1,3 @@
1
1
  module UriEncoding
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -1,3 +1,5 @@
1
+ # coding: utf-8
2
+
1
3
  def default_mappings
2
4
  {
3
5
  "ABCDEFGHIJKLMNOPQRSTUVWXYZ" => "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
@@ -42,6 +44,9 @@ def default_mappings
42
44
  "{" => "%7B",
43
45
  "|" => "%7C",
44
46
  "}" => "%7D",
47
+
48
+ # multibyte character
49
+ "あいう" => "%E3%81%82%E3%81%84%E3%81%86",
45
50
  }
46
51
  end
47
52
 
@@ -89,5 +94,19 @@ def everything_escaped_mappings
89
94
  "{" => "%7B",
90
95
  "|" => "%7C",
91
96
  "}" => "%7D",
97
+
98
+ # multibyte character
99
+ "あいう" => "%E3%81%82%E3%81%84%E3%81%86",
100
+ "あいう".encode(Encoding::Windows_31J) => "%82%A0%82%A2%82%A4".encode(Encoding::Windows_31J),
92
101
  }
93
102
  end
103
+
104
+ def multibyte_mappings
105
+ [
106
+ {
107
+ source: "あいう".encode(Encoding::Windows_31J),
108
+ encoded: "%82%A0%82%A2%82%A4",
109
+ encoding: Encoding::Windows_31J
110
+ },
111
+ ]
112
+ end
@@ -28,5 +28,14 @@ describe UriEncoding::Decoder do
28
28
  end
29
29
  end
30
30
  end
31
+
32
+ context "with encoding argument" do
33
+ multibyte_mappings.each do |mapping|
34
+ describe "#{mapping[:encoded]} as #{mapping[:encoding]}" do
35
+ subject{ decoder.decode(mapping[:encoded], mapping[:encoding]) }
36
+ it{ is_expected.to eq(mapping[:source]) }
37
+ end
38
+ end
39
+ end
31
40
  end
32
41
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uri_encoding
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - OSA Shunsuke
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-19 00:00:00.000000000 Z
11
+ date: 2014-09-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler