Class: Legion::Extensions::MindGrowth::Helpers::ConceptProposal
- Inherits:
-
Object
- Object
- Legion::Extensions::MindGrowth::Helpers::ConceptProposal
- Defined in:
- lib/legion/extensions/mind_growth/helpers/concept_proposal.rb
Constant Summary collapse
- FIELDS =
%i[ id name module_name category description metaphor helpers runner_methods rationale scores status origin created_at evaluated_at built_at ].freeze
Class Method Summary collapse
Instance Method Summary collapse
- #auto_approvable? ⇒ Boolean
- #evaluate!(scores) ⇒ Object
-
#initialize(name:, module_name:, category:, description:, metaphor: nil, helpers: [], runner_methods: [], rationale: nil, origin: :proposer) ⇒ ConceptProposal
constructor
rubocop:disable Metrics/ParameterLists.
- #passing_evaluation? ⇒ Boolean
- #to_h ⇒ Object
- #transition!(new_status) ⇒ Object
Constructor Details
#initialize(name:, module_name:, category:, description:, metaphor: nil, helpers: [], runner_methods: [], rationale: nil, origin: :proposer) ⇒ ConceptProposal
rubocop:disable Metrics/ParameterLists
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/legion/extensions/mind_growth/helpers/concept_proposal.rb', line 17 def initialize(name:, module_name:, category:, description:, metaphor: nil, helpers: [], # rubocop:disable Metrics/ParameterLists runner_methods: [], rationale: nil, origin: :proposer) @id = SecureRandom.uuid @name = name @module_name = module_name @category = category.to_sym @description = description @metaphor = @helpers = helpers # array of { name:, methods: [] } @runner_methods = runner_methods # array of { name:, params: [], returns: '' } @rationale = rationale @scores = {} # { novelty: 0.0..1.0, fit: 0.0..1.0, ... } @status = :proposed @origin = origin @created_at = Time.now.utc @evaluated_at = nil @built_at = nil end |
Class Method Details
.from_h(hash) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/legion/extensions/mind_growth/helpers/concept_proposal.rb', line 64 def self.from_h(hash) h = hash.transform_keys(&:to_sym) proposal = allocate proposal.instance_variable_set(:@id, h[:id]) proposal.instance_variable_set(:@name, h[:name]) proposal.instance_variable_set(:@module_name, h[:module_name]) proposal.instance_variable_set(:@category, h[:category]&.to_sym) proposal.instance_variable_set(:@description, h[:description]) proposal.instance_variable_set(:@metaphor, h[:metaphor]) proposal.instance_variable_set(:@helpers, h[:helpers] || []) proposal.instance_variable_set(:@runner_methods, h[:runner_methods] || []) proposal.instance_variable_set(:@rationale, h[:rationale]) proposal.instance_variable_set(:@scores, (h[:scores] || {}).transform_keys(&:to_sym)) proposal.instance_variable_set(:@status, h[:status]&.to_sym || :proposed) proposal.instance_variable_set(:@origin, h[:origin]&.to_sym || :proposer) proposal.instance_variable_set(:@created_at, h[:created_at] ? Time.parse(h[:created_at].to_s) : Time.now.utc) proposal.instance_variable_set(:@evaluated_at, h[:evaluated_at] ? Time.parse(h[:evaluated_at].to_s) : nil) proposal.instance_variable_set(:@built_at, h[:built_at] ? Time.parse(h[:built_at].to_s) : nil) proposal end |
Instance Method Details
#auto_approvable? ⇒ Boolean
48 49 50 51 52 |
# File 'lib/legion/extensions/mind_growth/helpers/concept_proposal.rb', line 48 def auto_approvable? return false if @scores.empty? Helpers::Constants::EVALUATION_DIMENSIONS.all? { |dim| (@scores[dim] || 0) >= Helpers::Constants::AUTO_APPROVE_THRESHOLD } end |
#evaluate!(scores) ⇒ Object
36 37 38 39 40 |
# File 'lib/legion/extensions/mind_growth/helpers/concept_proposal.rb', line 36 def evaluate!(scores) @scores = scores @evaluated_at = Time.now.utc @status = passing_evaluation? ? :approved : :rejected end |
#passing_evaluation? ⇒ Boolean
42 43 44 45 46 |
# File 'lib/legion/extensions/mind_growth/helpers/concept_proposal.rb', line 42 def passing_evaluation? return false if @scores.empty? Helpers::Constants::EVALUATION_DIMENSIONS.all? { |dim| (@scores[dim] || 0) >= Helpers::Constants::MIN_DIMENSION_SCORE } end |
#to_h ⇒ Object
85 86 87 |
# File 'lib/legion/extensions/mind_growth/helpers/concept_proposal.rb', line 85 def to_h FIELDS.to_h { |f| [f, send(f)] } end |
#transition!(new_status) ⇒ Object
54 55 56 57 58 59 60 61 62 |
# File 'lib/legion/extensions/mind_growth/helpers/concept_proposal.rb', line 54 def transition!(new_status) new_status = new_status.to_sym unless Helpers::Constants::PROPOSAL_STATUSES.include?(new_status) raise ArgumentError, "invalid status: #{new_status} (valid: #{Helpers::Constants::PROPOSAL_STATUSES.join(', ')})" end @status = new_status @built_at = Time.now.utc if new_status == :passing end |