Class: RailsConsolePro::Services::SnippetRepository
- Inherits:
-
Object
- Object
- RailsConsolePro::Services::SnippetRepository
- Includes:
- Enumerable
- Defined in:
- lib/rails_console_pro/services/snippet_repository.rb
Overview
Persistence layer for console snippets
Constant Summary collapse
- DEFAULT_LIMIT =
20
Instance Method Summary collapse
- #add(body:, id: nil, tags: nil, description: nil, favorite: false, metadata: nil) ⇒ Object
- #all(limit: nil) ⇒ Object
- #clear ⇒ Object
- #delete(id) ⇒ Object
- #each(&block) ⇒ Object
- #find(id) ⇒ Object
-
#initialize(store_path:) ⇒ SnippetRepository
constructor
A new instance of SnippetRepository.
- #search(term: nil, tags: nil, limit: nil) ⇒ Object
- #update(id, **attributes) ⇒ Object
Constructor Details
#initialize(store_path:) ⇒ SnippetRepository
Returns a new instance of SnippetRepository.
15 16 17 |
# File 'lib/rails_console_pro/services/snippet_repository.rb', line 15 def initialize(store_path:) @store_path = File.(store_path) end |
Instance Method Details
#add(body:, id: nil, tags: nil, description: nil, favorite: false, metadata: nil) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/rails_console_pro/services/snippet_repository.rb', line 47 def add(body:, id: nil, tags: nil, description: nil, favorite: false, metadata: nil) snippet = Snippets::Snippet.new( id: id || generate_id(description: description, body: body), body: body, tags: , description: description, created_at: Time.now, updated_at: Time.now, favorite: favorite, metadata: ) persist(snippet) snippet end |
#all(limit: nil) ⇒ Object
23 24 25 26 |
# File 'lib/rails_console_pro/services/snippet_repository.rb', line 23 def all(limit: nil) snippets = load_snippets.values.sort_by(&:updated_at).reverse limit ? snippets.first(limit) : snippets end |
#clear ⇒ Object
82 83 84 |
# File 'lib/rails_console_pro/services/snippet_repository.rb', line 82 def clear write_data({}) end |
#delete(id) ⇒ Object
72 73 74 75 76 77 78 79 80 |
# File 'lib/rails_console_pro/services/snippet_repository.rb', line 72 def delete(id) normalized_id = normalize_id(id) data = load_data return false unless data.key?(normalized_id) data.delete(normalized_id) write_data(data) true end |
#each(&block) ⇒ Object
19 20 21 |
# File 'lib/rails_console_pro/services/snippet_repository.rb', line 19 def each(&block) all.each(&block) end |
#find(id) ⇒ Object
28 29 30 |
# File 'lib/rails_console_pro/services/snippet_repository.rb', line 28 def find(id) load_snippets[normalize_id(id)] end |
#search(term: nil, tags: nil, limit: nil) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/rails_console_pro/services/snippet_repository.rb', line 32 def search(term: nil, tags: nil, limit: nil) snippets = all term_value = normalize_query(term) tag_value = () filtered = snippets.select do |snippet| snippet.matches?(term: term_value, tags: tag_value) end { results: limit ? filtered.first(limit) : filtered, total_count: filtered.size } end |
#update(id, **attributes) ⇒ Object
63 64 65 66 67 68 69 70 |
# File 'lib/rails_console_pro/services/snippet_repository.rb', line 63 def update(id, **attributes) snippet = find(id) return unless snippet updated_snippet = snippet.with(**attributes.merge(updated_at: Time.now)) persist(updated_snippet) updated_snippet end |