Module: NCipher

Extended by:
Helper
Defined in:
lib/n_cipher.rb,
lib/n_cipher/version.rb

Defined Under Namespace

Modules: Helper

Constant Summary collapse

VERSION =
"0.2.0"

Class Method Summary collapse

Methods included from Helper

convert_table

Class Method Details

.decode(string, seed:, delimiter:) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/n_cipher.rb', line 29

def decode(string, seed: , delimiter: )
  [string, seed, delimiter].each do |obj|
    raise TypeError, "#{obj} is #{obj.class}. Argument must be string object." unless obj.kind_of?(String)
    raise ArgumentError, 'Invalid argument.' if obj.empty?
  end

  seed_include_in_string = -> { (string.split(//) - delimiter.split(//)).map {|ele| seed.split(//).index(ele) }.all? }
  delimiter_inclide_in_string = -> { delimiter.split(//).uniq.sort.map {|ele| string.include?(ele) }.all? }
  seed_and_delimiter_dont_overlap = -> { (seed.split(//).uniq.sort & delimiter.split(//).uniq.sort) == [] }

  case false
  when seed_include_in_string.call
    raise ArgumentError, 'Invalid seed.'
  when delimiter_inclide_in_string.call
    raise ArgumentError, 'Invalid delimiter.'
  when seed_and_delimiter_dont_overlap.call
    raise ArgumentError, 'Seed and delimiter are deplicated.'
  end

  string.split(delimiter).map {|ele| [ele.gsub(/./, convert_table(seed, :decode)).to_i(seed.size)].pack('U') }.join
end

.encode(string, seed: 'にゃんぱす', delimiter: '〜') ⇒ Object

Raises:

  • (ArgumentError)


17
18
19
20
21
22
23
24
25
26
27
# File 'lib/n_cipher.rb', line 17

def encode(string, seed: 'にゃんぱす', delimiter: '')
  [string, seed, delimiter].each do |obj|
    raise TypeError, "#{obj} is #{obj.class}. Argument must be string object." unless obj.kind_of?(String)
    raise ArgumentError, 'Invalid argument.' if obj.empty?
  end
  raise ArgumentError, 'Seed must be 2 to 10 characters.' unless seed.size.between?(2,10)
  raise ArgumentError, 'Seed and delimiter are deplicated.' unless (seed.split(//).uniq.sort & delimiter.split(//).uniq.sort) == []
  raise ArgumentError, 'Invalid seed.' unless seed.split(//).size == seed.split(//).uniq.size

  string.unpack('U*').map {|c| c.to_s(seed.size).gsub(/./, convert_table(seed, :encode)).concat(delimiter) }.join
end