Class: RailsConsoleAi::Memory
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- RailsConsoleAi::Memory
- Defined in:
- app/models/rails_console_ai/memory.rb
Constant Summary collapse
- STATUS_PROPOSED =
'proposed'.freeze
- STATUS_APPROVED =
'approved'.freeze
- STATUSES =
[STATUS_PROPOSED, STATUS_APPROVED].freeze
Class Method Summary collapse
Instance Method Summary collapse
- #approve!(approved_by:) ⇒ Object
- #approved? ⇒ Boolean
- #content=(value) ⇒ Object
-
#description ⇒ Object
Memories don't have a separate description vs body — the markdown body IS the memory.
- #parsed ⇒ Object
- #proposed? ⇒ Boolean
- #tags ⇒ Object
- #to_hash ⇒ Object
-
#update_with_version!(attrs, edited_by: nil, change_note: nil, preserve_approval: false) ⇒ Object
Assigns attrs, saves, and records one MemoryVersion snapshot.
Class Method Details
.connection ⇒ Object
28 29 30 31 32 33 34 35 36 |
# File 'app/models/rails_console_ai/memory.rb', line 28 def self.connection klass = RailsConsoleAi.configuration.connection_class if klass klass = Object.const_get(klass) if klass.is_a?(String) klass.connection else super end end |
.record_use!(id) ⇒ Object
55 56 57 58 59 60 61 62 63 64 |
# File 'app/models/rails_console_ai/memory.rb', line 55 def self.record_use!(id) where(id: id).update_all([ 'use_count = COALESCE(use_count, 0) + 1, last_used_at = ?', Time.now.utc ]) true rescue ::ActiveRecord::ActiveRecordError => e RailsConsoleAi.logger.warn("RailsConsoleAi::Memory.record_use!(#{id.inspect}) failed: #{e.}") false end |
Instance Method Details
#approve!(approved_by:) ⇒ Object
109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'app/models/rails_console_ai/memory.rb', line 109 def approve!(approved_by:) raise ArgumentError, 'approved_by is required' if approved_by.to_s.strip.empty? update_with_version!( { status: STATUS_APPROVED, approved_by: approved_by, approved_at: Time.now.utc }, edited_by: approved_by, change_note: "Approved by #{approved_by}", preserve_approval: true ) end |
#approved? ⇒ Boolean
53 |
# File 'app/models/rails_console_ai/memory.rb', line 53 def approved?; status.to_s == STATUS_APPROVED; end |
#content=(value) ⇒ Object
42 43 44 45 |
# File 'app/models/rails_console_ai/memory.rb', line 42 def content=(value) @parsed = nil super end |
#description ⇒ Object
Memories don't have a separate description vs body — the markdown body IS the memory. Parser exposes it under 'description'.
49 |
# File 'app/models/rails_console_ai/memory.rb', line 49 def description; parsed['description']; end |
#parsed ⇒ Object
38 39 40 |
# File 'app/models/rails_console_ai/memory.rb', line 38 def parsed @parsed ||= (RailsConsoleAi::Tools::MemoryTools.parse(content.to_s) || {}) end |
#proposed? ⇒ Boolean
52 |
# File 'app/models/rails_console_ai/memory.rb', line 52 def proposed?; status.to_s == STATUS_PROPOSED; end |
#tags ⇒ Object
50 |
# File 'app/models/rails_console_ai/memory.rb', line 50 def ; Array(parsed['tags']); end |
#to_hash ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'app/models/rails_console_ai/memory.rb', line 66 def to_hash { 'id' => id, 'name' => name, 'description' => description, 'tags' => , 'content' => content, 'status' => status, 'approved_by' => approved_by, 'approved_at' => approved_at, 'use_count' => use_count, 'last_used_at' => last_used_at, 'source' => :db, 'updated_at' => updated_at } end |
#update_with_version!(attrs, edited_by: nil, change_note: nil, preserve_approval: false) ⇒ Object
Assigns attrs, saves, and records one MemoryVersion snapshot.
Any change to content reverts approval back to "proposed" unless
preserve_approval: true is passed (approve! does this).
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'app/models/rails_console_ai/memory.rb', line 86 def update_with_version!(attrs, edited_by: nil, change_note: nil, preserve_approval: false) transaction do assign_attributes(attrs) if !preserve_approval && approved? && changes.key?('content') self.status = STATUS_PROPOSED self.approved_by = nil self.approved_at = nil end save! RailsConsoleAi::MemoryVersion.create!( memory_id: id, name: name, content: content, status: status, edited_by: edited_by, change_note: change_note ) end self end |