activekit 0.2.3.dev1 → 0.2.3.dev2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/active_kit/{activekitable.rb → base/activekitable.rb} +2 -1
- data/lib/active_kit/base/activekiter.rb +17 -0
- data/lib/active_kit/base/ensure.rb +29 -0
- data/lib/active_kit/base/middleware.rb +26 -0
- data/lib/active_kit/base/relation.rb +9 -0
- data/lib/active_kit/base.rb +10 -0
- data/lib/active_kit/engine.rb +3 -3
- data/lib/active_kit/schedule/middleware.rb +12 -0
- data/lib/active_kit/schedule/schedule.rb +24 -0
- data/lib/active_kit/schedule/scheduleable.rb +97 -0
- data/lib/active_kit/schedule.rb +8 -0
- data/lib/active_kit/sequence/sequence.rb +1 -1
- data/lib/active_kit/sequence/sequenceable.rb +1 -1
- data/lib/active_kit/version.rb +1 -1
- data/lib/active_kit.rb +2 -4
- metadata +11 -6
- data/lib/active_kit/activekiter.rb +0 -11
- data/lib/active_kit/loader.rb +0 -26
- data/lib/active_kit/middleware.rb +0 -24
- data/lib/active_kit/relation.rb +0 -7
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 95241693c8cee6d5b29f2f8172abf1a5b31f70ea29a529595db9d5f71d24b948
         | 
| 4 | 
            +
              data.tar.gz: e00f4986129a42c3444daee94921081738e763f9edd9de704567b0f9aab7eb3e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 29b391870a0332435dcfdd39aa7995483689e5bb1b1c3a54fe81b7a0ace8165295f953b2afd82bf973e152b63cfb9d396a4a9dedc99bcaeb12e1d93b0682fa07
         | 
| 7 | 
            +
              data.tar.gz: b9855efff5f9d7de6e0ec73f5dde1f501cab9cba507d2a0d7914fc2920e66443553df7ade87b411e0fbb2fdcbb5141c49a4687e5a0a505d37d4e77ee2ff6844b
         | 
| @@ -2,9 +2,9 @@ require 'active_support/concern' | |
| 2 2 | 
             
            require "active_kit/sequence/sequenceable"
         | 
| 3 3 |  | 
| 4 4 | 
             
            module ActiveKit
         | 
| 5 | 
            +
              module Base
         | 
| 5 6 | 
             
                module Activekitable
         | 
| 6 7 | 
             
                  extend ActiveSupport::Concern
         | 
| 7 | 
            -
                  include ActiveKit::Loader
         | 
| 8 8 | 
             
                  include ActiveKit::Sequence::Sequenceable
         | 
| 9 9 |  | 
| 10 10 | 
             
                  included do
         | 
| @@ -13,4 +13,5 @@ module ActiveKit | |
| 13 13 | 
             
                  class_methods do
         | 
| 14 14 | 
             
                  end
         | 
| 15 15 | 
             
                end
         | 
| 16 | 
            +
              end
         | 
| 16 17 | 
             
            end
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            module ActiveKit
         | 
| 2 | 
            +
              module Base
         | 
| 3 | 
            +
                class Activekiter
         | 
| 4 | 
            +
                  def initialize(current_class:)
         | 
| 5 | 
            +
                    @current_class = current_class
         | 
| 6 | 
            +
                  end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def schedule
         | 
| 9 | 
            +
                    @schedule ||= ActiveKit::Schedule::Schedule.new(current_class: @current_class)
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  def sequence
         | 
| 13 | 
            +
                    @sequence ||= ActiveKit::Sequence::Sequence.new(current_class: @current_class)
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
            end
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            module ActiveKit
         | 
| 2 | 
            +
              module Base
         | 
| 3 | 
            +
                class Ensure
         | 
| 4 | 
            +
                  def self.middleware_for!(request:)
         | 
| 5 | 
            +
                    ActiveKit::Schedule::Middleware.run
         | 
| 6 | 
            +
                  end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def self.setup_for!(current_class:)
         | 
| 9 | 
            +
                    current_class.class_eval do
         | 
| 10 | 
            +
                      unless self.reflect_on_association :activekit_association
         | 
| 11 | 
            +
                        has_one :activekit_association, as: :record, dependent: :destroy, class_name: "ActiveKit::Attribute"
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                        def activekit
         | 
| 14 | 
            +
                          @activekit ||= Relation.new(current_object: self)
         | 
| 15 | 
            +
                        end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                        def self.activekiter
         | 
| 18 | 
            +
                          @activekiter ||= Activekiter.new(current_class: self)
         | 
| 19 | 
            +
                        end
         | 
| 20 | 
            +
                      end
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  def self.has_one_association_for!(record:)
         | 
| 25 | 
            +
                    record.create_activekit_association unless record.activekit_association
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
            end
         | 
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            module ActiveKit
         | 
| 2 | 
            +
              module Base
         | 
| 3 | 
            +
                class Middleware
         | 
| 4 | 
            +
                  def initialize(app)
         | 
| 5 | 
            +
                    @app = app
         | 
| 6 | 
            +
                  end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  # Middleware that determines which ActiveKit middlewares to run.
         | 
| 9 | 
            +
                  def call(env)
         | 
| 10 | 
            +
                    request = ActionDispatch::Request.new(env)
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                    activekit_runner(request) do
         | 
| 13 | 
            +
                      @app.call(env)
         | 
| 14 | 
            +
                    end
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  private
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  def activekit_runner(request, &blk)
         | 
| 20 | 
            +
                    Ensure.middleware_for!(request: request)
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                    yield
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
            end
         | 
    
        data/lib/active_kit/engine.rb
    CHANGED
    
    | @@ -4,14 +4,14 @@ module ActiveKit | |
| 4 4 | 
             
                config.eager_load_namespaces << ActiveKit
         | 
| 5 5 |  | 
| 6 6 | 
             
                initializer "active_kit.add_middleware" do |app|
         | 
| 7 | 
            -
                  app.middleware.use ActiveKit::Middleware
         | 
| 7 | 
            +
                  app.middleware.use ActiveKit::Base::Middleware
         | 
| 8 8 | 
             
                end
         | 
| 9 9 |  | 
| 10 10 | 
             
                initializer "active_kit.activekitable" do
         | 
| 11 | 
            -
                  require "active_kit/activekitable"
         | 
| 11 | 
            +
                  require "active_kit/base/activekitable"
         | 
| 12 12 |  | 
| 13 13 | 
             
                  ActiveSupport.on_load(:active_record) do
         | 
| 14 | 
            -
                    include ActiveKit::Activekitable
         | 
| 14 | 
            +
                    include ActiveKit::Base::Activekitable
         | 
| 15 15 | 
             
                  end
         | 
| 16 16 | 
             
                end
         | 
| 17 17 | 
             
              end
         | 
| @@ -0,0 +1,12 @@ | |
| 1 | 
            +
            module ActiveKit
         | 
| 2 | 
            +
              module Schedule
         | 
| 3 | 
            +
                class Middleware
         | 
| 4 | 
            +
                  def self.run(request:)
         | 
| 5 | 
            +
                    logger.info "coming from middleware of activekit schedule"
         | 
| 6 | 
            +
                    # activekit_attribute = ActiveKit::Attribute.where(value: schedule: timestamp < DateTime.now).order(updated_at: :desc)
         | 
| 7 | 
            +
                    # json_where = 'value->"$.schedule.attributes.' + attribute_name.to_s + '" = "' + word_for_position + '"'
         | 
| 8 | 
            +
                    # record_at_position = ActiveKit::Attribute.where(record_type: record.class.name).where(json_where).first&.record
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
            end
         | 
| @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            module ActiveKit
         | 
| 2 | 
            +
              module Schedule
         | 
| 3 | 
            +
                class Schedule
         | 
| 4 | 
            +
                  attr_reader :defined_attributes
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                  def initialize(current_class:)
         | 
| 7 | 
            +
                    @current_class = current_class
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                    @defined_attributes = {}
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  def add(record:, attribute_name:, datetime:, method:)
         | 
| 13 | 
            +
                    ActiveKit::Base::Ensure.has_one_association_for!(record: record)
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    record.activekit_association.schedule[:attributes][attribute_name.to_sym] = nil
         | 
| 16 | 
            +
                    record.activekit_association.save!
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  def add_attribute(name:, options:)
         | 
| 20 | 
            +
                    @defined_attributes.store(name, options)
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
            end
         | 
| @@ -0,0 +1,97 @@ | |
| 1 | 
            +
            require 'active_support/concern'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module ActiveKit
         | 
| 4 | 
            +
              module Schedule
         | 
| 5 | 
            +
                module Scheduleable
         | 
| 6 | 
            +
                  extend ActiveSupport::Concern
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  included do
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  class_methods do
         | 
| 12 | 
            +
                    # Usage Options
         | 
| 13 | 
            +
                    # schedule_attribute :name, :run_method, :begin_at, :end_at
         | 
| 14 | 
            +
                    # schedule_attribute :name, :run_method, :timestamp_method, updater: {}
         | 
| 15 | 
            +
                    # schedule_attribute :name, :run_method, :timestamp_method, updater: { on: {} }
         | 
| 16 | 
            +
                    # schedule_attribute :name, :run_method, :timestamp_method, updater: { via: :assoc, on: {} }
         | 
| 17 | 
            +
                    # schedule_attribute :name, :run_method, :timestamp_method, updater: { via: {}, on: {} }
         | 
| 18 | 
            +
                    # Note: :on and :via in :updater can accept nested associations.
         | 
| 19 | 
            +
                    def schedule_attribute(name, run_method, timestamp_method, interval, **options)
         | 
| 20 | 
            +
                      ActiveKit::Base::Ensure.setup_for!(current_class: self)
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                      name = name.to_sym
         | 
| 23 | 
            +
                      options.store(:run_method, run_method&.to_sym)
         | 
| 24 | 
            +
                      options.store(:timestamp_method, datetime_method&.to_sym)
         | 
| 25 | 
            +
                      options.deep_symbolize_keys!
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                      set_activekit_schedule_callbacks(name: name, options: options)
         | 
| 28 | 
            +
                      activekiter.schedule.add_attribute(name: name, options: options)
         | 
| 29 | 
            +
                    end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                    def set_activekit_schedule_callbacks(name:, options:)
         | 
| 32 | 
            +
                      run_method = options.dig(:run_method)
         | 
| 33 | 
            +
                      updater = options.dig(:updater) || {}
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                      if updater.empty?
         | 
| 36 | 
            +
                        after_save do
         | 
| 37 | 
            +
                          self.class.activekiter.schedule.update(record: self, name: name, run_method: run_method)
         | 
| 38 | 
            +
                          logger.info "ActiveKit | Schedule - Scheduling from #{self.class.name}: Done."
         | 
| 39 | 
            +
                        end
         | 
| 40 | 
            +
                      else
         | 
| 41 | 
            +
                        raise ":updater should be a hash while setting sequence_attribute. " unless updater.is_a?(Hash)
         | 
| 42 | 
            +
                        raise ":on in :updater should be a hash while setting sequence_attribute. " if updater.key?(:on) && !updater[:on].is_a?(Hash)
         | 
| 43 | 
            +
                        raise "Cannot use :via without :on in :updater while setting sequence_attribute. " if updater.key?(:via) && !updater.key?(:on)
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                        updater_via = updater.delete(:via)
         | 
| 46 | 
            +
                        updater_on = updater.delete(:on) || updater
         | 
| 47 | 
            +
                        
         | 
| 48 | 
            +
                        base_klass = search_base_klass(self.name, updater_via)
         | 
| 49 | 
            +
                        klass = reflected_klass(base_klass, updater_on.keys.first)
         | 
| 50 | 
            +
                        klass.constantize.class_eval do
         | 
| 51 | 
            +
                          after_save    :activekit_sequence_sequenceable_callback
         | 
| 52 | 
            +
                          after_destroy :activekit_sequence_sequenceable_callback
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                          define_method :activekit_sequence_sequenceable_callback do
         | 
| 55 | 
            +
                            inverse_assoc = self.class.search_inverse_assoc(self, updater_on)
         | 
| 56 | 
            +
                            position = positioning_method ? self.public_send(positioning_method) : nil
         | 
| 57 | 
            +
                            if inverse_assoc.respond_to?(:each)
         | 
| 58 | 
            +
                              inverse_assoc.each { |instance| instance.class.activekiter.sequence.update(record: instance, attribute_name: attribute_name, position: position) }
         | 
| 59 | 
            +
                            else
         | 
| 60 | 
            +
                              inverse_assoc.class.activekiter.sequence.update(record: inverse_assoc, attribute_name: attribute_name, position: position)
         | 
| 61 | 
            +
                            end
         | 
| 62 | 
            +
                            logger.info "ActiveSequence - Sequencing from #{self.class.name}: Done."
         | 
| 63 | 
            +
                          end
         | 
| 64 | 
            +
                          private :activekit_sequence_sequenceable_callback
         | 
| 65 | 
            +
                        end
         | 
| 66 | 
            +
                      end
         | 
| 67 | 
            +
                    end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                    def search_base_klass(classname, updater_via)
         | 
| 70 | 
            +
                      if updater_via.blank?
         | 
| 71 | 
            +
                        classname
         | 
| 72 | 
            +
                      elsif updater_via.is_a? Symbol
         | 
| 73 | 
            +
                        reflected_klass(classname, updater_via)
         | 
| 74 | 
            +
                      elsif updater_via.is_a? Hash
         | 
| 75 | 
            +
                        klass = reflected_klass(classname, updater_via.keys.first)
         | 
| 76 | 
            +
                        updater_via.values.first.is_a?(Hash) ? search_base_klass(klass, updater_via.values.first) : reflected_klass(klass, updater_via.values.first)
         | 
| 77 | 
            +
                      end
         | 
| 78 | 
            +
                    end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                    def reflected_klass(classname, key)
         | 
| 81 | 
            +
                      klass = classname.constantize.reflect_on_all_associations.map { |assoc| [assoc.name, assoc.klass.name] }.to_h[key]
         | 
| 82 | 
            +
                      raise "Could not find reflected klass for classname '#{classname}' and key '#{key}' while setting sequence_attribute" unless klass
         | 
| 83 | 
            +
                      klass
         | 
| 84 | 
            +
                    end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                    def search_inverse_assoc(klass_object, updater_on)
         | 
| 87 | 
            +
                      if updater_on.values.first.is_a?(Hash)
         | 
| 88 | 
            +
                        klass_object = klass_object.public_send(updater_on.values.first.keys.first)
         | 
| 89 | 
            +
                        search_inverse_assoc(klass_object, updater_on.values.first)
         | 
| 90 | 
            +
                      else
         | 
| 91 | 
            +
                        klass_object.public_send(updater_on.values.first)
         | 
| 92 | 
            +
                      end
         | 
| 93 | 
            +
                    end
         | 
| 94 | 
            +
                  end
         | 
| 95 | 
            +
                end
         | 
| 96 | 
            +
              end
         | 
| 97 | 
            +
            end
         | 
| @@ -11,7 +11,7 @@ module ActiveKit | |
| 11 11 | 
             
                  end
         | 
| 12 12 |  | 
| 13 13 | 
             
                  def update(record:, attribute_name:, position:)
         | 
| 14 | 
            -
                    ActiveKit:: | 
| 14 | 
            +
                    ActiveKit::Base::Ensure.has_one_association_for!(record: record)
         | 
| 15 15 |  | 
| 16 16 | 
             
                    if position
         | 
| 17 17 | 
             
                      raise "position '#{position}' is not a valid unsigned integer value greater than 0." unless position.is_a?(Integer) && position > 0
         | 
| @@ -18,7 +18,7 @@ module ActiveKit | |
| 18 18 | 
             
                    # sequence_attribute :name, :positioning_method, updater: { via: {}, on: {} }
         | 
| 19 19 | 
             
                    # Note: :on and :via in :updater can accept nested associations.
         | 
| 20 20 | 
             
                    def sequence_attribute(name, positioning_method = nil, **options)
         | 
| 21 | 
            -
                      ActiveKit:: | 
| 21 | 
            +
                      ActiveKit::Base::Ensure.setup_for!(current_class: self)
         | 
| 22 22 |  | 
| 23 23 | 
             
                      name = name.to_sym
         | 
| 24 24 | 
             
                      options.store(:positioning_method, positioning_method&.to_sym)
         | 
    
        data/lib/active_kit/version.rb
    CHANGED
    
    
    
        data/lib/active_kit.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: activekit
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.2.3. | 
| 4 | 
            +
              version: 0.2.3.dev2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - plainsource
         | 
| @@ -52,12 +52,17 @@ files: | |
| 52 52 | 
             
            - config/routes.rb
         | 
| 53 53 | 
             
            - db/migrate/20231016050208_create_active_kit_attributes.rb
         | 
| 54 54 | 
             
            - lib/active_kit.rb
         | 
| 55 | 
            -
            - lib/active_kit/ | 
| 56 | 
            -
            - lib/active_kit/ | 
| 55 | 
            +
            - lib/active_kit/base.rb
         | 
| 56 | 
            +
            - lib/active_kit/base/activekitable.rb
         | 
| 57 | 
            +
            - lib/active_kit/base/activekiter.rb
         | 
| 58 | 
            +
            - lib/active_kit/base/ensure.rb
         | 
| 59 | 
            +
            - lib/active_kit/base/middleware.rb
         | 
| 60 | 
            +
            - lib/active_kit/base/relation.rb
         | 
| 57 61 | 
             
            - lib/active_kit/engine.rb
         | 
| 58 | 
            -
            - lib/active_kit/ | 
| 59 | 
            -
            - lib/active_kit/middleware.rb
         | 
| 60 | 
            -
            - lib/active_kit/ | 
| 62 | 
            +
            - lib/active_kit/schedule.rb
         | 
| 63 | 
            +
            - lib/active_kit/schedule/middleware.rb
         | 
| 64 | 
            +
            - lib/active_kit/schedule/schedule.rb
         | 
| 65 | 
            +
            - lib/active_kit/schedule/scheduleable.rb
         | 
| 61 66 | 
             
            - lib/active_kit/sequence.rb
         | 
| 62 67 | 
             
            - lib/active_kit/sequence/sequence.rb
         | 
| 63 68 | 
             
            - lib/active_kit/sequence/sequenceable.rb
         | 
    
        data/lib/active_kit/loader.rb
    DELETED
    
    | @@ -1,26 +0,0 @@ | |
| 1 | 
            -
            module ActiveKit
         | 
| 2 | 
            -
              module Loader
         | 
| 3 | 
            -
                def self.ensure_middleware_for!(request:)
         | 
| 4 | 
            -
                end
         | 
| 5 | 
            -
             | 
| 6 | 
            -
                def self.ensure_setup_for!(current_class:)
         | 
| 7 | 
            -
                  current_class.class_eval do
         | 
| 8 | 
            -
                    unless self.reflect_on_association :activekit_association
         | 
| 9 | 
            -
                      has_one :activekit_association, as: :record, dependent: :destroy, class_name: "ActiveKit::Attribute"
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                      def activekit
         | 
| 12 | 
            -
                        @activekit ||= Relation.new(current_object: self)
         | 
| 13 | 
            -
                      end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                      def self.activekiter
         | 
| 16 | 
            -
                        @activekiter ||= Activekiter.new(current_class: self)
         | 
| 17 | 
            -
                      end
         | 
| 18 | 
            -
                    end
         | 
| 19 | 
            -
                  end
         | 
| 20 | 
            -
                end
         | 
| 21 | 
            -
             | 
| 22 | 
            -
                def self.ensure_has_one_association_for!(record:)
         | 
| 23 | 
            -
                  record.create_activekit_association unless record.activekit_association
         | 
| 24 | 
            -
                end
         | 
| 25 | 
            -
              end
         | 
| 26 | 
            -
            end
         | 
| @@ -1,24 +0,0 @@ | |
| 1 | 
            -
            module ActiveKit
         | 
| 2 | 
            -
              class Middleware
         | 
| 3 | 
            -
                def initialize(app)
         | 
| 4 | 
            -
                  @app = app
         | 
| 5 | 
            -
                end
         | 
| 6 | 
            -
             | 
| 7 | 
            -
                # Middleware that determines which ActiveKit schedules to run.
         | 
| 8 | 
            -
                def call(env)
         | 
| 9 | 
            -
                  request = ActionDispatch::Request.new(env)
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                  activekit_runner(request) do
         | 
| 12 | 
            -
                    @app.call(env)
         | 
| 13 | 
            -
                  end
         | 
| 14 | 
            -
                end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                private
         | 
| 17 | 
            -
             | 
| 18 | 
            -
                def activekit_runner(request, &blk)
         | 
| 19 | 
            -
                  ActiveKit::Loader.ensure_middleware_for!(request: request)
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                  yield
         | 
| 22 | 
            -
                end
         | 
| 23 | 
            -
              end
         | 
| 24 | 
            -
            end
         |