Class: GemStore

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/gem_store.rb

Constant Summary collapse

PER_PAGE =
100

Instance Method Summary collapse

Instance Method Details

#[](name) ⇒ Object



23
# File 'lib/gem_store.rb', line 23

def [](name) to_versions(RemoteGem.first(name_eq(name))) end

#[]=(name, versions) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/gem_store.rb', line 24

def []=(name, versions)
  versions = versions.split(' ') if versions.is_a?(String)
  versions = versions.map {|v| v.is_a?(YARD::Server::LibraryVersion) ? v.version : v }
  versions = VersionSorter.sort(versions)
  if RemoteGem.where(name_eq(name)).count > 0
    RemoteGem.first(name_eq(name)).update(versions: versions.join(" "))
  else
    RemoteGem.create(name: name, versions: versions.join(" "))
  end
rescue Sequel::DatabaseError => e
  puts "Database error when writing versions (locked?): #{e.message}"
end

#delete(name) ⇒ Object



37
38
39
# File 'lib/gem_store.rb', line 37

def delete(name)
  RemoteGem.where(name_eq(name)).delete
end

#each(&block) ⇒ Object



42
# File 'lib/gem_store.rb', line 42

def each(&block) RemoteGem.each {|row| yield row.name, to_versions(row) } end

#each_of_letter(letter, page, &block) ⇒ Object



50
51
52
53
54
55
56
57
# File 'lib/gem_store.rb', line 50

def each_of_letter(letter, page, &block)
  return enum_for(:each_of_letter, letter, page) unless block_given?

  RemoteGem.where(Sequel.like(:name, "#{letter}%")).
      limit(PER_PAGE, (page - 1) * PER_PAGE).each do |row|
    yield row.name, to_versions(row)
  end
end

#empty?Boolean

Returns:

  • (Boolean)


44
# File 'lib/gem_store.rb', line 44

def empty?; size == 0 end

#find_by(search, page) ⇒ Object



63
64
65
66
67
68
69
70
71
# File 'lib/gem_store.rb', line 63

def find_by(search, page)
  return enum_for(:find_by, search, page) unless block_given?

  RemoteGem.where(Sequel.like(:name, "%#{search}%")).
      order { length(:name).asc }.
      limit(PER_PAGE, (page - 1) * PER_PAGE).each do |row|
    yield row.name, to_versions(row)
  end
end

#has_key?(name) ⇒ Boolean

Returns:

  • (Boolean)


41
# File 'lib/gem_store.rb', line 41

def has_key?(name) !!RemoteGem.first(name_eq(name)) end

#pages_of_find_by(search) ⇒ Object



59
60
61
# File 'lib/gem_store.rb', line 59

def pages_of_find_by(search)
  (RemoteGem.where(Sequel.like(:name, "%#{search}%")).count / PER_PAGE).to_i
end

#pages_of_letter(letter) ⇒ Object



46
47
48
# File 'lib/gem_store.rb', line 46

def pages_of_letter(letter)
  (RemoteGem.where(Sequel.like(:name, "#{letter}%")).count / PER_PAGE).to_i
end

#sizeObject



43
# File 'lib/gem_store.rb', line 43

def size; RemoteGem.count end