Sha256: 28df7cacf2ddfa49396a0a42f48c717499cf72962ed89a05bc32422be3497fc5

Contents?: true

Size: 1013 Bytes

Versions: 3

Compression:

Stored size: 1013 Bytes

Contents

# frozen_string_literal: true

module Decidim
  module DecidimAwesome
    class Lock
      def initialize(organization, lock_time: DecidimAwesome.lock_time)
        @organization = organization
        @lock_time = lock_time
      end

      attr_reader :resource, :organization, :lock_time

      def get!(resource)
        @resource = resource
        if config
          config.update!(updated_at: Time.current)
        else
          AwesomeConfig.create!(var:, organization:)
        end
      end

      def release!(resource)
        @resource = resource
        config.destroy! if config
      end

      def locked?(resource)
        @resource = resource
        return false unless config
        return true if config.reload.updated_at > lock_time.ago

        config.destroy!
        false
      end

      def config
        AwesomeConfig.find_by(var:, organization:)
      end

      private

      def var
        "lock-#{resource.class.name.underscore}_#{resource.id}"
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
decidim-decidim_awesome-0.11.3 lib/decidim/decidim_awesome/lock.rb
decidim-decidim_awesome-0.11.2 lib/decidim/decidim_awesome/lock.rb
decidim-decidim_awesome-0.11.1 lib/decidim/decidim_awesome/lock.rb