mure 0.1.0 → 0.3.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
  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