Class: Catalog
- Inherits:
-
Object
show all
- Defined in:
- lib/catalog.rb
Overview
A Catalog is a series of catalog entries, which in turn have entry items. The model more or less represents a two level
Defined Under Namespace
Classes: CollectionObject, Entry, EntryItem, Nomenclature, Timeline
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(targets:) ⇒ Catalog
Returns a new instance of Catalog.
10
11
12
13
14
|
# File 'lib/catalog.rb', line 10
def initialize(targets:)
@catalog_targets = targets
@entries = []
build
end
|
Instance Attribute Details
#catalog_targets ⇒ Object
Each Object is the basis for a Catalog::Entry
5
6
7
|
# File 'lib/catalog.rb', line 5
def catalog_targets
@catalog_targets
end
|
#entries ⇒ Object
8
9
10
|
# File 'lib/catalog.rb', line 8
def entries
@entries
end
|
Class Method Details
.all_dates(source_list, item_list) ⇒ Array
Returns do not uniq! used in counts.
179
180
181
182
183
184
185
186
187
188
189
190
|
# File 'lib/catalog.rb', line 179
def self.all_dates(source_list, item_list)
d = []
item_list.each do |i|
d.push i.nomenclature_date
end
d.compact.uniq.sort
end
|
.chronological_item_sort(entry_items) ⇒ Object
61
62
63
64
|
# File 'lib/catalog.rb', line 61
def self.chronological_item_sort(entry_items)
now = Time.now
entry_items.sort{|a,b| [(a.nomenclature_date || now) ] <=> [(b.nomenclature_date || now) ] }
end
|
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
# File 'lib/catalog.rb', line 136
def self.topic_year_metadata(entry_item_list)
h = {}
entry_item_list.each do |i|
y = i.nomenclature_date&.year
y ||= 'unknown'
i.topics.each do |t|
id = t.metamorphosize.to_global_id.to_s
if h[id]
if h[id][y]
h[id][y] += 1
else
h[id][y] = 1
end
else
h[id] = {y => 1}
end
end
end
h
end
|
.year_hash(date_list) ⇒ Hash
165
166
167
168
169
170
171
172
173
174
175
|
# File 'lib/catalog.rb', line 165
def self.year_hash(date_list)
h = {}
date_list.each do |d|
if h[d.year]
h[d.year] += 1
else
h[d.year] = 1
end
end
h
end
|
158
159
160
161
162
|
# File 'lib/catalog.rb', line 158
def self.year_metadata(source_list, item_list)
::Catalog.year_hash(
::Catalog.all_dates(source_list, item_list)
)
end
|
Instance Method Details
#build ⇒ Object
Handled in individual subclasses
17
18
19
|
# File 'lib/catalog.rb', line 17
def build
false
end
|
#citations ⇒ Object
84
85
86
87
88
89
90
|
# File 'lib/catalog.rb', line 84
def citations
t = []
entries.each do |e|
t += e.all_citations
end
t.uniq.sort{|a, b| (a&.source.cached_nomenclature_date || Time.now) <=> (b&.source.cached_nomenclature_date || Time.now)}.compact
end
|
#entries_sorted ⇒ Object
49
50
51
|
# File 'lib/catalog.rb', line 49
def entries_sorted
end
|
#entry_sort_valid? ⇒ Boolean
53
54
55
56
57
58
59
|
# File 'lib/catalog.rb', line 53
def entry_sort_valid?
i = entries.first&.sort_order
entries.each do |e|
return false if e.sort_order.size != i
end
true
end
|
#items ⇒ Object
41
42
43
|
# File 'lib/catalog.rb', line 41
def items
entries&.collect{|e| e.items}&.flatten || []
end
|
#items_chronologically ⇒ Object
#objects_for_source(source) ⇒ Object
93
94
95
96
97
98
99
|
# File 'lib/catalog.rb', line 93
def objects_for_source(source)
d = []
items.each do |i|
d << i if i.in_source?(source)
end
d.uniq
end
|
#reference_object_global_id ⇒ Object
21
22
23
24
25
26
27
|
# File 'lib/catalog.rb', line 21
def reference_object_global_id
if catalog_targets.size == 1
catalog_targets.first.to_global_id.to_s
else
nil
end
end
|
#reference_object_valid_taxon_name_global_id ⇒ Object
29
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/catalog.rb', line 29
def reference_object_valid_taxon_name_global_id
if catalog_targets.size == 1
o = catalog_targets.first
if o.class.name == 'Otu'
return o.taxon_name&.get_valid_taxon_name&.to_global_id.to_s
elsif o.class.name == 'Protonym'
return o.get_valid_taxon_name&.to_global_id.to_s
end
end
nil
end
|
#sources ⇒ Object
76
77
78
79
80
81
82
|
# File 'lib/catalog.rb', line 76
def sources
t = []
entries.each do |e|
t += e.sources
end
t.uniq.sort{|a, b| (a&.cached_nomenclature_date || Time.now) <=> (b&.cached_nomenclature_date || Time.now)}.compact
end
|
#sources_to_json ⇒ Hash
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
# File 'lib/catalog.rb', line 102
def sources_to_json
h = {
list: {},
year_metadata: ::Catalog.year_metadata(sources, items)
}
sources.each do |s|
h[:list][s.metamorphosize.to_global_id.to_s] = {
cached: s.cached,
year: s.cached_nomenclature_date&.year,
objects: objects_for_source(s).collect{|o| o.object.to_global_id.to_s }
}
end
h
end
|
#topics ⇒ Array of TaxonName
Returns all topics observed in this catalog. For example the index.
68
69
70
71
72
73
74
|
# File 'lib/catalog.rb', line 68
def topics
t = []
entries.each do |e|
t += e.topics
end
t.uniq
end
|
#topics_to_json ⇒ Object
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
# File 'lib/catalog.rb', line 118
def topics_to_json
h = {
list: {}
}
year_data = ::Catalog.topic_year_metadata(items)
topics.each do |t|
id = t.metamorphosize.to_global_id.to_s
h[:list][id] = {
name: t.name,
css_color: t.css_color,
year_metadata: year_data[id]
}
end
h
end
|