choron_support 0.1.7 → 0.1.8

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
  SHA256:
3
- metadata.gz: d7a4560cc78c0d228363cffeb410e12154e8b87dbc0069f616f902b043d1554a
4
- data.tar.gz: 15605732d079e4d29eadd67297ee004cafd32ed1fd9e97ff6741f83d02828587
3
+ metadata.gz: e930829f733348afe1938ef857477f85bcc15695e67a31a491e50cd65cb3cc42
4
+ data.tar.gz: 41287fc1cdd25345988f03b2ba780e777e8d478413e7f78a907b7931ad362535
5
5
  SHA512:
6
- metadata.gz: 5e70625d4eb7fb2804bddf6f800ea7b87955a1ae9c5fe42a32982c88b38c616fd0a6c6572c7e28b2bc865c12a9ecfceab559d8ba43486702f65b54275ab689e5
7
- data.tar.gz: bf4570b46ddc3a38853dc6083458f831c055421be55024e11e45c5c6e5e104fe4c3dde17de84239fc93ee1beb906c9506aa9f9e0211016bc087a208bfd878029
6
+ metadata.gz: 426090be576fe116a04f6c939c89741868dd5b0b38e495d0fd6b1d613f02af280b8ac6046b0123504323fe2cbb6f7b938e6742863d7dc594626eb4436ccf38a4
7
+ data.tar.gz: fb03ba53c19263bffcb80b3aad9853c87cffd53410a8c3246b512625ca549fa7af15ec618ce2fca50d32a055a5fd92572b61fd8cc5e48008a51542b2ad71f476
data/CHANGELOG.md CHANGED
@@ -2,4 +2,14 @@
2
2
 
3
3
  ## [0.1.0] - 2022-12-04
4
4
 
5
- - Initial release
5
+ * Initial release
6
+
7
+ ## [0.1.8] - 2023-06-04
8
+
9
+ ### `as_props`
10
+
11
+ * もしPropsクラスが見つからなかった場合にエラーをraiseするように修正
12
+
13
+ ### `set_mask_for`
14
+
15
+ * マスク処理のAPIを提供開始
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- choron_support (0.1.7)
4
+ choron_support (0.1.8)
5
5
  activesupport
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -72,6 +72,13 @@ user = User.find(1).as_props
72
72
  #=> { id: 1, name: "tanaka tarou" }
73
73
  ```
74
74
 
75
+ ### Mask
76
+
77
+ モデルに対してマスク処理をかけ、セキュリティを強くするための仕組みです。
78
+
79
+ * 詳細な使い方は [テストファイル](./spec/choron_support/set_mask_for_spec.rb) を参照ください。
80
+ * 詳細な実装は [こちら](./lib/choron_support/set_mask_for.rb) です。
81
+
75
82
  ### Domain
76
83
 
77
84
  * TODO
@@ -45,8 +45,13 @@ module ChoronSupport
45
45
 
46
46
  props_class.new(self)
47
47
  rescue *rescue_errors
48
- if type_symbol.blank?
48
+ # もしmodelを指定しているときはnilを返し、as_jsonを利用させる
49
+ if type_symbol == :model
49
50
  return nil
51
+ end
52
+
53
+ if type_symbol.blank?
54
+ raise ChoronSupport::AsProps::NameError, "Props class not found: #{props_class_name}. Please create props class."
50
55
  else
51
56
  raise ChoronSupport::AsProps::NameError, "Props class not found: #{props_class_name}. Got type symbol: #{type_symbol}."
52
57
  end
@@ -0,0 +1,77 @@
1
+ module ChoronSupport
2
+ module SetMaskFor
3
+ extend ActiveSupport::Concern
4
+
5
+ class NameError < StandardError; end
6
+ class CanNotMaskError < StandardError; end
7
+
8
+ WITH_OUT_MASK_FLAG_VARIABLE_NAME = :__choron_with_out_mask_flag__
9
+ MASKING_VALUES = { string: "****", else: nil }.freeze
10
+
11
+ included do
12
+ def self.set_mask_for(*method_symbols, condition: nil)
13
+ method_symbols.each do |method_symbol|
14
+ self.instance_eval { private attr_accessor WITH_OUT_MASK_FLAG_VARIABLE_NAME }
15
+ define_method(method_symbol) do
16
+ origin = super()
17
+
18
+ # そもそも元の値がnilの場合はそのまま返し、validation等の妨げにならないようにしています
19
+ return nil if origin.nil?
20
+
21
+ type = :else
22
+ case origin
23
+ when String
24
+ type = :string
25
+ end
26
+
27
+ if without_mask?
28
+ origin
29
+ else
30
+ # 型によってマスクする値を変えています
31
+ MASKING_VALUES[type]
32
+ end
33
+ end
34
+
35
+ # マスクの値に関係なく元の値を取得するためのメソッドです。
36
+ define_method("danger_without_mask_#{method_symbol}") do
37
+ val = nil
38
+ self.without_mask do |model|
39
+ val = model.send(method_symbol)
40
+ end
41
+ val
42
+ end
43
+ end
44
+
45
+ unless method_defined?(:danger_without_mask!)
46
+ define_method(:danger_without_mask!) do
47
+ send("#{WITH_OUT_MASK_FLAG_VARIABLE_NAME}=", true)
48
+
49
+ self
50
+ end
51
+ end
52
+
53
+ unless method_defined?(:without_mask)
54
+ define_method(:without_mask) do |&block|
55
+ self.danger_without_mask!
56
+ block.call(self)
57
+ self.wear_mask
58
+ end
59
+ end
60
+
61
+ unless method_defined?(:wear_mask)
62
+ define_method(:wear_mask) do
63
+ send("#{WITH_OUT_MASK_FLAG_VARIABLE_NAME}=", false)
64
+
65
+ self
66
+ end
67
+ end
68
+
69
+ unless method_defined?(:without_mask?)
70
+ define_method(:without_mask?) do
71
+ !!send(WITH_OUT_MASK_FLAG_VARIABLE_NAME)
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ChoronSupport
4
- VERSION = "0.1.7"
4
+ VERSION = "0.1.8"
5
5
  end
@@ -6,6 +6,7 @@ module ChoronSupport
6
6
  queries: "choron_support/scope_query",
7
7
  forms: "choron_support/build_form",
8
8
  props: "choron_support/as_props",
9
+ masks: "choron_support/set_mask_for",
9
10
  }
10
11
  private_constant :SUPPORT_FILES
11
12
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: choron_support
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - mksava
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-05 00:00:00.000000000 Z
11
+ date: 2023-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -211,6 +211,7 @@ files:
211
211
  - lib/choron_support/props/ext/relation.rb
212
212
  - lib/choron_support/queries/base.rb
213
213
  - lib/choron_support/scope_query.rb
214
+ - lib/choron_support/set_mask_for.rb
214
215
  - lib/choron_support/version.rb
215
216
  - sig/choron_support.rbs
216
217
  - tmp/.keep