codecal 0.3.5 → 0.3.6

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: e32f1544c510923cea8b7246837c64df210c6807
4
- data.tar.gz: 78547689fc699e5bbe6db36cb312296d54ea763f
3
+ metadata.gz: f77a2ce8d8ecfdb5a14b4dd26aef81339c7ad2ae
4
+ data.tar.gz: d63bf9f0d3326cfa83093771f2c0e3052b049921
5
5
  SHA512:
6
- metadata.gz: cb6d8219dbe9f58e283e3e56283d24b96df31bf1ca21e7e5baad32dd26fbbccc19c690bf2ea37617605a02b63081c3211354e2ed03217d215ff87dcc4cf11702
7
- data.tar.gz: 93548ea3c0816d99ca6fd234e3c9179e3270b9d7ee2044c5f1f6eed4a5ac23c5e06870cd3d52c07dcf8e2f7df12ff3c375872a1056ee2760411340339df2bdf8
6
+ metadata.gz: 4ca0cce49b239c578aa215d1fa5bbc43c886a8c94889da9fc53dd8c1c9b2004c3a0fdd8c9a1ab1d8cf5bb5bbeef802fb550d01fbcd891323ab6646518688e548
7
+ data.tar.gz: 77102c8cc6b5e69237b649e108aa7006ce8b1513463f28384559b4096f53609d8100941f98a20270749981ca674b0ef1c3a764fa21c2653afbbd7c0aa38313e0
data/README.md CHANGED
@@ -70,6 +70,14 @@ Codecal.validate_simple_code(String)
70
70
  # valid : boolean
71
71
  Codecal.validate_masked_code(String)
72
72
 
73
+ # Get unmasked code
74
+ # Parameters:
75
+ # mask : String(>=6) -- mask of letter or number
76
+ # masked_code : String(>=6)
77
+ # Return:
78
+ # code : String(>=6) || false : boolean
79
+ Codecal.get_unmasked_code(String)
80
+
73
81
  # Get currency name
74
82
  # Parameters:
75
83
  # currency_code : String(4)
@@ -1,3 +1,3 @@
1
1
  module Codecal
2
- VERSION = "0.3.5"
2
+ VERSION = "0.3.6"
3
3
  end
data/lib/codecal.rb CHANGED
@@ -30,7 +30,7 @@ module Codecal
30
30
  errormsg += "parameter is nil. "
31
31
  return {success:false, error: errormsg}
32
32
  end
33
- errormsg += "the type of the code to be encrypted should be Integer. " unless account_id.to_i > 0
33
+ errormsg += "the type of the code to be encrypted should be Integer. " unless all_digits?(account_id.to_s)
34
34
  if errormsg.size == 0
35
35
  cal_array = (account_id.to_i.to_s).split("").map! {|i| i.to_i}
36
36
  {success:true,customer_code: simple_code_calculate(cal_array, @@simple_seed) }
@@ -40,7 +40,7 @@ module Codecal
40
40
  end
41
41
 
42
42
  def code_generate_with_mask(mask, account_id)
43
- errormsg = "mark should be string of letter or number and length should >= 5" if !mask.is_a?(String) || mask.size < 6 || !all_letters_or_digits(mask)
43
+ errormsg = "mark should be string of letter or number and length should >= 5" unless is_legal_mask?(mask)
44
44
  return {success:false, error: errormsg} if errormsg
45
45
  result = simple_code_generate(account_id)
46
46
  return result unless result[:success]
@@ -61,14 +61,22 @@ module Codecal
61
61
  end
62
62
 
63
63
  def validate_masked_code(mask, masked_code)
64
- return false unless masked_code.is_a?(String) && masked_code.size > 5
65
- return false if !mask.is_a?(String) || mask.size < 6 || !all_letters_or_digits(mask)
64
+ return false unless is_legal_masked_code?(masked_code)
65
+ return false unless is_legal_mask?(mask)
66
66
  offset = get_mask_offset(mask)
67
- result = simple_code_generate(unmask_code(offset, masked_code))
67
+ result = simple_code_generate(unmask_code(offset, masked_code)[1..-1].to_i)
68
68
  return false unless result[:success]
69
69
  return masked_code == mask_code(offset, result[:customer_code])
70
70
  end
71
71
 
72
+ def get_unmasked_code(mask, masked_code)
73
+ return false unless is_legal_masked_code?(masked_code)
74
+ return false unless is_legal_mask?(mask)
75
+ offset = get_mask_offset(mask)
76
+ code = unmask_code(offset, masked_code)
77
+ all_digits?(code) ? code : false
78
+ end
79
+
72
80
  def get_currency_name(currency_code)
73
81
  return nil if !currency_code || currency_code.size !=4 || !currency_code.is_a?(String)
74
82
  return Code.new.get_name(currency_code)
@@ -95,10 +103,11 @@ module Codecal
95
103
  end
96
104
 
97
105
  def unmask_code(offset, masked_code)
98
- code = masked_code[1..-1].split("").each_with_index.inject([]) do |code, (c, i)|
106
+ start_code = masked_code[0]
107
+ code = masked_code[1..-1].downcase.split("").each_with_index.inject([]) do |code, (c, i)|
99
108
  code.push(@@BASE_ALPHABET[(@@BASE_ALPHABET.find_index(c) - offset[ i % offset.size ]) % @@BASE_ALPHABET.size])
100
109
  end
101
- code.join.to_i
110
+ code.unshift(start_code).join
102
111
  end
103
112
 
104
113
  def get_mask_offset(mask)
@@ -113,8 +122,23 @@ module Codecal
113
122
  end
114
123
  end
115
124
 
116
- def all_letters_or_digits(str)
125
+ def all_letters_or_digits?(str)
117
126
  str[/[a-zA-Z0-9]+/] == str
118
127
  end
128
+
129
+ def all_digits?(str)
130
+ str[/[0-9]+/] == str
131
+ end
132
+
133
+ def is_legal_mask?(mask)
134
+ return false if !mask.is_a?(String) || mask.size < 6 || !all_letters_or_digits?(mask)
135
+ return true
136
+ end
137
+
138
+ def is_legal_masked_code?(masked_code)
139
+ return false unless masked_code.is_a?(String) && masked_code.size > 5
140
+ return true
141
+ end
142
+
119
143
  end
120
144
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codecal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roger Fang
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-12-12 00:00:00.000000000 Z
11
+ date: 2018-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler