n_cipher 0.3.4 → 0.4.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
  SHA1:
3
- metadata.gz: 80265f86091eec640ccb6b3e661105a67c1cf8d1
4
- data.tar.gz: e1010ee33a1b842e8ea787cbb85b80985ed6be0b
3
+ metadata.gz: ebe26d7992ccd3683a3b01e1419ec107bf9c6d2e
4
+ data.tar.gz: 3f5dbef08cc12f691a01d2e80bf3506e3725c87a
5
5
  SHA512:
6
- metadata.gz: 68ebf9aa789276fcbad2bb431f619cc3872e5ce6eceaaa865d1a234b059a9081837463294770509c972ddde4ca38f3ebefb0f3437ef59e3dd22f777ec3583ef2
7
- data.tar.gz: f4e86dfdf1161bc516f60479015ca2f1997e355afbe856c63908fa83ff68c970f603ea7824a6442c9ffb1e9aead9a84ad8d798931e239248219e0ac046006b82
6
+ metadata.gz: 209966720f6bf66f82ef1c583fcfc9154d27a43d7346e321bf3e55a54cc3e62b179d97133967788a17e1bc2f6d2e0b60a0203b6d5d5d5904595b26e59ef1e4f5
7
+ data.tar.gz: 601afcfbd2a9411af22c825646edba42b48381c586cac13701a7f000fca586a531f0fc52143d120b3a881cad4f1d697c9c25079f9897049b453cb580594aa317
data/README.md CHANGED
@@ -5,7 +5,8 @@
5
5
  [![Travis branch](https://img.shields.io/travis/844196/n_cipher.svg)](https://travis-ci.org/844196/n_cipher)
6
6
  [![Coveralls branch](https://img.shields.io/coveralls/844196/n_cipher/master.svg)](https://coveralls.io/github/844196/n_cipher)
7
7
  [![Code Climate](https://img.shields.io/codeclimate/github/844196/n_cipher.svg)](https://codeclimate.com/github/844196/n_cipher)
8
- [![Issues](http://img.shields.io/github/issues/844196/n_cipher.svg)](https://github.com/844196/n_cipher/issues)
8
+ [![Docunment](https://img.shields.io/badge/doc-RubyDoc.info-blue.svg)](http://www.rubydoc.info/github/844196/n_cipher/master)
9
+ [![Inline docs](http://inch-ci.org/github/844196/n_cipher.svg?branch=master&style=shields)](http://inch-ci.org/github/844196/n_cipher)
9
10
 
10
11
  ![](https://cloud.githubusercontent.com/assets/4990822/10408480/9bf5d63a-6f39-11e5-9568-55e24afcbdc5.png)
11
12
 
data/Rakefile CHANGED
@@ -1,10 +1,16 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
2
  require 'rubocop/rake_task'
3
+ require 'yard'
4
+ require 'yard/rake/yardoc_task'
3
5
 
4
6
  task :default => :test
5
7
 
6
8
  task :test do
7
- ruby("test/test_helper.rb")
9
+ ruby 'test/test_helper.rb', '--verbose', '--progress-row-max=0'
8
10
  end
9
11
 
10
12
  RuboCop::RakeTask.new
13
+
14
+ YARD::Rake::YardocTask.new do |t|
15
+ t.files = ['lib/**/*.rb']
16
+ end
data/bin/console CHANGED
@@ -1,14 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "n_cipher"
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
3
+ require 'bundler/setup'
4
+ require 'n_cipher'
5
+ require 'irb'
14
6
  IRB.start
@@ -1,3 +1,4 @@
1
1
  module NCipher
2
- VERSION = "0.3.4"
2
+ # バージョン番号
3
+ VERSION = '0.4.0'
3
4
  end
data/lib/n_cipher.rb CHANGED
@@ -1,46 +1,123 @@
1
- require "n_cipher/version"
1
+ require 'n_cipher/version'
2
2
 
3
+ # ユニコードエスケープシーケンスを用いた簡易的な暗号化及び復号化方式を提供するモジュール
3
4
  module NCipher
4
- module Helper
5
- def convert_table(string, mode)
6
- table = [*'0'..'9', *'a'..'z'].zip(string.chars).reject(&:one?).to_h
5
+ # デフォルト値
6
+ @seed = 'にゃんぱす'
7
+ @delimiter = ''
8
+
9
+ # 実際の暗号化、復号化を行うメソッドが定義されているモジュール
10
+ # @note このモジュール内のメソッドはプライベートクラスメソッドに指定されているため、外部から呼び出すことはできない
11
+ module Convert
12
+ # シード値から変換テーブルを構築する
13
+ #
14
+ # @example
15
+ # convert_table(:encode, 'あいうえお')
16
+ # #=> {"0"=>"あ", "1"=>"い", "2"=>"う", "3"=>"え", "4"=>"お"}
17
+ #
18
+ # convert_table(:decode, 'あいうえお')
19
+ # #=> {"あ"=>"0", "い"=>"1", "う"=>"2", "え"=>"3", "お"=>"4"}
20
+ #
21
+ # @param [Symbol] mode +:encode+もしくは+:decode+を指定
22
+ # @param [String] seed 元となるシード値
23
+ #
24
+ # @return [Hash] 変換テーブル
25
+ #
26
+ # @raise [RangeError] シード値が2文字以下、もしくは36文字以上の場合
27
+ def convert_table(mode, seed)
28
+ fail RangeError, 'Seed must be 2 to 36 characters.' unless seed.size.between?(2, 36)
29
+
30
+ table = [*'0'..'9', *'a'..'z'].zip(seed.chars).reject(&:one?).to_h
7
31
  case mode
8
32
  when :encode then table
9
33
  when :decode then table.invert
10
34
  end
11
35
  end
12
36
 
13
- def common_argument_check(string, seed, delimiter)
14
- [string, seed, delimiter].each do |obj|
15
- raise TypeError, "#{obj} is #{obj.class} object. Argument must be string object." unless obj.kind_of?(String)
16
- raise ArgumentError, 'Invalid argument.' if obj.empty?
17
- end
18
- raise ArgumentError, 'Seed must be 2 to 36 characters.' unless seed.size.between?(2, 36)
19
- raise ArgumentError, 'Seed and delimiter are duplicated.' unless (seed.chars & delimiter.chars).size.zero?
20
- # シード値が重複していないか?
21
- # OK: 'あいう'
22
- # NG: 'ああい'(「あ」が重複)
23
- raise ArgumentError, 'Character is duplicated in seed.' unless seed.size == seed.chars.uniq.size
37
+ # 実際の変換処理を行う
38
+ #
39
+ # @param [Symbol] mode +:encode+もしくは+:decode+を指定
40
+ # @param [String] string 対象文字列
41
+ # @param [String] seed シード値
42
+ # @param [String] delimiter 区切り文字
43
+ #
44
+ # @return [String] 変換された文字列オブジェクト
45
+ #
46
+ # @raise [ArgumentError]
47
+ def convert(mode, string, seed, delimiter)
48
+ fail ArgumentError, 'Seed and delimiter are duplicated.' unless (seed.chars & delimiter.chars).size.zero?
49
+ fail ArgumentError, 'Character is duplicated in seed.' unless seed.size == seed.chars.uniq.size
50
+
51
+ table = convert_table(mode.to_sym, seed)
52
+ rtn = case mode
53
+ when :encode
54
+ string.unpack('U*').map {|ele| ele.to_s(seed.size).gsub(/./, table).concat(delimiter) }
55
+ when :decode
56
+ fail ArgumentError, 'Delimiter is not include in the cipher string.' unless string.match(delimiter)
57
+ fail ArgumentError, 'Invalid cipher string.' unless (string.chars - "#{seed}#{delimiter}".chars).size.zero?
58
+ string.split(delimiter).map {|ele| [ele.gsub(/./, table).to_i(seed.size)].pack('U') }
59
+ end
60
+
61
+ rtn.join
24
62
  end
25
63
  end
26
64
 
27
65
  class << self
28
- include NCipher::Helper
66
+ attr_accessor :seed, :delimiter
67
+ include NCipher::Convert
29
68
 
30
- def encode(string, seed: 'にゃんぱす', delimiter: '〜')
31
- common_argument_check(string, seed, delimiter)
32
-
33
- string.unpack('U*').map {|c| c.to_s(seed.size).gsub(/./, convert_table(seed, :encode)).concat(delimiter) }.join
69
+ # 文字列を暗号化
70
+ #
71
+ # @note このメソッドは{Convert#convert}のラッパーメソッドである
72
+ #
73
+ # @example
74
+ # NCipher.encode('abc', seed: 'にゃんぱす', delimiter: '〜')
75
+ # #=> "ぱすん〜ぱすぱ〜ぱすす〜"
76
+ #
77
+ # @param [#to_str] string 対象文字列
78
+ # @param [#to_str] seed シード値
79
+ # @param [#to_str] delimiter 区切り文字
80
+ #
81
+ # @return [String] 暗号化された文字列オブジェクト
82
+ #
83
+ # @raise [ArgumentError]
84
+ # @raise [TypeError]
85
+ # @raise [RangeError]
86
+ #
87
+ # @see Convert#convert
88
+ def encode(string, seed: @seed, delimiter: @delimiter)
89
+ [string, seed, delimiter].each do |obj|
90
+ fail TypeError, "Arguments must be respond to 'to_str' method." unless obj.respond_to? :to_str
91
+ end
92
+ convert(:encode, string.to_str, seed.to_str, delimiter.to_str)
34
93
  end
35
94
 
36
- def decode(string, seed: , delimiter: )
37
- common_argument_check(string, seed, delimiter)
38
- raise ArgumentError, 'Delimiter is not include in the cipher string.' unless string.match(delimiter)
39
- raise ArgumentError, 'Invalid cipher string.' unless (string.chars - "#{seed}#{delimiter}".chars).size.zero?
40
-
41
- string.split(delimiter).map {|ele| [ele.gsub(/./, convert_table(seed, :decode)).to_i(seed.size)].pack('U') }.join
95
+ # 文字列を復号化
96
+ #
97
+ # @note このメソッドは{Convert#convert}のラッパーメソッドである
98
+ #
99
+ # @example
100
+ # NCipher.decode('ぱすん〜ぱすぱ〜ぱすす〜', seed: 'にゃんぱす', delimiter: '')
101
+ # #=> "abc"
102
+ #
103
+ # @param [#to_str] string 対象文字列
104
+ # @param [#to_str] seed シード値
105
+ # @param [#to_str] delimiter 区切り文字
106
+ #
107
+ # @return [String] 復号化された文字列オブジェクト
108
+ #
109
+ # @raise [ArgumentError]
110
+ # @raise [TypeError]
111
+ # @raise [RangeError]
112
+ #
113
+ # @see Convert#convert
114
+ def decode(string, seed: @seed, delimiter: @delimiter)
115
+ [string, seed, delimiter].each do |obj|
116
+ fail TypeError, "Arguments must be respond to 'to_str' method." unless obj.respond_to? :to_str
117
+ end
118
+ convert(:decode, string.to_str, seed.to_str, delimiter.to_str)
42
119
  end
43
120
  end
44
121
 
45
- private_class_method :convert_table, :common_argument_check
122
+ private_class_method :convert_table, :convert
46
123
  end
data/n_cipher.gemspec CHANGED
@@ -4,27 +4,28 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'n_cipher/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "n_cipher"
7
+ spec.name = 'n_cipher'
8
8
  spec.version = NCipher::VERSION
9
- spec.authors = ["Masaya Takeda"]
10
- spec.email = ["844196@gmail.com"]
9
+ spec.authors = ['Masaya Takeda']
10
+ spec.email = ['844196@gmail.com']
11
11
 
12
- spec.summary = %q{ぱすすにすに〜ぱすすゃぱす〜ぱすすんんに〜ぱすすゃにゃ〜ぱすすににん〜ぱすぱんぱゃ}
13
- spec.description = %q{文字列のUnicodeエスケープシーケンスを利用した簡易的な暗号です}
14
- spec.homepage = "https://github.com/844196/n_cipher"
15
- spec.license = "MIT"
12
+ spec.summary = 'ぱすすにすに〜ぱすすゃぱす〜ぱすすんんに〜ぱすすゃにゃ〜ぱすすににん〜ぱすぱんぱゃ'
13
+ spec.description = '文字列のUnicodeエスケープシーケンスを利用した簡易的な暗号です'
14
+ spec.homepage = 'https://github.com/844196/n_cipher'
15
+ spec.license = 'MIT'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
18
+ spec.bindir = 'exe'
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ["lib"]
20
+ spec.require_paths = ['lib']
21
21
 
22
22
  spec.required_ruby_version = '>= 2.1.0'
23
- spec.add_development_dependency "bundler", "~> 1.9"
24
- spec.add_development_dependency "rake", "~> 10.0"
25
- spec.add_development_dependency "test-unit"
26
- spec.add_development_dependency "coveralls"
27
- spec.add_development_dependency "rubocop"
23
+ spec.add_development_dependency 'bundler', '~> 1.9'
24
+ spec.add_development_dependency 'rake', '~> 10.0'
25
+ spec.add_development_dependency 'test-unit'
26
+ spec.add_development_dependency 'coveralls'
27
+ spec.add_development_dependency 'rubocop'
28
+ spec.add_development_dependency 'yard'
28
29
 
29
- spec.add_dependency "thor"
30
+ spec.add_dependency 'thor'
30
31
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: n_cipher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masaya Takeda
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-10-13 00:00:00.000000000 Z
11
+ date: 2015-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: yard
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: thor
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -141,3 +155,4 @@ signing_key:
141
155
  specification_version: 4
142
156
  summary: ぱすすにすに〜ぱすすゃぱす〜ぱすすんんに〜ぱすすゃにゃ〜ぱすすににん〜ぱすぱんぱゃ
143
157
  test_files: []
158
+ has_rdoc: