radiant-reader_group-extension 1.2.2 → 1.2.3

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.2
1
+ 1.2.3
@@ -28,7 +28,7 @@ module GroupedMessage
28
28
  def functional_with_groups(function, group=nil)
29
29
  messages = for_function(function)
30
30
  if group
31
- messages.for_group(group).first
31
+ messages.belonging_to(group).first
32
32
  else
33
33
  messages.ungrouped.first
34
34
  end
data/lib/grouped_model.rb CHANGED
@@ -13,9 +13,16 @@ module GroupedModel
13
13
  return if has_groups?
14
14
 
15
15
  class_eval {
16
- extend GroupedModel::GroupedClassMethods
17
16
  include GroupedModel::GroupedInstanceMethods
18
17
 
18
+ def self.has_groups?
19
+ true
20
+ end
21
+
22
+ def self.visible
23
+ visible_to(nil)
24
+ end
25
+
19
26
  unless instance_methods.include? 'visible_to?'
20
27
  def visible_to?(reader)
21
28
  return true
@@ -28,6 +35,20 @@ module GroupedModel
28
35
  has_many :groups, :through => :permissions
29
36
  Group.define_retrieval_methods(self.to_s)
30
37
 
38
+ named_scope :visible_to, lambda { |reader|
39
+ if reader.nil? || reader.groups.empty?
40
+ conditions = "pp.group_id IS NULL"
41
+ else
42
+ ids = reader.group_ids
43
+ conditions = reader.nil? ? "pp.group_id IS NULL" : ["pp.group_id IS NULL OR pp.group_id IN(#{ids.map{"?"}.join(',')})", *ids]
44
+ end
45
+ {
46
+ :joins => "LEFT OUTER JOIN permissions as pp on pp.permitted_id = #{self.table_name}.id AND pp.permitted_type = '#{self.to_s}'",
47
+ :group => column_names.map { |n| self.table_name + '.' + n }.join(','),
48
+ :conditions => conditions
49
+ }
50
+ }
51
+
31
52
  named_scope :ungrouped, {
32
53
  :select => "#{self.table_name}.*, count(pp.id) as group_count",
33
54
  :joins => "LEFT OUTER JOIN permissions as pp on pp.permitted_id = #{self.table_name}.id AND pp.permitted_type = '#{self.to_s}'",
@@ -52,33 +73,19 @@ module GroupedModel
52
73
  end
53
74
  end
54
75
 
55
- named_scope :for_group, lambda { |group|
76
+ named_scope :belonging_to, lambda { |group|
56
77
  {
57
78
  :joins => "INNER JOIN permissions as pp on pp.permitted_id = #{self.table_name}.id AND pp.permitted_type = '#{self.to_s}'",
58
- :conditions => ["pp.group_id = ?)", group.id],
59
79
  :group => column_names.map { |n| self.table_name + '.' + n }.join(','),
80
+ :conditions => ["pp.group_id = ?)", group.id],
60
81
  :readonly => false
61
82
  }
62
83
  }
63
84
 
64
- named_scope :visible_to, lambda { |reader|
65
- groups = reader.nil? ? [] : reader.groups
66
- {:conditions => ["group_id IS NULL OR group_id IN(?)", groups.map(&:id).join(',')]}
67
- }
68
85
  end
69
86
  alias :has_group :has_groups
70
87
  end
71
88
 
72
- module GroupedClassMethods
73
- def has_groups?
74
- true
75
- end
76
-
77
- def visible
78
- ungrouped
79
- end
80
- end
81
-
82
89
  module GroupedInstanceMethods
83
90
 
84
91
  # in GroupedPage this is chained to include inherited groups
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{radiant-reader_group-extension}
8
- s.version = "1.2.2"
8
+ s.version = "1.2.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["spanner"]
12
- s.date = %q{2011-02-15}
12
+ s.date = %q{2011-02-16}
13
13
  s.description = %q{Adds group-based page access control to radiant.}
14
14
  s.email = %q{will@spanner.org}
15
15
  s.extra_rdoc_files = [
@@ -10,7 +10,7 @@ module ReaderGroup
10
10
  end
11
11
 
12
12
  class ReaderGroupExtension < Radiant::Extension
13
- version "1.2.2"
13
+ version "1.2.3"
14
14
  description "Page (and other) access control for site readers and groups"
15
15
  url "http://spanner.org/radiant/reader_group"
16
16
 
@@ -8,6 +8,35 @@ describe Page do
8
8
  @site = Page.current_site = sites(:test) if defined? Site
9
9
  end
10
10
 
11
+ describe "listed" do
12
+ describe "for nobody in particular" do
13
+ it "should not include private pages" do
14
+ Page.visible.include?(pages(:news)).should be_false
15
+ end
16
+ it "should include non-private pages" do
17
+ Page.visible.include?(pages(:first)).should be_true
18
+ end
19
+ end
20
+
21
+ describe "for a reader without group memberships" do
22
+ it "should not include private pages" do
23
+ Page.visible_to(readers(:ungrouped)).include?(pages(:news)).should be_false
24
+ end
25
+ it "should include non-private pages" do
26
+ Page.visible_to(readers(:ungrouped)).include?(pages(:first)).should be_true
27
+ end
28
+ end
29
+
30
+ describe "for a reader with group memberships" do
31
+ it "should include private pages" do
32
+ Page.visible_to(readers(:another)).include?(pages(:news)).should be_true
33
+ end
34
+ it "should include non-private pages" do
35
+ Page.visible_to(readers(:another)).include?(pages(:first)).should be_true
36
+ end
37
+ end
38
+ end
39
+
11
40
  describe "with groups" do
12
41
  before do
13
42
  @page = pages(:parent)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: radiant-reader_group-extension
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 2
9
- - 2
10
- version: 1.2.2
9
+ - 3
10
+ version: 1.2.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - spanner
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-02-15 00:00:00 +00:00
18
+ date: 2011-02-16 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency