class Jazzy::SourceDeclaration::AccessControlLevel
Constants
- LEVELS
Order matters
- LEVELS_INDEX
Attributes
level[R]
Public Class Methods
from_accessibility(accessibility)
click to toggle source
From a SourceKit accessibility string
# File lib/jazzy/source_declaration/access_control_level.rb, line 20 def self.from_accessibility(accessibility) return nil if accessibility.nil? if accessibility =~ /^source\.lang\.swift\.accessibility\.(.*)$/ && (matched = Regexp.last_match(1).to_sym) && !LEVELS_INDEX[matched].nil? return new(matched) end raise "cannot initialize AccessControlLevel with '#{accessibility}'" end
from_doc(doc)
click to toggle source
From a SourceKit declaration hash
# File lib/jazzy/source_declaration/access_control_level.rb, line 33 def self.from_doc(doc) return AccessControlLevel.internal if implicit_deinit?(doc) from_documentation_attribute(doc) || from_accessibility(doc['key.accessibility']) || from_doc_explicit_declaration(doc) || AccessControlLevel.internal # fallback on internal ACL end
from_doc_explicit_declaration(doc)
click to toggle source
From a Swift declaration
# File lib/jazzy/source_declaration/access_control_level.rb, line 49 def self.from_doc_explicit_declaration(doc) declaration = doc['key.parsed_declaration'] LEVELS.each do |level| if declaration =~ /\b#{level}\b/ return send(level) end end nil end
from_documentation_attribute(doc)
click to toggle source
From a @_documentation(visibility:) attribute
# File lib/jazzy/source_declaration/access_control_level.rb, line 70 def self.from_documentation_attribute(doc) if doc['key.annotated_decl'] =~ /@_documentation\(\s*visibility\s*:\s*(\w+)/ from_human_string(Regexp.last_match[1]) end end
from_human_string(string)
click to toggle source
From a config instruction
# File lib/jazzy/source_declaration/access_control_level.rb, line 60 def self.from_human_string(string) normalized = string.to_s.downcase.to_sym if LEVELS_INDEX[normalized].nil? raise "cannot initialize AccessControlLevel with '#{string}'" end send(normalized) end
implicit_deinit?(doc)
click to toggle source
Workaround ‘deinit` being always technically public
# File lib/jazzy/source_declaration/access_control_level.rb, line 43 def self.implicit_deinit?(doc) doc['key.name'] == 'deinit' && from_doc_explicit_declaration(doc).nil? end
new(level)
click to toggle source
# File lib/jazzy/source_declaration/access_control_level.rb, line 15 def initialize(level) @level = level end
Public Instance Methods
<=>(other)
click to toggle source
Comparing access levels
# File lib/jazzy/source_declaration/access_control_level.rb, line 86 def <=>(other) LEVELS_INDEX[level] <=> LEVELS_INDEX[other.level] end
excluded_levels()
click to toggle source
# File lib/jazzy/source_declaration/access_control_level.rb, line 94 def excluded_levels LEVELS_INDEX.select { |_, v| v < LEVELS_INDEX[level] }.keys end
included_levels()
click to toggle source
# File lib/jazzy/source_declaration/access_control_level.rb, line 90 def included_levels LEVELS_INDEX.select { |_, v| v >= LEVELS_INDEX[level] }.keys end