Sha256: 54d076b06173bc9b98200ad7c570e69459405feca8959412953563fdab5c3a18

Contents?: true

Size: 1.15 KB

Versions: 103

Compression:

Stored size: 1.15 KB

Contents

#TODO may use mumukit slug
module WithSlug
  extend ActiveSupport::Concern

  included do
    validates_presence_of :slug
    validates_uniqueness_of :slug
    before_create :normalize_slug!
  end

  def transparent_params
    org, repo = slug.split('/')
    {organization: org, repository: repo}
  end

  def transparent_id
    slug
  end

  def normalize_slug!
    self.slug = self.slug.to_mumukit_slug.normalize.to_s
  end

  ## Copy and Rebase

  def rebase!(organization)
    self.slug = self.slug.to_mumukit_slug.rebase(organization).to_s
  end

  def rebased_dup(organization)
    dup.tap { |it| it.rebase! organization }
  end

  ## Filtering

  class_methods do

    def allowed(permissions)
      all.select { |it| permissions&.writer?(it.slug) }
    end

    def visible(permissions)
      # FIXME no truly generic
      all.select { |it| !it.private? || permissions&.writer?(it.slug) }
    end

    def find_transparently!(args)
      find_by!(slug: "#{args[:organization]}/#{args[:repository]}")
    end

    ## Resource Protocol

    def sync_key_id_field
      :slug
    end

    def locate_resource(key)
      find_or_initialize_by(slug: key)
    end
  end
end

Version data entries

103 entries across 103 versions & 2 rubygems

Version Path
mumuki-domain-9.23.0 app/models/concerns/with_slug.rb
mumuki-domain-9.22.1 app/models/concerns/with_slug.rb
mumuki-domain-9.22.0 app/models/concerns/with_slug.rb
mumuki-domain-9.21.0 app/models/concerns/with_slug.rb
mumuki-domain-9.20.0 app/models/concerns/with_slug.rb
mumuki-domain-9.19.0 app/models/concerns/with_slug.rb
mumuki-domain-9.18.0 app/models/concerns/with_slug.rb
mumuki-domain-9.17.0 app/models/concerns/with_slug.rb
mumuki-domain-9.16.0 app/models/concerns/with_slug.rb
mumuki-domain-9.15.0 app/models/concerns/with_slug.rb
mumuki-domain-9.14.1 app/models/concerns/with_slug.rb
mumuki-domain-9.14.0 app/models/concerns/with_slug.rb
mumuki-domain-9.13.1 app/models/concerns/with_slug.rb
mumuki-domain-9.13.0 app/models/concerns/with_slug.rb
mumuki-domain-9.12.0 app/models/concerns/with_slug.rb
mumuki-domain-9.11.0 app/models/concerns/with_slug.rb
mumuki-domain-9.10.0 app/models/concerns/with_slug.rb
mumuki-domain-9.9.0 app/models/concerns/with_slug.rb
mumuki-domain-9.8.1 app/models/concerns/with_slug.rb
mumuki-domain-9.8.0 app/models/concerns/with_slug.rb