unidom-common 1.10 → 1.11

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: 82885ef3b635b592845732747e2969ff094fb704
4
- data.tar.gz: 5dfb807730c4303586b7c434bc2adea8198a9614
3
+ metadata.gz: 8d9cd0cf5814089ba939160bb2ad58af74acfab2
4
+ data.tar.gz: e926c6a1f817e200cab79619d80e6fe7be0eef07
5
5
  SHA512:
6
- metadata.gz: a666ed1ac16160fcff279ea5d289b63f4b5b366eb6eef45cae6baf230feff72e0a15768149fd940c2cf9ad80631a64254519c8312e18682a95f7a73da471212e
7
- data.tar.gz: 51499f8975ee71f6c40cb7e01a1c0029f58635b8bc230592290ee319e8745685e40d0bfaa1e0ca08e4c6201fbae18666db354439db65e21b9269176abfab2dde
6
+ metadata.gz: d7e967c73037be4d337f418e70dfd9715bc7e067ba9bd3ba754a452ae7788458ed91ffe66324eb1b8d1d8d50cdfde34970ed9733849bb7f656e25dc05c706123
7
+ data.tar.gz: 9dd384ddeecbcb0cce714086a9d28246d8c969b07a930a933815079e5f3cbdaa4a4231612f2e335d6d395596a36a1198ff4b88e725b4d63553358ed8b0a9a070
data/README.md CHANGED
@@ -32,7 +32,7 @@ gem 'unidom-common'
32
32
  rake db:migrate
33
33
  ```
34
34
  The migration versions starts with 200001.
35
- The migration enabled the PostgreSQL uuid-ossp extension.
35
+ The migrations enabled the PostgreSQL uuid-ossp extension and the pgcrypto extension.
36
36
 
37
37
 
38
38
 
@@ -18,8 +18,6 @@ module Unidom::Common::Concerns::Aes256Cryptor
18
18
 
19
19
  ##
20
20
  # 将密文 encoded 用秘钥 key 进行解密。如:
21
- # decrypt encoded
22
- # 或
23
21
  # decrypt encoded, key: aes256_key
24
22
  def decrypt(encoded, key: nil)
25
23
  self.class.decrypt encoded, key: key
@@ -29,10 +27,18 @@ module Unidom::Common::Concerns::Aes256Cryptor
29
27
  self.class.aes_256_padding
30
28
  end
31
29
 
30
+ ##
31
+ # 将明文 message 用秘钥 key 进行加密,并转换成16进制表达。如:
32
+ # hex_encrypt 'clear text', key: aes256_key
32
33
  def hex_encrypt(message, key: nil)
33
34
  self.class.hex_encrypt message, key: key
34
35
  end
35
36
 
37
+ ##
38
+ # 将明文 message 用秘钥 key 进行解密,并转换成16进制表达。如:
39
+ # hex_decrypt 'clear text'
40
+ # 或
41
+ # hex_decrypt 'clear text', key: aes256_key
36
42
  def hex_decrypt(encoded, key: nil)
37
43
  self.class.hex_decrypt encoded, key: key
38
44
  end
@@ -45,6 +51,11 @@ module Unidom::Common::Concerns::Aes256Cryptor
45
51
  'AES-256-CBC'
46
52
  end
47
53
 
54
+ ##
55
+ # 将明文 message 用秘钥 key 进行加密。如:
56
+ # encrypt 'clear text'
57
+ # 或
58
+ # encrypt 'clear text', key: aes256_key
48
59
  def encrypt(message, key: nil)
49
60
 
50
61
  raise ArgumentError.new('The message argument is required.') if message.blank?
@@ -59,6 +70,9 @@ module Unidom::Common::Concerns::Aes256Cryptor
59
70
 
60
71
  end
61
72
 
73
+ ##
74
+ # 将密文 encoded 用秘钥 key 进行解密。如:
75
+ # decrypt encoded, key: aes256_key
62
76
  def decrypt(encoded, key: nil)
63
77
 
64
78
  raise ArgumentError.new('The encoded argument is required.') if encoded.blank?
@@ -77,10 +91,16 @@ module Unidom::Common::Concerns::Aes256Cryptor
77
91
  respond_to?(:cryption_padding) ? cryption_padding : 9
78
92
  end
79
93
 
94
+ ##
95
+ # 将明文 message 用秘钥 key 进行加密,并转换成16进制表达。如:
96
+ # self.hex_encrypt 'clear text', key: aes256_key
80
97
  def hex_encrypt(message, key: nil)
81
98
  Unidom::Common::Numeration.hex encrypt(message, key: key)
82
99
  end
83
100
 
101
+ ##
102
+ # 将明文 message 用秘钥 key 进行解密,并转换成16进制表达。如:
103
+ # self.hex_decrypt 'clear text', key: aes256_key
84
104
  def hex_decrypt(encoded, key: nil)
85
105
  Unidom::Common::Numeration.hex decrypt(Unidom::Common::Numeration.rev_hex(encoded), key: key)
86
106
  end
@@ -18,6 +18,9 @@ module Unidom::Common::Concerns::ArgumentValidation
18
18
 
19
19
  module ClassMethods
20
20
 
21
+ ##
22
+ # 断言给定的参数 value 非空。如果为空,则抛出 ArgumentError 异常。如:
23
+ # assert_present! :person, person
21
24
  def assert_present!(name, value)
22
25
  raise ArgumentError.new("The #{name} argument is required.") if value.blank?
23
26
  end
@@ -1,3 +1,6 @@
1
+ ##
2
+ # Exact Column 为加密数据提供摘要索引。
3
+
1
4
  module Unidom::Common::Concerns::ExactColumn
2
5
 
3
6
  extend ActiveSupport::Concern
@@ -31,6 +34,8 @@ module Unidom::Common::Concerns::ExactColumn
31
34
 
32
35
  end
33
36
 
37
+ ##
38
+ # 计算精确索引列的值。此方法被 exact_column 方法调用。
34
39
  def exact_signature(klass, name, value, secret_key_base: Rails.application.secrets[:secret_key_base])
35
40
  text = "#{secret_key_base}/#{klass.table_name}##{name}=#{value}"
36
41
  #text = "#{Rails.application.secrets[:secret_key_base]}@#{Rails.root}/#{klass.table_name}##{name}=#{value}"
@@ -21,6 +21,16 @@ module Unidom::Common::Concerns::Md5Digester
21
21
  self.class.digest message, pepper: pepper
22
22
  end
23
23
 
24
+ ##
25
+ # 对明文 message 进行 MD-5 摘要,并以16进制的形式返回, pepper 是用于增加混乱的内容。如:
26
+ # class SomeModel
27
+ # include Unidom::Common::Concerns::Md5Digester
28
+ # def some_method(param_1)
29
+ # hex_digest param_1
30
+ # # 或者
31
+ # hex_digest param_1, pepper: 'my_pepper'
32
+ # end
33
+ # end
24
34
  def hex_digest(message, pepper: nil)
25
35
  self.class.hex_digest message, pepper: pepper
26
36
  end
@@ -29,10 +39,30 @@ module Unidom::Common::Concerns::Md5Digester
29
39
 
30
40
  module ClassMethods
31
41
 
42
+ ##
43
+ # 对明文 message 进行 MD-5 摘要, pepper 是用于增加混乱的内容。如:
44
+ # class SomeModel
45
+ # include Unidom::Common::Concerns::Md5Digester
46
+ # def self.some_method(param_1)
47
+ # digest param_1
48
+ # # 或者
49
+ # digest param_1, pepper: 'my_pepper'
50
+ # end
51
+ # end
32
52
  def digest(message, pepper: nil)
33
53
  message.present? ? Digest::MD5.digest("#{message}_#{Rails.application.secrets[:secret_key_base]}_#{pepper}") : nil
34
54
  end
35
55
 
56
+ ##
57
+ # 对明文 message 进行 MD-5 摘要,并以16进制的形式返回, pepper 是用于增加混乱的内容。如:
58
+ # class SomeModel
59
+ # include Unidom::Common::Concerns::Md5Digester
60
+ # def self.some_method(param_1)
61
+ # hex_digest param_1
62
+ # # 或者
63
+ # hex_digest param_1, pepper: 'my_pepper'
64
+ # end
65
+ # end
36
66
  def hex_digest(message, pepper: nil)
37
67
  message.present? ? Unidom::Common::Numeration.hex(digest(message, pepper: pepper)) : nil
38
68
  end
@@ -1,3 +1,6 @@
1
+ ##
2
+ # Model Extension 是通用的模型扩展关注点,提供参数验证、JSON 注解字段、加密字段等。
3
+
1
4
  module Unidom::Common::Concerns::ModelExtension
2
5
 
3
6
  extend ActiveSupport::Concern
@@ -115,6 +118,10 @@ module Unidom::Common::Concerns::ModelExtension
115
118
  #relation
116
119
  end
117
120
 
121
+ ##
122
+ # 对当前对象进行软删除。软删除之后, #closed_at 会被置为当前时间, #defunct 会被置为 false 。并且对象会被自动保存。如:
123
+ # model = YourModel.find your_id
124
+ # model.soft_destroy
118
125
  def soft_destroy
119
126
  self.closed_at = Time.now
120
127
  self.defunct = true
@@ -143,6 +150,10 @@ module Unidom::Common::Concerns::ModelExtension
143
150
  model.respond_to?(:id) ? model.id : model
144
151
  end
145
152
 
153
+ ##
154
+ # 将模型对象或者 code 转换成 code 。如:
155
+ # to_id(category) # category.id
156
+ # to_id(category.code) # category.id
146
157
  def to_code(code)
147
158
  code.respond_to?(:code) ? code.code : code
148
159
  end
@@ -1,3 +1,6 @@
1
+ ##
2
+ # Notation Column 提供定义 JSON 注解列的方法。
3
+
1
4
  module Unidom::Common::Concerns::NotationColumn
2
5
 
3
6
  extend ActiveSupport::Concern
@@ -35,6 +38,17 @@ module Unidom::Common::Concerns::NotationColumn
35
38
  end
36
39
  end
37
40
 
41
+ ##
42
+ # 定义标注字段的 boolean 型的列。如:
43
+ # class YourModel < ApplicationRecord
44
+ # include Unidom::Common::Concerns::NotationColumn
45
+ # notation_boolean_column :still_alive
46
+ # end
47
+ # 则为 YourModel 的实例生成2个方法:still_alive? 和 still_alive=。
48
+ # model = YourModel.new still_alive: true
49
+ # model.still_alive? # true
50
+ # model.still_alive = false
51
+ # model.still_alive? # false
38
52
  def notation_boolean_column(*names)
39
53
  names.each do |name|
40
54
  name = name.to_s
@@ -1,3 +1,5 @@
1
+ ##
2
+ # Secure Column 提供定义加密列的方法。
1
3
  module Unidom::Common::Concerns::SecureColumn
2
4
 
3
5
  extend ActiveSupport::Concern
@@ -41,6 +43,22 @@ module Unidom::Common::Concerns::SecureColumn
41
43
 
42
44
  module ClassMethods
43
45
 
46
+ ##
47
+ # 配置加密列。如:
48
+ # class YourModel < ApplicationRecord
49
+ # attr_accessor :identity_card_name, :identity_card_address, :passport_name, :passport_address
50
+ # include Unidom::Common::Concerns::SecureColumn
51
+ # secure_column :secure_identity_card, fields: [ :identity_card_name, :identity_card_address ]
52
+ # secure_column :secure_passport, fields: [ :passport_name, :passport_address ]
53
+ # end
54
+ #
55
+ # model = YourModel.create! identity_card_name: '张三', identity_card_address: '地址1',
56
+ # passport_name: '李四', passport_address: '地址2'
57
+ # #identity_card_name 和 #identity_card_address 会被加密后保存到 #secure_identity_card 字段中。
58
+ # #passport_name 和 #passport_address 会被加密后保存到 #secure_passport 字段中。
59
+ # model_2 = YourModel.find model.id
60
+ # model_2.identity_card_name # 张三
61
+ # #secure_identity_card 中存储的加密信息会被自动解密,并存储到 #identity_card_name 和 #identity_card_address 中。
44
62
  def secure_column(name, fields: [])
45
63
 
46
64
  name = name.to_s
@@ -39,10 +39,30 @@ module Unidom::Common::Concerns::Sha1Digester
39
39
 
40
40
  module ClassMethods
41
41
 
42
+ ##
43
+ # 对明文 message 进行 SHA-1 摘要, pepper 是用于增加混乱的内容。如:
44
+ # class SomeModel
45
+ # include Unidom::Common::Concerns::Sha1Digester
46
+ # def self.some_method(param_1)
47
+ # digest param_1
48
+ # # 或者
49
+ # digest param_1, pepper: 'my_pepper'
50
+ # end
51
+ # end
42
52
  def digest(message, pepper: nil)
43
53
  message.present? ? Digest::SHA1.digest("#{message}_#{Rails.application.secrets[:secret_key_base]}_#{pepper}") : nil
44
54
  end
45
55
 
56
+ ##
57
+ # 对明文 message 进行 SHA-1 摘要,并以16进制的形式返回, pepper 是用于增加混乱的内容。如:
58
+ # class SomeModel
59
+ # include Unidom::Common::Concerns::Sha1Digester
60
+ # def self.some_method(param_1)
61
+ # hex_digest param_1
62
+ # # 或者
63
+ # hex_digest param_1, pepper: 'my_pepper'
64
+ # end
65
+ # end
46
66
  def hex_digest(message, pepper: nil)
47
67
  message.present? ? Unidom::Common::Numeration.hex(digest(message, pepper: pepper)) : nil
48
68
  end
@@ -39,10 +39,30 @@ module Unidom::Common::Concerns::Sha256Digester
39
39
 
40
40
  module ClassMethods
41
41
 
42
+ ##
43
+ # 对明文 message 进行 SHA-256 摘要, pepper 是用于增加混乱的内容。如:
44
+ # class SomeModel
45
+ # include Unidom::Common::Concerns::Sha256Digester
46
+ # def self.some_method(param_1)
47
+ # digest param_1
48
+ # # 或者
49
+ # digest param_1, pepper: 'my_pepper'
50
+ # end
51
+ # end
42
52
  def digest(message, pepper: nil)
43
53
  message.present? ? Digest::SHA256.digest("#{message}_#{Rails.application.secrets[:secret_key_base]}_#{pepper}") : nil
44
54
  end
45
55
 
56
+ ##
57
+ # 对明文 message 进行 SHA-256 摘要,并以16进制的形式返回, pepper 是用于增加混乱的内容。如:
58
+ # class SomeModel
59
+ # include Unidom::Common::Concerns::Sha256Digester
60
+ # def self.some_method(param_1)
61
+ # hex_digest param_1
62
+ # # 或者
63
+ # hex_digest param_1, pepper: 'my_pepper'
64
+ # end
65
+ # end
46
66
  def hex_digest(message, pepper: nil)
47
67
  message.present? ? Unidom::Common::Numeration.hex(digest(message, pepper: pepper)) : nil
48
68
  end
@@ -39,10 +39,30 @@ module Unidom::Common::Concerns::Sha2Digester
39
39
 
40
40
  module ClassMethods
41
41
 
42
+ ##
43
+ # 对明文 message 进行 SHA-2 摘要, pepper 是用于增加混乱的内容。如:
44
+ # class SomeModel
45
+ # include Unidom::Common::Concerns::Sha2Digester
46
+ # def self.some_method(param_1)
47
+ # digest param_1
48
+ # # 或者
49
+ # digest param_1, pepper: 'my_pepper'
50
+ # end
51
+ # end
42
52
  def digest(message, pepper: nil)
43
53
  message.present? ? Digest::SHA2.digest("#{message}_#{Rails.application.secrets[:secret_key_base]}_#{pepper}") : nil
44
54
  end
45
55
 
56
+ ##
57
+ # 对明文 message 进行 SHA-2 摘要,并以16进制的形式返回, pepper 是用于增加混乱的内容。如:
58
+ # class SomeModel
59
+ # include Unidom::Common::Concerns::Sha2Digester
60
+ # def self.some_method(param_1)
61
+ # hex_digest param_1
62
+ # # 或者
63
+ # hex_digest param_1, pepper: 'my_pepper'
64
+ # end
65
+ # end
46
66
  def hex_digest(message, pepper: nil)
47
67
  message.present? ? Unidom::Common::Numeration.hex(digest(message, pepper: pepper)) : nil
48
68
  end
@@ -39,10 +39,30 @@ module Unidom::Common::Concerns::Sha384Digester
39
39
 
40
40
  module ClassMethods
41
41
 
42
+ ##
43
+ # 对明文 message 进行 SHA-384 摘要, pepper 是用于增加混乱的内容。如:
44
+ # class SomeModel
45
+ # include Unidom::Common::Concerns::Sha384Digester
46
+ # def self.some_method(param_1)
47
+ # digest param_1
48
+ # # 或者
49
+ # digest param_1, pepper: 'my_pepper'
50
+ # end
51
+ # end
42
52
  def digest(message, pepper: nil)
43
53
  message.present? ? Digest::SHA384.digest("#{message}_#{Rails.application.secrets[:secret_key_base]}_#{pepper}") : nil
44
54
  end
45
55
 
56
+ ##
57
+ # 对明文 message 进行 SHA-384 摘要,并以16进制的形式返回, pepper 是用于增加混乱的内容。如:
58
+ # class SomeModel
59
+ # include Unidom::Common::Concerns::Sha384Digester
60
+ # def self.some_method(param_1)
61
+ # hex_digest param_1
62
+ # # 或者
63
+ # hex_digest param_1, pepper: 'my_pepper'
64
+ # end
65
+ # end
46
66
  def hex_digest(message, pepper: nil)
47
67
  message.present? ? Unidom::Common::Numeration.hex(digest(message, pepper: pepper)) : nil
48
68
  end
@@ -39,10 +39,30 @@ module Unidom::Common::Concerns::Sha512Digester
39
39
 
40
40
  module ClassMethods
41
41
 
42
+ ##
43
+ # 对明文 message 进行 SHA-512 摘要, pepper 是用于增加混乱的内容。如:
44
+ # class SomeModel
45
+ # include Unidom::Common::Concerns::Sha512Digester
46
+ # def self.some_method(param_1)
47
+ # digest param_1
48
+ # # 或者
49
+ # digest param_1, pepper: 'my_pepper'
50
+ # end
51
+ # end
42
52
  def digest(message, pepper: nil)
43
53
  message.present? ? Digest::SHA512.digest("#{message}_#{Rails.application.secrets[:secret_key_base]}_#{pepper}") : nil
44
54
  end
45
55
 
56
+ ##
57
+ # 对明文 message 进行 SHA-512 摘要,并以16进制的形式返回, pepper 是用于增加混乱的内容。如:
58
+ # class SomeModel
59
+ # include Unidom::Common::Concerns::Sha512Digester
60
+ # def self.some_method(param_1)
61
+ # hex_digest param_1
62
+ # # 或者
63
+ # hex_digest param_1, pepper: 'my_pepper'
64
+ # end
65
+ # end
46
66
  def hex_digest(message, pepper: nil)
47
67
  message.present? ? Unidom::Common::Numeration.hex(digest(message, pepper: pepper)) : nil
48
68
  end
@@ -0,0 +1,7 @@
1
+ class EnablePgcryptoExtension < ActiveRecord::Migration
2
+
3
+ def change
4
+ enable_extension 'pgcrypto' unless extension_enabled? 'pgcrypto'
5
+ end
6
+
7
+ end
@@ -17,6 +17,8 @@ module Unidom
17
17
  FROM_DATE = '1970-01-01'.freeze
18
18
  THRU_DATE = '3000-01-01'.freeze
19
19
 
20
+ STATE = 'C'.freeze
21
+
20
22
  mattr_accessor :options
21
23
 
22
24
  ##
@@ -1,5 +1,5 @@
1
1
  module Unidom
2
2
  module Common
3
- VERSION = '1.10'.freeze
3
+ VERSION = '1.11'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unidom-common
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.10'
4
+ version: '1.11'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Topbit Du
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-26 00:00:00.000000000 Z
11
+ date: 2017-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -114,6 +114,7 @@ files:
114
114
  - app/views/layouts/unidom/common/application.html.erb
115
115
  - config/routes.rb
116
116
  - db/migrate/20000101000000_enable_uuid_extension.rb
117
+ - db/migrate/20000101000010_enable_pgcrypto_extension.rb
117
118
  - lib/tasks/common_tasks.rake
118
119
  - lib/unidom/common.rb
119
120
  - lib/unidom/common/data_helper.rb