mure 0.1.0 → 0.3.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
  SHA256:
3
- metadata.gz: e9ba52e272a15a18b0e96e39727886bf2a1d0970c28cb236f7f4778651b23e16
4
- data.tar.gz: '07984f3285468649290f4cec3f9a935dbc7ae4ca4901a03c4d354e55ae9cb042'
3
+ metadata.gz: 314942e0218792bf245d0789ae5c0b61993a01f7cd771e74fe4fef608c822df0
4
+ data.tar.gz: 8c909ae7ba1a6efbd1318008d93e05917ed88a8bee3dc19394f8a0bdc657cfa9
5
5
  SHA512:
6
- metadata.gz: c205618ef9732f2fa6a058fdf70900502a241e28ce9456c6f950ff59027d9f739ca2aa7cc888b175e51c202cfcd645828d8d90623c1f1d2a687f624f645c622e
7
- data.tar.gz: e63f5600ddf70b2af9648d70645f7f79b52a01812eb1b1c0fdd634cbbffbb413c796babd96a2ad940333ef547d2b5d10333596a7fd23e61da22c08272fff39a7
6
+ metadata.gz: 1f0d3549bed5ccaf505240f85df97c9f25d24d4a49d5eeb9fba6c5087856a16732d1c4a8e3a9fb9d3c8d12dcddb7fcd5cc93e87de45e449c2a86a7432bcc4e35
7
+ data.tar.gz: 57aad3253654f8e7ca2b8cc1c090b23984b03bf7141c5b2e8dd9faae3d8a16bd720907ff87a8c09571cc1df3c546cf5e0c4d727a33ecd3d6ffc46f3bc7d459b7
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mure (0.1.0)
4
+ mure (0.3.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # Mure
1
+ # Mure(牟礼)
2
2
 
3
3
  [![CircleCI](https://circleci.com/gh/taki/mure.svg?style=svg)](https://circleci.com/gh/taki/mure)
4
4
 
5
- You can encode Base64.
5
+ You can encode and decode Base64.
6
6
 
7
7
  ## Requirements
8
8
 
@@ -21,5 +21,6 @@ gem 'mure'
21
21
  ```ruby
22
22
  require 'mure'
23
23
 
24
- Mure.encode64('abcdefg') # => 'YWJjZGVmZw=='
24
+ 'abcdefg'.encode64 # => 'YWJjZGVmZw=='
25
+ 'YWJjZGVmZw=='.decode64 # => 'abcdefg'
25
26
  ```
@@ -0,0 +1,107 @@
1
+ class String
2
+ TABLE = {
3
+ '000000' => 'A',
4
+ '000001' => 'B',
5
+ '000010' => 'C',
6
+ '000011' => 'D',
7
+ '000100' => 'E',
8
+ '000101' => 'F',
9
+ '000110' => 'G',
10
+ '000111' => 'H',
11
+ '001000' => 'I',
12
+ '001001' => 'J',
13
+ '001010' => 'K',
14
+ '001011' => 'L',
15
+ '001100' => 'M',
16
+ '001101' => 'N',
17
+ '001110' => 'O',
18
+ '001111' => 'P',
19
+ '010000' => 'Q',
20
+ '010001' => 'R',
21
+ '010010' => 'S',
22
+ '010011' => 'T',
23
+ '010100' => 'U',
24
+ '010101' => 'V',
25
+ '010110' => 'W',
26
+ '010111' => 'X',
27
+ '011000' => 'Y',
28
+ '011001' => 'Z',
29
+ '011010' => 'a',
30
+ '011011' => 'b',
31
+ '011100' => 'c',
32
+ '011101' => 'd',
33
+ '011110' => 'e',
34
+ '011111' => 'f',
35
+ '100000' => 'g',
36
+ '100001' => 'h',
37
+ '100010' => 'i',
38
+ '100011' => 'j',
39
+ '100100' => 'k',
40
+ '100101' => 'l',
41
+ '100110' => 'm',
42
+ '100111' => 'n',
43
+ '101000' => 'o',
44
+ '101001' => 'p',
45
+ '101010' => 'q',
46
+ '101011' => 'r',
47
+ '101100' => 's',
48
+ '101101' => 't',
49
+ '101110' => 'u',
50
+ '101111' => 'v',
51
+ '110000' => 'w',
52
+ '110001' => 'x',
53
+ '110010' => 'y',
54
+ '110011' => 'z',
55
+ '110100' => '0',
56
+ '110101' => '1',
57
+ '110110' => '2',
58
+ '110111' => '3',
59
+ '111000' => '4',
60
+ '111001' => '5',
61
+ '111010' => '6',
62
+ '111011' => '7',
63
+ '111100' => '8',
64
+ '111101' => '9',
65
+ '111110' => '+',
66
+ '111111' => '/'
67
+ }.freeze
68
+
69
+ def encode64
70
+ encoded_text
71
+ end
72
+
73
+ def decode64
74
+ binary_text = delete('=').split('').map { |str| TABLE.invert.fetch(str) }.join
75
+ binary_text
76
+ .each_char
77
+ .each_slice(8)
78
+ .select { |str| str.count == 8 }
79
+ .map { |str| str.join.to_i(2).chr }
80
+ .join
81
+ end
82
+
83
+ private
84
+
85
+ def encoded_text
86
+ encoded_text = binary_text.each_char.each_slice(6).map { |str| TABLE.fetch(str.join) }.join
87
+
88
+ loop do
89
+ break if (encoded_text.size % 4).zero?
90
+ encoded_text << '='
91
+ end
92
+
93
+ encoded_text
94
+ end
95
+
96
+ def binary_text
97
+ # NOTE: String#unpackは、エンディアンに依存しそう。。。
98
+ binary_text = unpack('B*')[0]
99
+
100
+ loop do
101
+ break if (binary_text.size % 6).zero?
102
+ binary_text << '0'
103
+ end
104
+
105
+ binary_text
106
+ end
107
+ end
@@ -1,87 +1 @@
1
- require 'mure/version'
2
-
3
- module Mure
4
- TABLE = {
5
- '000000' => 'A',
6
- '000001' => 'B',
7
- '000010' => 'C',
8
- '000011' => 'D',
9
- '000100' => 'E',
10
- '000101' => 'F',
11
- '000110' => 'G',
12
- '000111' => 'H',
13
- '001000' => 'I',
14
- '001001' => 'J',
15
- '001010' => 'K',
16
- '001011' => 'L',
17
- '001100' => 'M',
18
- '001101' => 'N',
19
- '001110' => 'O',
20
- '001111' => 'P',
21
- '010000' => 'Q',
22
- '010001' => 'R',
23
- '010010' => 'S',
24
- '010011' => 'T',
25
- '010100' => 'U',
26
- '010101' => 'V',
27
- '010110' => 'W',
28
- '010111' => 'X',
29
- '011000' => 'Y',
30
- '011001' => 'Z',
31
- '011010' => 'a',
32
- '011011' => 'b',
33
- '011100' => 'c',
34
- '011101' => 'd',
35
- '011110' => 'e',
36
- '011111' => 'f',
37
- '100000' => 'g',
38
- '100001' => 'h',
39
- '100010' => 'i',
40
- '100011' => 'j',
41
- '100100' => 'k',
42
- '100101' => 'l',
43
- '100110' => 'm',
44
- '100111' => 'n',
45
- '101000' => 'o',
46
- '101001' => 'p',
47
- '101010' => 'q',
48
- '101011' => 'r',
49
- '101100' => 's',
50
- '101101' => 't',
51
- '101110' => 'u',
52
- '101111' => 'v',
53
- '110000' => 'w',
54
- '110001' => 'x',
55
- '110010' => 'y',
56
- '110011' => 'z',
57
- '110100' => '0',
58
- '110101' => '1',
59
- '110110' => '2',
60
- '110111' => '3',
61
- '111000' => '4',
62
- '111001' => '5',
63
- '111010' => '6',
64
- '111011' => '7',
65
- '111100' => '8',
66
- '111101' => '9',
67
- '111110' => '+',
68
- '111111' => '/'
69
- }.freeze
70
-
71
- def self.encode64(text)
72
- # NOTE: String#unpackは、エンディアンに依存しそう。。。
73
- binary_text = text.unpack('B*')[0]
74
- loop do
75
- break if (binary_text.size % 6).zero?
76
- binary_text << '0'
77
- end
78
-
79
- encoded_text = binary_text.each_char.each_slice(6).map { |str| TABLE.fetch(str.join) }.join
80
- loop do
81
- break if (encoded_text.size % 4).zero?
82
- encoded_text << '='
83
- end
84
-
85
- encoded_text
86
- end
87
- end
1
+ require 'core_ext/string'
@@ -1,14 +1,13 @@
1
1
  lib = File.expand_path('lib', __dir__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require 'mure/version'
4
3
 
5
4
  Gem::Specification.new do |spec|
6
5
  spec.name = 'mure'
7
- spec.version = Mure::VERSION
6
+ spec.version = '0.3.0'
8
7
  spec.authors = ['taki']
9
8
  spec.email = ['taki@users.noreply.github.com']
10
9
 
11
- spec.summary = 'Encode Base64'
10
+ spec.summary = 'Encode and decode Base64'
12
11
  spec.description = spec.summary
13
12
  spec.homepage = 'https://github.com/taki/mure'
14
13
  spec.license = 'MIT'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mure
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - taki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-03 00:00:00.000000000 Z
11
+ date: 2018-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,7 +94,7 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
- description: Encode Base64
97
+ description: Encode and decode Base64
98
98
  email:
99
99
  - taki@users.noreply.github.com
100
100
  executables: []
@@ -110,8 +110,8 @@ files:
110
110
  - LICENSE.txt
111
111
  - README.md
112
112
  - Rakefile
113
+ - lib/core_ext/string.rb
113
114
  - lib/mure.rb
114
- - lib/mure/version.rb
115
115
  - mure.gemspec
116
116
  homepage: https://github.com/taki/mure
117
117
  licenses:
@@ -136,5 +136,5 @@ rubyforge_project:
136
136
  rubygems_version: 2.7.6
137
137
  signing_key:
138
138
  specification_version: 4
139
- summary: Encode Base64
139
+ summary: Encode and decode Base64
140
140
  test_files: []
@@ -1,3 +0,0 @@
1
- module Mure
2
- VERSION = '0.1.0'.freeze
3
- end