Sha256: 97dbc234cf23a52d17fe87428a6b875f631ab895b6a7ef1b0fbacb207dc4d245

Contents?: true

Size: 1.51 KB

Versions: 5

Compression:

Stored size: 1.51 KB

Contents

module GroupedPage

  def self.included(base)
    base.class_eval {
      has_many :permissions
      has_many :groups, :through => :permissions
      accepts_nested_attributes_for :permissions
      has_one :group, :foreign_key => 'homepage_id'
      
      include InstanceMethods
      
      # any page with a group-marker is never cached
      # so that we can continue to return cache hits without care
      # this check is regrettably expensive

      def cache?
        self.inherited_groups.empty?
      end        
    }
  end
  
  module InstanceMethods
    
    def visible_to?(reader)
      permitted_groups = self.inherited_groups  
      return true if permitted_groups.empty?
      return false if reader.nil?
      return true if reader.is_admin?
      return reader.in_any_of_these_groups?(permitted_groups)
    end

    # this is all very inefficient recursive stuff
    # but to do it in one pass we'd have to build a list of pages anyway
    # so there isn't much to gain unless we shift to a different kind of tree

    def inherited_groups
      if (self.parent.nil?)
        self.groups
      else
        self.groups + self.parent.inherited_groups
      end
    end
    alias permitted_groups inherited_groups

    def has_group?(group)
      return self.groups.include?(group)
    end

    def has_inherited_group?(group)
      return self.inherited_groups.include?(group)
    end
    
    def group_is_inherited?(group)
      return self.has_inherited_group?(group) && !self.has_group?(group)
    end
    
  end

end


Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
radiant-reader_group-extension-1.1.2 lib/grouped_page.rb
radiant-reader_group-extension-1.1.1 lib/grouped_page.rb
radiant-reader_group-extension-1.1.0 lib/grouped_page.rb
radiant-reader_group-extension-1.0.1 lib/grouped_page.rb
radiant-reader_group-extension-1.0.0 lib/grouped_page.rb