choron_support 0.1.7 → 0.1.8

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
  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