Class: RailsConsolePro::Services::SnippetRepository

Inherits:
Object
  • Object
show all
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

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.expand_path(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: 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

#clearObject



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 = normalize_tags(tags)

  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