main
 1# frozen_string_literal: true
 2
 3module Saml
 4  module Kit
 5    module Cli
 6      class YamlRegistry < ::Saml::Kit::DefaultRegistry
 7        def initialize(path)
 8          @items = YAML::Store.new(path)
 9        end
10
11        def register(metadata)
12          with_transaction do |db|
13            db[metadata.entity_id] = metadata.to_xml
14          end
15          metadata
16        end
17
18        def metadata_for(entity_id)
19          with_transaction do |db|
20            xml = db[entity_id]
21            return nil if xml.nil?
22            Saml::Kit::Metadata.from(xml)
23          end
24        end
25
26        def each
27          with_transaction do |db|
28            db.roots.each do |key|
29              yield metadata_for(key)
30            end
31          end
32        end
33
34        private
35
36        def with_transaction
37          return yield @items if @in_transaction
38          @items.transaction do
39            begin
40              @in_transaction = true
41              yield @items
42            ensure
43              @in_transaction = false
44            end
45          end
46        end
47      end
48    end
49  end
50end