Class: PromptCanary::Version

Inherits:
Object
  • Object
show all
Defined in:
lib/prompt_canary/version_object.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name:, model:, system:, rollout:, predicate: nil, rollback_rules: []) ⇒ Version

Returns a new instance of Version.



9
10
11
12
13
14
15
16
# File 'lib/prompt_canary/version_object.rb', line 9

def initialize(name:, model:, system:, rollout:, predicate: nil, rollback_rules: [])
  @name = name
  @model = model
  @system = system
  @rollout = rollout
  @predicate = predicate
  @rollback_rules = rollback_rules
end

Instance Attribute Details

#modelObject (readonly)

Returns the value of attribute model.



7
8
9
# File 'lib/prompt_canary/version_object.rb', line 7

def model
  @model
end

#nameObject (readonly)

Returns the value of attribute name.



7
8
9
# File 'lib/prompt_canary/version_object.rb', line 7

def name
  @name
end

#rollback_rulesObject (readonly)

Returns the value of attribute rollback_rules.



7
8
9
# File 'lib/prompt_canary/version_object.rb', line 7

def rollback_rules
  @rollback_rules
end

#rolloutObject (readonly)

Returns the value of attribute rollout.



7
8
9
# File 'lib/prompt_canary/version_object.rb', line 7

def rollout
  @rollout
end

#systemObject (readonly)

Returns the value of attribute system.



7
8
9
# File 'lib/prompt_canary/version_object.rb', line 7

def system
  @system
end

Instance Method Details

#demote!Object



51
52
53
54
55
# File 'lib/prompt_canary/version_object.rb', line 51

def demote!
  @demoted = true
  @previous_rollout = @rollout.fetch(:percent, 0)
  @rollout = { percent: 0 }
end

#demoted?Boolean

Returns:

  • (Boolean)


47
48
49
# File 'lib/prompt_canary/version_object.rb', line 47

def demoted?
  @demoted || false
end

#matches_predicate?(context) ⇒ Boolean

Returns:

  • (Boolean)


26
27
28
29
30
31
32
# File 'lib/prompt_canary/version_object.rb', line 26

def matches_predicate?(context)
  return false unless @predicate

  @predicate.call(context)
rescue StandardError
  false
end

#partial_rollout?Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/prompt_canary/version_object.rb', line 34

def partial_rollout?
  rollout.fetch(:percent, 0).positive?
end

#predicate?Boolean

Returns:

  • (Boolean)


22
23
24
# File 'lib/prompt_canary/version_object.rb', line 22

def predicate?
  !@predicate.nil?
end

#restore!Object



57
58
59
60
61
# File 'lib/prompt_canary/version_object.rb', line 57

def restore!
  @demoted = false
  @rollout = { percent: @previous_rollout || 0 }
  @previous_rollout = nil
end

#routes?(key) ⇒ Boolean

Returns:

  • (Boolean)


38
39
40
41
# File 'lib/prompt_canary/version_object.rb', line 38

def routes?(key)
  roll = Zlib.crc32(key.to_s) % 100
  roll < rollout.fetch(:percent, 0)
end

#set_rollout!(percent) ⇒ Object



43
44
45
# File 'lib/prompt_canary/version_object.rb', line 43

def set_rollout!(percent)
  @rollout = { percent: percent }
end

#system_for(args = {}) ⇒ Object



18
19
20
# File 'lib/prompt_canary/version_object.rb', line 18

def system_for(args = {})
  @system.respond_to?(:call) ? @system.call(args) : @system
end