Class: Tracebook::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/tracebook/config.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfig

Returns a new instance of Config.



23
24
25
26
27
28
29
30
31
# File 'lib/tracebook/config.rb', line 23

def initialize
  @chat_class = "Chat"
  @message_class = "Message"
  @default_currency = "USD"
  @per_page = 25
  @actor_display = nil
  @redaction_patterns = []
  @custom_redactors = []
end

Instance Attribute Details

#actor_displayProc?

Returns lambda to format actor display name.

Returns:

  • (Proc, nil)

    lambda to format actor display name



18
19
20
# File 'lib/tracebook/config.rb', line 18

def actor_display
  @actor_display
end

#chat_classString

Returns class name of the host app's Chat model (default: "Chat").

Returns:

  • (String)

    class name of the host app's Chat model (default: "Chat")



6
7
8
# File 'lib/tracebook/config.rb', line 6

def chat_class
  @chat_class
end

#custom_redactorsArray<Proc> (readonly)

Returns custom redaction callables.

Returns:

  • (Array<Proc>)

    custom redaction callables



21
22
23
# File 'lib/tracebook/config.rb', line 21

def custom_redactors
  @custom_redactors
end

#default_currencyString

Returns currency code for cost calculations (default: "USD").

Returns:

  • (String)

    currency code for cost calculations (default: "USD")



12
13
14
# File 'lib/tracebook/config.rb', line 12

def default_currency
  @default_currency
end

#message_classString

Returns class name of the host app's Message model (default: "Message").

Returns:

  • (String)

    class name of the host app's Message model (default: "Message")



9
10
11
# File 'lib/tracebook/config.rb', line 9

def message_class
  @message_class
end

#per_pageInteger

Returns items per page in dashboard (default: 25).

Returns:

  • (Integer)

    items per page in dashboard (default: 25)



15
16
17
# File 'lib/tracebook/config.rb', line 15

def per_page
  @per_page
end

Instance Method Details

#build_redaction_pipelineObject (private)



107
108
109
110
111
112
# File 'lib/tracebook/config.rb', line 107

def build_redaction_pipeline
  patterns = @redaction_patterns.map do |p|
    p.is_a?(Symbol) ? Redaction::PATTERNS.fetch(p) : p
  end
  Redaction::Pipeline.new(patterns: patterns, custom_redactors: @custom_redactors)
end

#chat_modelClass

Returns the resolved chat model class.

Returns:

  • (Class)

    the resolved chat model class



96
97
98
# File 'lib/tracebook/config.rb', line 96

def chat_model
  @chat_class.constantize
end

#finalize!Object



85
86
87
88
89
90
91
92
93
# File 'lib/tracebook/config.rb', line 85

def finalize!
  return if finalized?

  @redaction_patterns.freeze
  @custom_redactors.freeze
  @redaction_pipeline = redaction_pipeline
  @finalized = true
  freeze
end

#finalized?Boolean

Returns:

  • (Boolean)


81
82
83
# File 'lib/tracebook/config.rb', line 81

def finalized?
  @finalized == true
end

#message_modelClass

Returns the resolved message model class.

Returns:

  • (Class)

    the resolved message model class



101
102
103
# File 'lib/tracebook/config.rb', line 101

def message_model
  @message_class.constantize
end

#redact(*names) ⇒ Object

Enable named redaction patterns.

Examples:

config.redact :email, :phone, :ssn, :credit_card


37
38
39
40
41
42
43
44
45
46
47
# File 'lib/tracebook/config.rb', line 37

def redact(*names)
  names.each do |name|
    if Redaction::GROUPS.key?(name)
      redact_group(name)
    elsif Redaction::PATTERNS.key?(name)
      @redaction_patterns << name unless @redaction_patterns.include?(name)
    else
      raise ArgumentError, "Unknown redaction pattern: #{name}. Available: #{(Redaction::PATTERNS.keys + Redaction::GROUPS.keys).join(", ")}"
    end
  end
end

#redact_group(group_name) ⇒ Object

Enable a named group of patterns.

Examples:

config.redact_group :api_keys


53
54
55
56
57
58
# File 'lib/tracebook/config.rb', line 53

def redact_group(group_name)
  patterns = Redaction::GROUPS.fetch(group_name) do
    raise ArgumentError, "Unknown redaction group: #{group_name}. Available: #{Redaction::GROUPS.keys.join(", ")}"
  end
  patterns.each { |name| redact(name) }
end

#redact_pattern(regex, replacement, name: nil) ⇒ Object

Add a custom regex pattern for redaction.

Examples:

config.redact_pattern(/policy[:\s]*\d{10}/i, "[POLICY_NUMBER]", name: "policy_number")


64
65
66
67
68
69
70
71
# File 'lib/tracebook/config.rb', line 64

def redact_pattern(regex, replacement, name: nil)
  pattern = Redaction::Pattern.new(
    name: name || "custom_#{@redaction_patterns.size}",
    regex: regex,
    replacement: replacement
  )
  @redaction_patterns << pattern
end

#redaction_pipelineRedaction::Pipeline

Build the redaction pipeline from configured patterns and custom redactors. Memoized after first call (safe because config is frozen after finalize!).

Returns:



77
78
79
# File 'lib/tracebook/config.rb', line 77

def redaction_pipeline
  @redaction_pipeline || build_redaction_pipeline
end