Class: HALPresenter::CurieCollection

Inherits:
Object
  • Object
show all
Defined in:
lib/hal_presenter/curie_collection.rb

Defined Under Namespace

Classes: CurieWithReferences

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeCurieCollection

Returns a new instance of CurieCollection.



74
75
76
# File 'lib/hal_presenter/curie_collection.rb', line 74

def initialize
  @collection = []
end

Instance Attribute Details

#collectionObject (readonly)

Returns the value of attribute collection.



63
64
65
# File 'lib/hal_presenter/curie_collection.rb', line 63

def collection
  @collection
end

Class Method Details

.extract_from!(hash, resolve_collisions: true) ⇒ Object



65
66
67
68
69
70
71
72
# File 'lib/hal_presenter/curie_collection.rb', line 65

def self.extract_from!(hash, resolve_collisions: true)
  new.tap do |curies|
    curies.add_curies(hash[:_links]&.delete(:curies))
    curies.send(:add_references, hash[:_links], :links)
    curies.send(:add_references, hash[:_embedded], :embedded)
    curies.resolve_collisions! if resolve_collisions
  end
end

Instance Method Details

#add_curies(curies) ⇒ Object



78
79
80
81
82
83
84
85
# File 'lib/hal_presenter/curie_collection.rb', line 78

def add_curies(curies)
  return unless curies

  curies.each do |curie|
    next if find(curie[:name])
    collection << CurieWithReferences.new(curie)
  end
end

#eachObject



111
112
113
114
# File 'lib/hal_presenter/curie_collection.rb', line 111

def each
  return collection.each unless block_given?
  collection.each { |c| yield c }
end

#empty?Boolean

Returns:

  • (Boolean)


107
108
109
# File 'lib/hal_presenter/curie_collection.rb', line 107

def empty?
  collection.empty?
end

#generate_curie_name(base) ⇒ Object



87
88
89
90
91
# File 'lib/hal_presenter/curie_collection.rb', line 87

def generate_curie_name(base)
  name = "#{base}0"
  name = name.next while find(name.to_sym)
  name.to_sym
end

#resolve_collisions!Object



93
94
95
96
97
98
99
100
101
# File 'lib/hal_presenter/curie_collection.rb', line 93

def resolve_collisions!
  collection.reverse_each do |curie|
    next if collection.none? { |c| c.name == curie.name && c.href != curie.href }
    new_name = generate_curie_name(curie.name)
    curie.rename new_name
  end

  self
end

#to_aObject



103
104
105
# File 'lib/hal_presenter/curie_collection.rb', line 103

def to_a
  collection.map(&:to_h)
end