n_cipher 0.2.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
  SHA1:
3
- metadata.gz: 991e2699223167165235fc110af12ff68978529f
4
- data.tar.gz: a89eb6c237e1ef29aa6a64f82f7f4efa6a1e771a
3
+ metadata.gz: d52aee3b40506ee7d6e68c48553ef222317fb3f6
4
+ data.tar.gz: 129f41768f1a0898b2a314f3f79d086fae3b5731
5
5
  SHA512:
6
- metadata.gz: cb3907eb9c083bb27d5b7dbe452f4ee741ba4067a02b002188db4c6d52691f1c798076f8bad79c21e81f610904a3196a5f1ef39a7aa14dc1d6751ffb007be140
7
- data.tar.gz: fb17a9a65302c885d0f71921e8d2d966c6187ebf764907fdddf28c724de73d9c6aa4d8b68f653a2646ca62bda1943fbeef72dc9c3cd62ad23fbdb26cbf1b114a
6
+ metadata.gz: f60610b744944af92890532d39300620cad5ea896f53e738bae4e847bc219b6d744d602409b7d57595b23f4b2ae45c3e524aa47120fa9fa11b8d41686a484eb8
7
+ data.tar.gz: 32a8dd5b98683dd2db41dd15c462399ff2cbe308790c863ea3b09f8dea85f2d395f2f350034b385e38899cd6db40c7401d42b89a23cb902706f937bcecebed59
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # NCipher
2
2
 
3
- [![Gem](https://img.shields.io/gem/v/n_cipher.svg)]()
3
+ [![Gem](https://img.shields.io/gem/v/n_cipher.svg)](https://rubygems.org/gems/n_cipher)
4
4
  [![Travis branch](https://img.shields.io/travis/844196/n_cipher.svg)](https://travis-ci.org/844196/n_cipher)
5
5
  [![Coveralls branch](https://img.shields.io/coveralls/844196/n_cipher/master.svg)](https://coveralls.io/github/844196/n_cipher)
6
6
  [![Code Climate](https://img.shields.io/codeclimate/github/844196/n_cipher.svg)](https://codeclimate.com/github/844196/n_cipher)
@@ -38,3 +38,29 @@ NCipher::decode(
38
38
  seed: 'おうどん', delimiter: 'ひげ')
39
39
  #=> "にゃんぱす"
40
40
  ```
41
+
42
+ ```shellsession
43
+ $ n_cipher --help
44
+ Commands:
45
+ n_cipher decode <STRING> # N暗号文字列を復号化
46
+ n_cipher encode <STRING> # 文字列をN暗号化
47
+ n_cipher help [COMMAND] # Describe available commands or one specific command
48
+ n_cipher version # Print version
49
+
50
+ Options:
51
+ [--seed=SEED]
52
+ # Default: にゃんぱす
53
+ [--delimiter=DELIMITER]
54
+ # Default: 〜
55
+
56
+ $ # encode
57
+ $ n_cipher encode 'にゃんぱす'
58
+ ぱすすにすに〜ぱすすゃぱす〜ぱすすんんに〜ぱすすゃにゃ〜ぱすすににん〜
59
+
60
+ $ n_cipher encode --seed 'おうどん' --delimiter 'ひげ' 'にゃんぱす'
61
+ んおおうどどんひげんおおどおおんひげんおおどうおんひげんおおうんおうひげんおおううどうひげ
62
+
63
+ $ # decode
64
+ $ n_cipher decode --seed 'おうどん' --delimiter 'ひげ' 'んおおうどどんひげんおおどおおんひげんおおどうおんひげんおおうんおうひげんおおううどうひげ'
65
+ にゃんぱす
66
+ ```
data/exe/n_cipher ADDED
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'n_cipher'
4
+ require 'thor'
5
+
6
+ class NCipherCLI < Thor
7
+ map %w(-v --version) => :version
8
+ class_option :seed, :type => :string, :default => 'にゃんぱす'
9
+ class_option :delimiter, :type => :string, :default => '〜'
10
+
11
+ desc 'encode <STRING>', '文字列をN暗号化'
12
+ def encode(string)
13
+ STDOUT.puts NCipher::encode(string, seed: options[:seed], delimiter: options[:delimiter])
14
+ rescue => e
15
+ STDERR.puts e.message
16
+ exit 1
17
+ end
18
+
19
+ desc 'decode <STRING>', 'N暗号文字列を復号化'
20
+ def decode(string)
21
+ STDOUT.puts NCipher::decode(string, seed: options[:seed], delimiter: options[:delimiter])
22
+ rescue => e
23
+ STDERR.puts e.message
24
+ exit 1
25
+ end
26
+
27
+ desc 'version', 'Print version'
28
+ def version
29
+ STDOUT.puts NCipher::VERSION
30
+ exit 0
31
+ end
32
+ end
33
+
34
+ NCipherCLI.start
@@ -1,3 +1,3 @@
1
1
  module NCipher
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/n_cipher.rb CHANGED
@@ -3,51 +3,46 @@ require "n_cipher/version"
3
3
  module NCipher
4
4
  module Helper
5
5
  def convert_table(string, mode)
6
- table = string.split('').map.with_index(0) {|c,i| [i.to_s, c] }.to_h
6
+ table = string.chars.map.with_index(0) {|c,i| [i.to_s, c] }.to_h
7
7
  case mode
8
8
  when :encode then table
9
9
  when :decode then table.invert
10
10
  end
11
11
  end
12
+
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 10 characters.' unless seed.size.between?(2, 10)
19
+ raise ArgumentError, 'Seed and delimiter are duplicated.' unless (seed.chars.uniq.sort & delimiter.chars.uniq.sort).size.zero?
20
+ # シード値が重複していないか?
21
+ # OK: 'あいう'
22
+ # NG: 'ああい'(「あ」が重複)
23
+ raise ArgumentError, 'Character is duplicated in seed.' unless seed.chars.size == seed.chars.uniq.size
24
+ end
12
25
  end
13
26
 
14
27
  class << self
15
28
  include NCipher::Helper
16
29
 
17
30
  def encode(string, seed: 'にゃんぱす', delimiter: '〜')
18
- [string, seed, delimiter].each do |obj|
19
- raise TypeError, "#{obj} is #{obj.class}. Argument must be string object." unless obj.kind_of?(String)
20
- raise ArgumentError, 'Invalid argument.' if obj.empty?
21
- end
22
- raise ArgumentError, 'Seed must be 2 to 10 characters.' unless seed.size.between?(2,10)
23
- raise ArgumentError, 'Seed and delimiter are deplicated.' unless (seed.split(//).uniq.sort & delimiter.split(//).uniq.sort) == []
24
- raise ArgumentError, 'Invalid seed.' unless seed.split(//).size == seed.split(//).uniq.size
31
+ common_argument_check(string, seed, delimiter)
25
32
 
26
33
  string.unpack('U*').map {|c| c.to_s(seed.size).gsub(/./, convert_table(seed, :encode)).concat(delimiter) }.join
27
34
  end
28
35
 
29
36
  def decode(string, seed: , delimiter: )
30
- [string, seed, delimiter].each do |obj|
31
- raise TypeError, "#{obj} is #{obj.class}. Argument must be string object." unless obj.kind_of?(String)
32
- raise ArgumentError, 'Invalid argument.' if obj.empty?
33
- end
34
-
35
- seed_include_in_string = -> { (string.split(//) - delimiter.split(//)).map {|ele| seed.split(//).index(ele) }.all? }
36
- delimiter_inclide_in_string = -> { delimiter.split(//).uniq.sort.map {|ele| string.include?(ele) }.all? }
37
- seed_and_delimiter_dont_overlap = -> { (seed.split(//).uniq.sort & delimiter.split(//).uniq.sort) == [] }
38
-
39
- case false
40
- when seed_include_in_string.call
41
- raise ArgumentError, 'Invalid seed.'
42
- when delimiter_inclide_in_string.call
43
- raise ArgumentError, 'Invalid delimiter.'
44
- when seed_and_delimiter_dont_overlap.call
45
- raise ArgumentError, 'Seed and delimiter are deplicated.'
37
+ common_argument_check(string, seed, delimiter)
38
+ [seed, delimiter].each do |ele|
39
+ raise ArgumentError, "'#{ele}' is not include in the cipher string." unless ele.chars.map {|char| string.include?(char) }.all?
46
40
  end
41
+ raise ArgumentError 'Invalid cipher string.' unless (string.chars - "#{seed}#{delimiter}".chars).size.zero?
47
42
 
48
43
  string.split(delimiter).map {|ele| [ele.gsub(/./, convert_table(seed, :decode)).to_i(seed.size)].pack('U') }.join
49
44
  end
50
45
  end
51
46
 
52
- private_class_method :convert_table
47
+ private_class_method :convert_table, :common_argument_check
53
48
  end
data/n_cipher.gemspec CHANGED
@@ -23,4 +23,6 @@ Gem::Specification.new do |spec|
23
23
  spec.add_development_dependency "rake", "~> 10.0"
24
24
  spec.add_development_dependency "test-unit"
25
25
  spec.add_development_dependency "coveralls"
26
+
27
+ spec.add_dependency "thor"
26
28
  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.2.0
4
+ version: 0.3.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-08 00:00:00.000000000 Z
11
+ date: 2015-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,10 +66,25 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: thor
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  description: 文字列のUnicodeエスケープシーケンスを利用した簡易的な暗号です
70
84
  email:
71
85
  - 844196@gmail.com
72
- executables: []
86
+ executables:
87
+ - n_cipher
73
88
  extensions: []
74
89
  extra_rdoc_files: []
75
90
  files:
@@ -81,6 +96,7 @@ files:
81
96
  - Rakefile
82
97
  - bin/console
83
98
  - bin/setup
99
+ - exe/n_cipher
84
100
  - lib/n_cipher.rb
85
101
  - lib/n_cipher/version.rb
86
102
  - n_cipher.gemspec