Class: Apress::Documentation::Storage::BaseStorage

Inherits:
Object
  • Object
show all
Defined in:
lib/apress/documentation/storage/base_storage.rb

Overview

Private: AbstractClass, Базовый класс хранилища

описывает методы аттрибутов для сериализации в json формата: {

{
  "attr_0": send(:attr_0),
  "attr_1": send(:attr_1),
  ....
}

}

Direct Known Subclasses

Document, SwaggerDocument

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#slugObject (readonly)

Public: Составной слаг, используется как URL



16
17
18
# File 'lib/apress/documentation/storage/base_storage.rb', line 16

def slug
  @slug
end

Class Method Details

.json_attr(*method_names) ⇒ Object

Public: Задает аттрибуты для сериализации в json



23
24
25
26
27
# File 'lib/apress/documentation/storage/base_storage.rb', line 23

def self.json_attr(*method_names)
  json_attr_names.concat(method_names.map(&:to_s))

  attr_accessor(*method_names)
end

.json_attr_namesObject



18
19
20
# File 'lib/apress/documentation/storage/base_storage.rb', line 18

def self.json_attr_names
  @json_attr_names ||= []
end

Instance Method Details

#as_json(options = {}) ⇒ Object

Public: Сериализует объект в JSON



30
31
32
33
34
35
36
# File 'lib/apress/documentation/storage/base_storage.rb', line 30

def as_json(options = {})
  self.class.json_attr_names.each_with_object({}) do |attr_name, json|
    value = send(attr_name)

    json[attr_name] = value if value
  end
end

#assign(options = {}) ⇒ Object

Public: задает аттрибуты на основе хеша



39
40
41
42
43
44
45
46
47
# File 'lib/apress/documentation/storage/base_storage.rb', line 39

def assign(options = {})
  options.each do |key, value|
    unless self.class.json_attr_names.include?(key.to_s)
      raise "Undefined attribute #{key}, allowed attributes are #{self.class.json_attr_names}"
    end

    send("#{key}=", value)
  end
end

#dependencies(reverse: false) ⇒ Object

Public: находит зависимости для текущего документа

Arguments:

reverse - флаг для отпеределения какой тип зависимостей нужно вернуть
  возможные значения
    - false (default) - документы, от которых зависит текущий документ (AKA зависимости self)
    - true - документы, которые зависят от текущего (AKA потребители self)

Returns Array of Pairs - [[doc1, doc2], [doc1, doc2]]



75
76
77
78
79
80
81
82
83
84
# File 'lib/apress/documentation/storage/base_storage.rb', line 75

def dependencies(reverse: false)
  @dependencies ||= Hash.new do |hash, key|
    hash[key] = Storage::DependencyGraph.instance.dependencies(
      self,
      reverse: key
    )
  end

  @dependencies[reverse]
end

#eql?(other) ⇒ Boolean Also known as: ==

Returns:

  • (Boolean)


49
50
51
# File 'lib/apress/documentation/storage/base_storage.rb', line 49

def eql?(other)
  slug == other.to_s
end

#hashObject



58
59
60
# File 'lib/apress/documentation/storage/base_storage.rb', line 58

def hash
  slug.hash
end

#inspectObject



62
63
64
# File 'lib/apress/documentation/storage/base_storage.rb', line 62

def inspect
  "<#{self.class} slug = #{slug}>"
end

#to_sObject



54
55
56
# File 'lib/apress/documentation/storage/base_storage.rb', line 54

def to_s
  slug.to_s
end