Class: Entitlements::Data::People::YAML
- Inherits:
-
Object
- Object
- Entitlements::Data::People::YAML
- Includes:
- Contracts::Core
- Defined in:
- lib/entitlements.rb,
lib/entitlements/data/people/yaml.rb
Constant Summary collapse
- C =
::Contracts
- PARAMETERS =
Parameters
{ "filename" => { required: true, type: String } }
Class Method Summary collapse
- .fingerprint(config) ⇒ Object
- .new_from_config(config) ⇒ Object
- .validate_config!(key, config) ⇒ Object
Instance Method Summary collapse
-
#initialize(filename:, people: nil) ⇒ YAML
constructor
A new instance of YAML.
- #read(uid = nil) ⇒ Object
Constructor Details
#initialize(filename:, people: nil) ⇒ YAML
Returns a new instance of YAML.
65 66 67 68 69 |
# File 'lib/entitlements/data/people/yaml.rb', line 65 def initialize(filename:, people: nil) @filename = filename @people = people @people_downcase = nil end |
Class Method Details
.fingerprint(config) ⇒ Object
25 26 27 |
# File 'lib/entitlements/data/people/yaml.rb', line 25 def self.fingerprint(config) PARAMETERS.keys.map { |key| config[key].inspect }.join("||") end |
.new_from_config(config) ⇒ Object
38 39 40 |
# File 'lib/entitlements/data/people/yaml.rb', line 38 def self.new_from_config(config) new(filename: config.fetch("filename")) end |
.validate_config!(key, config) ⇒ Object
51 52 53 54 |
# File 'lib/entitlements/data/people/yaml.rb', line 51 def self.validate_config!(key, config) text = "YAML people configuration for data source #{key.inspect}" Entitlements::Util::Util.validate_attr!(PARAMETERS, config, text) end |
Instance Method Details
#read(uid = nil) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/entitlements/data/people/yaml.rb', line 77 def read(uid = nil) @people ||= begin Entitlements.logger.debug "Loading people from #{filename.inspect}" raw_person_data = ::YAML.load(File.read(filename)).to_h raw_person_data.map do |id, data| [id, Entitlements::Models::Person.new(uid: id, attributes: data)] end.to_h end return @people if uid.nil? # Requested a specific user ID @people_downcase ||= @people.map { |person_uid, data| [person_uid.downcase, person_uid] }.to_h unless @people_downcase.key?(uid.downcase) raise Entitlements::Data::People::NoSuchPersonError, "read(#{uid.inspect}) matched no known person" end @people[@people_downcase[uid.downcase]] end |