main
 1# frozen_string_literal: true
 2
 3module Saml
 4  module Kit
 5    # This module is responsible for
 6    # providing an API to build a
 7    # document object, xml, or builder class.
 8    module Buildable
 9      extend ActiveSupport::Concern
10
11      class_methods do
12        def build(*args, **kwargs)
13          builder(*args, **kwargs) do |builder|
14            yield builder if block_given?
15          end.build
16        end
17
18        def build_xml(*args, **kwargs)
19          builder(*args, **kwargs) do |builder|
20            yield builder if block_given?
21          end.to_xml
22        end
23
24        def builder(*args, **kwargs)
25          builder_class.new(*args, **kwargs).tap do |builder|
26            yield builder if block_given?
27          end
28        end
29      end
30    end
31  end
32end