Module: Redactable
- Included in:
- RedactedData, RedactedStruct
- Defined in:
- lib/redactable.rb
Overview
A module that adds redacted functionality to a class
Class Method Summary collapse
Instance Method Summary collapse
- #allowed_members ⇒ Object
- #base_name_for_inspection ⇒ Object
- #base_type_for_pp ⇒ Object
- #inspect ⇒ Object (also: #to_s)
-
#pretty_print(q) ⇒ Object
Overrides for pp See github.com/ruby/pp/blob/3d925b5688b8226f653127d990a8dce48bced5fe/lib/pp.rb#L379-L391 rubocop:disable all.
Class Method Details
.included(mod) ⇒ Object
5 6 7 8 9 |
# File 'lib/redactable.rb', line 5 def self.included(mod) class << mod attr_reader :allowed_members end end |
Instance Method Details
#allowed_members ⇒ Object
26 27 28 |
# File 'lib/redactable.rb', line 26 def allowed_members self.class.allowed_members end |
#base_name_for_inspection ⇒ Object
55 56 57 58 59 60 61 |
# File 'lib/redactable.rb', line 55 def base_name_for_inspection if is_a? Struct "struct" else "data" end end |
#base_type_for_pp ⇒ Object
63 64 65 66 67 68 69 |
# File 'lib/redactable.rb', line 63 def base_type_for_pp if is_a? Struct Struct else Data end end |
#inspect ⇒ Object Also known as: to_s
11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/redactable.rb', line 11 def inspect name_or_nil = self.class.name ? " #{self.class.name}" : nil members_h = to_h attributes = members.map do |member| if allowed_members.include?(member) "#{member}=#{members_h[member].inspect}" else "#{member}=[REDACTED]" end end.join(" ") "#<#{base_name_for_inspection}#{name_or_nil} #{attributes}>" end |
#pretty_print(q) ⇒ Object
Overrides for pp See github.com/ruby/pp/blob/3d925b5688b8226f653127d990a8dce48bced5fe/lib/pp.rb#L379-L391 rubocop:disable all
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/redactable.rb', line 33 def pretty_print(q) q.group(1, sprintf("#<%s %s", base_name_for_inspection, PP.mcall(self, Kernel, :class).name), '>') { members_h = to_h q.seplist(PP.mcall(self, base_type_for_pp, :members), lambda { q.text "," }) {|member| q.breakable q.text member.to_s q.text '=' q.group(1) { q.breakable '' if allowed_members.include?(member) q.pp members_h[member] else q.text "[REDACTED]" end } } } end |