Module: Legion::Registry
- Defined in:
- lib/legion/registry.rb,
lib/legion/registry/governance.rb,
lib/legion/registry/persistence.rb,
lib/legion/registry/security_scanner.rb
Defined Under Namespace
Modules: Governance, Persistence
Classes: Entry, SecurityScanner
Constant Summary
collapse
- VALID_STATUSES =
%i[pending_review approved rejected deprecated sunset active].freeze
Class Method Summary
collapse
Class Method Details
.all ⇒ Object
62
63
64
|
# File 'lib/legion/registry.rb', line 62
def all
store.values
end
|
.approve(name, notes: nil) ⇒ Object
94
95
96
97
98
99
100
101
102
|
# File 'lib/legion/registry.rb', line 94
def approve(name, notes: nil)
entry = find_or_raise(name)
update_entry(name, entry,
status: :approved,
airb_status: 'approved',
review_notes: notes,
approved_at: Time.now.utc)
true
end
|
.approved ⇒ Object
74
75
76
|
# File 'lib/legion/registry.rb', line 74
def approved
store.values.select(&:approved?)
end
|
.by_risk_tier(tier) ⇒ Object
78
79
80
|
# File 'lib/legion/registry.rb', line 78
def by_risk_tier(tier)
store.values.select { |e| e.risk_tier == tier.to_s }
end
|
.clear! ⇒ Object
82
83
84
|
# File 'lib/legion/registry.rb', line 82
def clear!
@store = {}
end
|
.deprecate(name, successor: nil, sunset_date: nil) ⇒ Object
113
114
115
116
117
118
119
120
121
|
# File 'lib/legion/registry.rb', line 113
def deprecate(name, successor: nil, sunset_date: nil)
entry = find_or_raise(name)
update_entry(name, entry,
status: :deprecated,
successor: successor,
sunset_date: sunset_date,
deprecated_at: Time.now.utc)
true
end
|
.lookup(name) ⇒ Object
58
59
60
|
# File 'lib/legion/registry.rb', line 58
def lookup(name)
store[name.to_s]
end
|
.pending_reviews ⇒ Object
123
124
125
|
# File 'lib/legion/registry.rb', line 123
def pending_reviews
store.values.select(&:pending_review?)
end
|
.register(entry) ⇒ Object
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/legion/registry.rb', line 42
def register(entry)
raise ArgumentError, "Extension name '#{entry.name}' violates naming convention" if defined?(Governance) && !Governance.check_name(entry.name)
store[entry.name] = entry
if defined?(Governance) && Governance.auto_approve?(entry.risk_tier)
update_entry(entry.name, entry, status: :approved, airb_status: 'approved', approved_at: Time.now.utc)
end
Persistence.persist(store[entry.name]) if defined?(Persistence)
end
|
.reject(name, reason: nil) ⇒ Object
104
105
106
107
108
109
110
111
|
# File 'lib/legion/registry.rb', line 104
def reject(name, reason: nil)
entry = find_or_raise(name)
update_entry(name, entry,
status: :rejected,
reject_reason: reason,
rejected_at: Time.now.utc)
true
end
|
.search(query) ⇒ Object
66
67
68
69
70
71
72
|
# File 'lib/legion/registry.rb', line 66
def search(query)
pattern = query.to_s.downcase
store.values.select do |e|
e.name.downcase.include?(pattern) ||
(e.description || '').downcase.include?(pattern)
end
end
|
.submit_for_review(name) ⇒ Object
88
89
90
91
92
|
# File 'lib/legion/registry.rb', line 88
def submit_for_review(name)
entry = find_or_raise(name)
update_entry(name, entry, status: :pending_review, submitted_at: Time.now.utc)
true
end
|
.unregister(name) ⇒ Object
54
55
56
|
# File 'lib/legion/registry.rb', line 54
def unregister(name)
store.delete(name.to_s)
end
|
.usage_stats(name) ⇒ Object
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
# File 'lib/legion/registry.rb', line 127
def usage_stats(name)
entry = lookup(name.to_s)
return nil unless entry
{
name: entry.name,
version: entry.version,
install_count: 0,
active_instances: 0,
last_updated: nil,
downloads_7d: 0,
downloads_30d: 0
}
end
|