private_person 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +4 -15
- data/LICENSE.txt +1 -1
- data/README.rdoc +6 -2
- data/Rakefile +2 -12
- data/VERSION +1 -1
- data/lib/private_person.rb +8 -8
- data/lib/private_person/extensions/acts_as_permissible.rb +27 -0
- data/lib/private_person/extensions/acts_as_permissor.rb +58 -0
- data/lib/private_person/extensions/acts_as_permitted.rb +58 -0
- data/lib/private_person/models/permission.rb +42 -40
- data/private_person.gemspec +22 -16
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/factories/permissions.rb +1 -1
- data/spec/models/page_spec.rb +1 -1
- data/spec/models/permission_spec.rb +12 -12
- data/spec/models/user_spec.rb +6 -6
- data/spec/spec_helper.rb +1 -0
- data/spec/support/permissions_support.rb +2 -2
- metadata +67 -40
- data/lib/private_person/models/permissible.rb +0 -20
- data/lib/private_person/models/permissor.rb +0 -43
- data/lib/private_person/models/permitted.rb +0 -51
- data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8fc5ea2ff01d3b1c9aa4fdf1d08b1e89d4b59fda
|
4
|
+
data.tar.gz: 53cdaee285d896caf9591c4bfed3d4897af94e40
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f7fa47f819e68afc2931b7cf9a0f8ac845fe559dee7948b3616e51498957a9f5d7ae42490a263593a850abc656e4e9cbbdfae91c13bb31aef23964d0daaabdf4
|
7
|
+
data.tar.gz: f760e1935c191e8f78fbde750decc436dcd80993b70eb080a2ecd9e3a50a0900308e9e0323b6c12b58c5f57e1a6875b5f03c4e104c4762a2eeeeb7d010c9d461
|
data/Gemfile
CHANGED
@@ -3,19 +3,8 @@ source 'http://rubygems.org'
|
|
3
3
|
# Example:
|
4
4
|
# gem 'activesupport', '>= 2.3.5'
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
group :
|
9
|
-
gem 'rdoc'
|
10
|
-
gem 'bundler'
|
11
|
-
gem 'jeweler'
|
12
|
-
gem 'sqlite3'
|
13
|
-
gem 'rspec'
|
14
|
-
gem 'rspec-rails'
|
15
|
-
gem 'shoulda-matchers'
|
16
|
-
gem 'factory_girl_rails'
|
17
|
-
gem 'database_cleaner'
|
18
|
-
gem 'chalk_dust', :git => 'git://github.com/nerakdon/chalk_dust.git'
|
19
|
-
end
|
6
|
+
gem 'rails', '>= 4.0'
|
7
|
+
gem 'activerecord', '>= 4.0'
|
8
|
+
gem 'chalk_dust', group: :test, git: 'https://github.com/nerakdon/chalk_dust.git'
|
20
9
|
|
21
|
-
|
10
|
+
gemspec
|
data/LICENSE.txt
CHANGED
data/README.rdoc
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
= PrivatePerson
|
2
2
|
|
3
|
+
{<img src="https://badge.fury.io/rb/private_person.svg" alt="Gem Version" />}[http://badge.fury.io/rb/private_person]
|
4
|
+
{<img src="https://travis-ci.org/gemvein/private_person.svg?branch=master" alt="Build Status" />}[https://travis-ci.org/gemvein/private_person]
|
5
|
+
{<img src="https://coveralls.io/repos/gemvein/private_person/badge.png" alt="Coverage Status" />}[https://coveralls.io/r/gemvein/private_person]
|
6
|
+
|
3
7
|
Private person is an active record extension gem that allows a model to be given privacy settings over arbitrary models and polymorphic relations, putting users' accounts in control of their own privacy policies.
|
4
8
|
|
5
|
-
== Contributing to Person
|
9
|
+
== Contributing to Private Person
|
6
10
|
|
7
11
|
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
|
8
12
|
* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
|
@@ -14,5 +18,5 @@ Private person is an active record extension gem that allows a model to be given
|
|
14
18
|
|
15
19
|
== Copyright
|
16
20
|
|
17
|
-
Copyright (c) 2013
|
21
|
+
Copyright (c) 2013-2014 Gem Vein. See LICENSE.txt for further details.
|
18
22
|
|
data/Rakefile
CHANGED
@@ -15,11 +15,11 @@ require 'jeweler'
|
|
15
15
|
Jeweler::Tasks.new do |gem|
|
16
16
|
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
17
|
gem.name = "private_person"
|
18
|
-
gem.homepage = "http://
|
18
|
+
gem.homepage = "http://www.gemvein.com/museum/cases/private_person"
|
19
19
|
gem.license = "MIT"
|
20
20
|
gem.summary = %Q{Private person puts your users in control of their own privacy policies.}
|
21
21
|
gem.description = %Q{Private person is an active record extension gem that allows a model to be given privacy settings over arbitrary models and polymorphic relations, putting users' accounts in control of their own privacy policies.}
|
22
|
-
gem.email = "
|
22
|
+
gem.email = "karen.e.lundgren@gmail.com"
|
23
23
|
gem.authors = ["Karen Lundgren"]
|
24
24
|
# dependencies defined in Gemfile
|
25
25
|
end
|
@@ -37,13 +37,3 @@ RSpec::Core::RakeTask.new(:rcov) do |spec|
|
|
37
37
|
end
|
38
38
|
|
39
39
|
task :default => :spec
|
40
|
-
|
41
|
-
require 'rdoc/task'
|
42
|
-
Rake::RDocTask.new do |rdoc|
|
43
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
44
|
-
|
45
|
-
rdoc.rdoc_dir = 'rdoc'
|
46
|
-
rdoc.title = "private_person #{version}"
|
47
|
-
rdoc.rdoc_files.include('README*')
|
48
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
49
|
-
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/lib/private_person.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
module PrivatePerson
|
2
2
|
require 'rails'
|
3
3
|
require 'private_person/version'
|
4
|
-
require 'private_person/models/permissor'
|
5
4
|
require 'private_person/models/permission'
|
6
|
-
require 'private_person/
|
7
|
-
require 'private_person/
|
8
|
-
|
5
|
+
require 'private_person/extensions/acts_as_permissor'
|
6
|
+
require 'private_person/extensions/acts_as_permissible'
|
7
|
+
require 'private_person/extensions/acts_as_permitted'
|
9
8
|
|
10
|
-
if defined?(ActiveRecord::Base)
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
if defined?(ActiveRecord::Base)
|
10
|
+
ActiveRecord::Base.send(:include, ActsAsPermitted)
|
11
|
+
ActiveRecord::Base.send(:include, ActsAsPermissor)
|
12
|
+
ActiveRecord::Base.send(:include, ActsAsPermissible)
|
13
|
+
end
|
14
14
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module PrivatePerson
|
2
|
+
module ActsAsPermissible
|
3
|
+
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
module ClassMethods
|
7
|
+
def acts_as_permissible(params = {})
|
8
|
+
if params[:by].nil?
|
9
|
+
raise 'Called acts_as_permissible, but without a :by parameter.'
|
10
|
+
end
|
11
|
+
class_attribute :by
|
12
|
+
self.by = params[:by]
|
13
|
+
|
14
|
+
has_many :permissions, :as => :permissible, :class_name => 'PrivatePerson::Permission'
|
15
|
+
has_many :permissors, :through => :permissions, :as => :permissible
|
16
|
+
|
17
|
+
send :include, InstanceMethods
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module InstanceMethods
|
22
|
+
def is_public?
|
23
|
+
!permissions.by_relationship_type(nil).empty?
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module PrivatePerson
|
2
|
+
module ActsAsPermissor
|
3
|
+
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
module ClassMethods
|
7
|
+
def acts_as_permissor(params = {})
|
8
|
+
if params[:of].nil?
|
9
|
+
raise 'Called acts_as_permissor, but without an :of parameter.'
|
10
|
+
end
|
11
|
+
class_attribute :of
|
12
|
+
self.of = params[:of]
|
13
|
+
class_name = params[:class_name] || params[:of].to_s.classify
|
14
|
+
class_name.constantize.acts_as_permitted
|
15
|
+
|
16
|
+
has_many :permissions_as_permissor, :as => :permissor, :class_name => 'PrivatePerson::Permission'
|
17
|
+
has_many :permissibles, :through => :permissions, :as => :permissor
|
18
|
+
|
19
|
+
send :include, InstanceMethods
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
module InstanceMethods
|
24
|
+
def permit!(whom, what)
|
25
|
+
existing = self.permissions_as_permissor.by_relationship_type(whom).by_permissible(what)
|
26
|
+
|
27
|
+
if existing.empty?
|
28
|
+
self.permissions_as_permissor.create!(permission_params(whom, what))
|
29
|
+
end
|
30
|
+
self.permissions_as_permissor.reload
|
31
|
+
end
|
32
|
+
|
33
|
+
def wildcard_permit!(whom, what)
|
34
|
+
existing = self.permissions_as_permissor.by_relationship_type(whom).where(:permissible_type, what)
|
35
|
+
|
36
|
+
# if existing.empty?
|
37
|
+
self.permissions_as_permissor.create!(wildcard_permission_params(whom, what))
|
38
|
+
# end
|
39
|
+
self.permissions_as_permissor.reload
|
40
|
+
end
|
41
|
+
|
42
|
+
def permission_params(whom, what)
|
43
|
+
::ActionController::Parameters.new({
|
44
|
+
:relationship_type => whom,
|
45
|
+
:permissible_type => what.class.name,
|
46
|
+
:permissible_id => what.id
|
47
|
+
}).permit!
|
48
|
+
end
|
49
|
+
|
50
|
+
def wildcard_permission_params(whom, what)
|
51
|
+
::ActionController::Parameters.new({
|
52
|
+
:relationship_type => whom,
|
53
|
+
:permissible_type => what
|
54
|
+
}).permit!
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module PrivatePerson
|
2
|
+
module ActsAsPermitted
|
3
|
+
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
module ClassMethods
|
7
|
+
def acts_as_permitted
|
8
|
+
send :include, InstanceMethods
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module InstanceMethods
|
13
|
+
def is_permitted?(permissor, permissible)
|
14
|
+
if permissible.nil?
|
15
|
+
raise 'Called is_permitted? on nil. Does not compute. Preparing to self destruct.'
|
16
|
+
end
|
17
|
+
unless PrivatePerson::Permission.by_permissible(permissible).blocked.empty?
|
18
|
+
return false
|
19
|
+
end
|
20
|
+
wildcards = permissions_by(permissor).by_wildcard(permissible.class.name).legitimate
|
21
|
+
if wildcards.present?
|
22
|
+
return true
|
23
|
+
end
|
24
|
+
permissions = permissions_by(permissor).by_permissible(permissible).legitimate
|
25
|
+
if permissions.present?
|
26
|
+
return true
|
27
|
+
end
|
28
|
+
return false
|
29
|
+
end
|
30
|
+
|
31
|
+
def permissions_by(permissor)
|
32
|
+
PrivatePerson::Permission.by_permissor(permissor).by_relationship_type(relationship_to(permissor))
|
33
|
+
end
|
34
|
+
|
35
|
+
def relationship_to(permissor)
|
36
|
+
# First make sure we're not a new user
|
37
|
+
if self.new_record?
|
38
|
+
return 'public'
|
39
|
+
end
|
40
|
+
# Next check for an efficient method
|
41
|
+
for relationship_method in permissor.class.of
|
42
|
+
is_method = ('is_' + relationship_method.to_s.singularize + '_of?').to_sym
|
43
|
+
if respond_to?(is_method) and self.send(is_method, permissor)
|
44
|
+
return relationship_method.to_s
|
45
|
+
end
|
46
|
+
end
|
47
|
+
# Then check for a slow method
|
48
|
+
for relationship_method in permissor.class.of
|
49
|
+
relationship_members = permissor.send(relationship_method.to_sym)
|
50
|
+
if relationship_members.present? and relationship_members.include? self
|
51
|
+
return relationship_method.to_s
|
52
|
+
end
|
53
|
+
end
|
54
|
+
return 'public'
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -1,55 +1,57 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
module PrivatePerson
|
2
|
+
class Permission < ActiveRecord::Base
|
3
|
+
belongs_to :permissor, :polymorphic => true
|
4
|
+
belongs_to :permissible, :polymorphic => true
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
def self.by_permissible(permissible)
|
10
|
-
where("permissible_type = ? AND permissible_id = ?", permissible.class.name, permissible.id)
|
11
|
-
end
|
6
|
+
def self.by_permissor(permissor)
|
7
|
+
where("permissor_type = ? AND permissor_id = ?", permissor.class.name, permissor.id)
|
8
|
+
end
|
12
9
|
|
13
|
-
|
14
|
-
|
15
|
-
|
10
|
+
def self.by_permissible(permissible)
|
11
|
+
where("permissible_type = ? AND permissible_id = ?", permissible.class.name, permissible.id)
|
12
|
+
end
|
16
13
|
|
17
|
-
|
18
|
-
|
19
|
-
return where("relationship_type = 'public'")
|
14
|
+
def self.by_wildcard(permissible_type)
|
15
|
+
where(:permissible_type => permissible_type, :permissible_id => nil)
|
20
16
|
end
|
21
|
-
|
22
|
-
|
17
|
+
|
18
|
+
def self.by_relationship_type(relationship_type)
|
19
|
+
if relationship_type == 'public' or relationship_type.nil?
|
20
|
+
return where("relationship_type = 'public'")
|
21
|
+
end
|
22
|
+
if(self.permissible_types.include? relationship_type)
|
23
|
+
return where("relationship_type = ? OR relationship_type = 'public'", relationship_type)
|
24
|
+
end
|
25
|
+
return where(0)
|
23
26
|
end
|
24
|
-
return where(0)
|
25
|
-
end
|
26
27
|
|
27
|
-
|
28
|
-
|
29
|
-
|
28
|
+
def self.blocked
|
29
|
+
where('NOT(relationship_type IN (?))', self.permissible_types)
|
30
|
+
end
|
30
31
|
|
31
|
-
|
32
|
-
|
33
|
-
|
32
|
+
def self.legitimate
|
33
|
+
where('relationship_type IN (?)', self.permissible_types)
|
34
|
+
end
|
34
35
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
36
|
+
def self.permissible_types
|
37
|
+
permissible_types = ['public']
|
38
|
+
for record in self.group('permissor_type').group('permissor_id')
|
39
|
+
permissor = record.permissor_type.constantize.find(record.permissor_id)
|
40
|
+
unless permissor.nil?
|
41
|
+
for method in permissor.class.of
|
42
|
+
permissible_types << method.to_s
|
43
|
+
end
|
42
44
|
end
|
43
45
|
end
|
46
|
+
permissible_types.compact
|
44
47
|
end
|
45
|
-
permissible_types.compact
|
46
|
-
end
|
47
48
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
def existing_types
|
50
|
+
existing_types = ['public']
|
51
|
+
for method in permissor.class.of
|
52
|
+
existing_types << method.to_s
|
53
|
+
end
|
54
|
+
existing_types
|
52
55
|
end
|
53
|
-
existing_types
|
54
56
|
end
|
55
57
|
end
|
data/private_person.gemspec
CHANGED
@@ -2,16 +2,18 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
+
# stub: private_person 0.4.0 ruby lib
|
5
6
|
|
6
7
|
Gem::Specification.new do |s|
|
7
8
|
s.name = "private_person"
|
8
|
-
s.version = "0.
|
9
|
+
s.version = "0.4.0"
|
9
10
|
|
10
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib"]
|
11
13
|
s.authors = ["Karen Lundgren"]
|
12
|
-
s.date = "
|
14
|
+
s.date = "2014-10-10"
|
13
15
|
s.description = "Private person is an active record extension gem that allows a model to be given privacy settings over arbitrary models and polymorphic relations, putting users' accounts in control of their own privacy policies."
|
14
|
-
s.email = "
|
16
|
+
s.email = "karen.e.lundgren@gmail.com"
|
15
17
|
s.extra_rdoc_files = [
|
16
18
|
"LICENSE.txt",
|
17
19
|
"README.rdoc"
|
@@ -29,10 +31,10 @@ Gem::Specification.new do |s|
|
|
29
31
|
"lib/generators/private_person/install/templates/migrate/create_permissions_table.rb",
|
30
32
|
"lib/generators/private_person/utils.rb",
|
31
33
|
"lib/private_person.rb",
|
32
|
-
"lib/private_person/
|
34
|
+
"lib/private_person/extensions/acts_as_permissible.rb",
|
35
|
+
"lib/private_person/extensions/acts_as_permissor.rb",
|
36
|
+
"lib/private_person/extensions/acts_as_permitted.rb",
|
33
37
|
"lib/private_person/models/permission.rb",
|
34
|
-
"lib/private_person/models/permissor.rb",
|
35
|
-
"lib/private_person/models/permitted.rb",
|
36
38
|
"lib/private_person/version.rb",
|
37
39
|
"private_person.gemspec",
|
38
40
|
"script/rails",
|
@@ -52,7 +54,6 @@ Gem::Specification.new do |s|
|
|
52
54
|
"spec/dummy/config/initializers/mime_types.rb",
|
53
55
|
"spec/dummy/config/initializers/secret_token.rb",
|
54
56
|
"spec/dummy/config/initializers/session_store.rb",
|
55
|
-
"spec/dummy/config/initializers/wrap_parameters.rb",
|
56
57
|
"spec/dummy/config/locales/devise.en.yml",
|
57
58
|
"spec/dummy/config/locales/en.yml",
|
58
59
|
"spec/dummy/config/routes.rb",
|
@@ -74,52 +75,57 @@ Gem::Specification.new do |s|
|
|
74
75
|
"spec/support/permissor_support.rb",
|
75
76
|
"spec/support/users_support.rb"
|
76
77
|
]
|
77
|
-
s.homepage = "http://
|
78
|
+
s.homepage = "http://www.gemvein.com/museum/cases/private_person"
|
78
79
|
s.licenses = ["MIT"]
|
79
|
-
s.
|
80
|
-
s.rubygems_version = "2.0.3"
|
80
|
+
s.rubygems_version = "2.2.2"
|
81
81
|
s.summary = "Private person puts your users in control of their own privacy policies."
|
82
82
|
|
83
83
|
if s.respond_to? :specification_version then
|
84
84
|
s.specification_version = 4
|
85
85
|
|
86
86
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
87
|
-
s.add_runtime_dependency(%q<rails>, [">= 0"])
|
87
|
+
s.add_runtime_dependency(%q<rails>, [">= 4.0"])
|
88
|
+
s.add_runtime_dependency(%q<activerecord>, [">= 4.0"])
|
89
|
+
s.add_runtime_dependency(%q<private_person>, [">= 0"])
|
88
90
|
s.add_development_dependency(%q<rdoc>, [">= 0"])
|
89
91
|
s.add_development_dependency(%q<bundler>, [">= 0"])
|
90
92
|
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
91
93
|
s.add_development_dependency(%q<sqlite3>, [">= 0"])
|
92
94
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
93
95
|
s.add_development_dependency(%q<rspec-rails>, [">= 0"])
|
96
|
+
s.add_development_dependency(%q<rspec-its>, [">= 0"])
|
94
97
|
s.add_development_dependency(%q<shoulda-matchers>, [">= 0"])
|
95
98
|
s.add_development_dependency(%q<factory_girl_rails>, [">= 0"])
|
96
99
|
s.add_development_dependency(%q<database_cleaner>, [">= 0"])
|
97
|
-
s.add_development_dependency(%q<chalk_dust>, [">= 0"])
|
98
100
|
else
|
99
|
-
s.add_dependency(%q<rails>, [">= 0"])
|
101
|
+
s.add_dependency(%q<rails>, [">= 4.0"])
|
102
|
+
s.add_dependency(%q<activerecord>, [">= 4.0"])
|
103
|
+
s.add_dependency(%q<private_person>, [">= 0"])
|
100
104
|
s.add_dependency(%q<rdoc>, [">= 0"])
|
101
105
|
s.add_dependency(%q<bundler>, [">= 0"])
|
102
106
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
103
107
|
s.add_dependency(%q<sqlite3>, [">= 0"])
|
104
108
|
s.add_dependency(%q<rspec>, [">= 0"])
|
105
109
|
s.add_dependency(%q<rspec-rails>, [">= 0"])
|
110
|
+
s.add_dependency(%q<rspec-its>, [">= 0"])
|
106
111
|
s.add_dependency(%q<shoulda-matchers>, [">= 0"])
|
107
112
|
s.add_dependency(%q<factory_girl_rails>, [">= 0"])
|
108
113
|
s.add_dependency(%q<database_cleaner>, [">= 0"])
|
109
|
-
s.add_dependency(%q<chalk_dust>, [">= 0"])
|
110
114
|
end
|
111
115
|
else
|
112
|
-
s.add_dependency(%q<rails>, [">= 0"])
|
116
|
+
s.add_dependency(%q<rails>, [">= 4.0"])
|
117
|
+
s.add_dependency(%q<activerecord>, [">= 4.0"])
|
118
|
+
s.add_dependency(%q<private_person>, [">= 0"])
|
113
119
|
s.add_dependency(%q<rdoc>, [">= 0"])
|
114
120
|
s.add_dependency(%q<bundler>, [">= 0"])
|
115
121
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
116
122
|
s.add_dependency(%q<sqlite3>, [">= 0"])
|
117
123
|
s.add_dependency(%q<rspec>, [">= 0"])
|
118
124
|
s.add_dependency(%q<rspec-rails>, [">= 0"])
|
125
|
+
s.add_dependency(%q<rspec-its>, [">= 0"])
|
119
126
|
s.add_dependency(%q<shoulda-matchers>, [">= 0"])
|
120
127
|
s.add_dependency(%q<factory_girl_rails>, [">= 0"])
|
121
128
|
s.add_dependency(%q<database_cleaner>, [">= 0"])
|
122
|
-
s.add_dependency(%q<chalk_dust>, [">= 0"])
|
123
129
|
end
|
124
130
|
end
|
125
131
|
|
data/spec/dummy/db/test.sqlite3
CHANGED
Binary file
|
data/spec/models/page_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Permission do
|
3
|
+
describe PrivatePerson::Permission do
|
4
4
|
# Check relationships
|
5
5
|
it { should belong_to(:permissor) }
|
6
6
|
it { should belong_to(:permissible) }
|
@@ -9,8 +9,8 @@ describe Permission do
|
|
9
9
|
include_context 'permissions support'
|
10
10
|
|
11
11
|
describe '.by_permissor' do
|
12
|
-
subject { Permission.by_permissor(followed_user) }
|
13
|
-
|
12
|
+
subject { PrivatePerson::Permission.by_permissor(followed_user) }
|
13
|
+
its(:count) { should be 8 }
|
14
14
|
it { should include general_permission }
|
15
15
|
it { should include following_users_permission }
|
16
16
|
it { should include user_followers_permission }
|
@@ -22,33 +22,33 @@ describe Permission do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
describe '.by_permissible' do
|
25
|
-
subject { Permission.by_permissible(following_page) }
|
25
|
+
subject { PrivatePerson::Permission.by_permissible(following_page) }
|
26
26
|
it { should eq [following_users_permission]}
|
27
27
|
end
|
28
28
|
|
29
29
|
describe '.by_wildcard' do
|
30
|
-
subject { Permission.by_wildcard('Page') }
|
30
|
+
subject { PrivatePerson::Permission.by_wildcard('Page') }
|
31
31
|
it { should eq [general_permission] }
|
32
32
|
end
|
33
33
|
|
34
34
|
describe '.by_relationship_type' do
|
35
|
-
subject { Permission.by_relationship_type('following_users') }
|
36
|
-
|
35
|
+
subject { PrivatePerson::Permission.by_relationship_type('following_users') }
|
36
|
+
its(:count) { should be 3 }
|
37
37
|
it { should include general_permission }
|
38
38
|
it { should include following_users_permission }
|
39
39
|
it { should include public_permission }
|
40
40
|
end
|
41
41
|
|
42
42
|
describe '.blocked' do
|
43
|
-
subject { Permission.blocked }
|
44
|
-
|
43
|
+
subject { PrivatePerson::Permission.blocked }
|
44
|
+
its(:count) { should be 2 }
|
45
45
|
it { should include none_permission }
|
46
46
|
it { should include forbidden_permission }
|
47
47
|
end
|
48
48
|
|
49
49
|
describe '.legitimate' do
|
50
|
-
subject { Permission.legitimate }
|
51
|
-
|
50
|
+
subject { PrivatePerson::Permission.legitimate }
|
51
|
+
its(:count) { should be 6 }
|
52
52
|
it { should include general_permission }
|
53
53
|
it { should include following_users_permission }
|
54
54
|
it { should include user_followers_permission }
|
@@ -58,7 +58,7 @@ describe Permission do
|
|
58
58
|
end
|
59
59
|
|
60
60
|
describe '.permissible_types' do
|
61
|
-
subject { Permission.permissible_types.sort }
|
61
|
+
subject { PrivatePerson::Permission.permissible_types.sort }
|
62
62
|
it { should be_an Array }
|
63
63
|
it { should eq %w{following_users user_followers following_of_followings follower_of_followers public}.sort }
|
64
64
|
end
|
data/spec/models/user_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe User do
|
4
4
|
|
5
|
-
describe
|
5
|
+
describe 'acts_as_permitted' do
|
6
6
|
it { should have_many(:permissions_as_permissor) }
|
7
7
|
it { should have_many(:permissibles) }
|
8
8
|
|
@@ -40,26 +40,26 @@ describe User do
|
|
40
40
|
context 'when following' do
|
41
41
|
subject { following_user.permissions_by(followed_user) }
|
42
42
|
it { should be_an ActiveRecord::Relation }
|
43
|
-
its(:first) { should be_a Permission }
|
43
|
+
its(:first) { should be_a PrivatePerson::Permission }
|
44
44
|
it { should include following_users_permission }
|
45
45
|
it { should include public_permission }
|
46
46
|
end
|
47
47
|
context 'when follower' do
|
48
48
|
subject { follower_user.permissions_by(followed_user) }
|
49
49
|
it { should be_an ActiveRecord::Relation }
|
50
|
-
its(:first) { should be_a Permission }
|
50
|
+
its(:first) { should be_a PrivatePerson::Permission }
|
51
51
|
it { should include user_followers_permission }
|
52
52
|
end
|
53
53
|
context 'when following_of_followings' do
|
54
54
|
subject { following_of_following_user.permissions_by(followed_user) }
|
55
55
|
it { should be_an ActiveRecord::Relation }
|
56
|
-
its(:first) { should be_a Permission }
|
56
|
+
its(:first) { should be_a PrivatePerson::Permission }
|
57
57
|
it { should include following_of_followings_permission }
|
58
58
|
end
|
59
59
|
context 'when follower_of_follower' do
|
60
60
|
subject { follower_of_follower_user.permissions_by(followed_user) }
|
61
61
|
it { should be_an ActiveRecord::Relation }
|
62
|
-
its(:first) { should be_a Permission }
|
62
|
+
its(:first) { should be_a PrivatePerson::Permission }
|
63
63
|
it { should include follower_of_followers_permission }
|
64
64
|
end
|
65
65
|
end
|
@@ -101,7 +101,7 @@ describe User do
|
|
101
101
|
end
|
102
102
|
end
|
103
103
|
|
104
|
-
describe
|
104
|
+
describe 'acts_as_permissor' do
|
105
105
|
include_context 'users support'
|
106
106
|
include_context 'permissor support'
|
107
107
|
context 'Instance Methods' do
|
data/spec/spec_helper.rb
CHANGED
@@ -18,7 +18,7 @@ shared_context 'permissions support' do
|
|
18
18
|
let!(:forbidden_permission) { FactoryGirl.create(:permission, :permissor => followed_user, :permissible => forbidden_page, :relationship_type => 'forbidden') }
|
19
19
|
let!(:none_permission) { FactoryGirl.create(:permission, :permissor => followed_user, :permissible => none_page, :relationship_type => 'none') }
|
20
20
|
|
21
|
-
let!(:permissions) { Permission.all }
|
22
|
-
let!(:wildcards) { Permission.by_wildcard('Page') }
|
21
|
+
let!(:permissions) { PrivatePerson::Permission.all }
|
22
|
+
let!(:wildcards) { PrivatePerson::Permission.by_wildcard('Page') }
|
23
23
|
|
24
24
|
end
|
metadata
CHANGED
@@ -1,182 +1,210 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: private_person
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Karen Lundgren
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-10-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activerecord
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '4.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '4.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: private_person
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
18
46
|
- !ruby/object:Gem::Version
|
19
47
|
version: '0'
|
20
48
|
type: :runtime
|
21
49
|
prerelease: false
|
22
50
|
version_requirements: !ruby/object:Gem::Requirement
|
23
51
|
requirements:
|
24
|
-
- -
|
52
|
+
- - ">="
|
25
53
|
- !ruby/object:Gem::Version
|
26
54
|
version: '0'
|
27
55
|
- !ruby/object:Gem::Dependency
|
28
56
|
name: rdoc
|
29
57
|
requirement: !ruby/object:Gem::Requirement
|
30
58
|
requirements:
|
31
|
-
- -
|
59
|
+
- - ">="
|
32
60
|
- !ruby/object:Gem::Version
|
33
61
|
version: '0'
|
34
62
|
type: :development
|
35
63
|
prerelease: false
|
36
64
|
version_requirements: !ruby/object:Gem::Requirement
|
37
65
|
requirements:
|
38
|
-
- -
|
66
|
+
- - ">="
|
39
67
|
- !ruby/object:Gem::Version
|
40
68
|
version: '0'
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
70
|
name: bundler
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
44
72
|
requirements:
|
45
|
-
- -
|
73
|
+
- - ">="
|
46
74
|
- !ruby/object:Gem::Version
|
47
75
|
version: '0'
|
48
76
|
type: :development
|
49
77
|
prerelease: false
|
50
78
|
version_requirements: !ruby/object:Gem::Requirement
|
51
79
|
requirements:
|
52
|
-
- -
|
80
|
+
- - ">="
|
53
81
|
- !ruby/object:Gem::Version
|
54
82
|
version: '0'
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
84
|
name: jeweler
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
58
86
|
requirements:
|
59
|
-
- -
|
87
|
+
- - ">="
|
60
88
|
- !ruby/object:Gem::Version
|
61
89
|
version: '0'
|
62
90
|
type: :development
|
63
91
|
prerelease: false
|
64
92
|
version_requirements: !ruby/object:Gem::Requirement
|
65
93
|
requirements:
|
66
|
-
- -
|
94
|
+
- - ">="
|
67
95
|
- !ruby/object:Gem::Version
|
68
96
|
version: '0'
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: sqlite3
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
72
100
|
requirements:
|
73
|
-
- -
|
101
|
+
- - ">="
|
74
102
|
- !ruby/object:Gem::Version
|
75
103
|
version: '0'
|
76
104
|
type: :development
|
77
105
|
prerelease: false
|
78
106
|
version_requirements: !ruby/object:Gem::Requirement
|
79
107
|
requirements:
|
80
|
-
- -
|
108
|
+
- - ">="
|
81
109
|
- !ruby/object:Gem::Version
|
82
110
|
version: '0'
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: rspec
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
86
114
|
requirements:
|
87
|
-
- -
|
115
|
+
- - ">="
|
88
116
|
- !ruby/object:Gem::Version
|
89
117
|
version: '0'
|
90
118
|
type: :development
|
91
119
|
prerelease: false
|
92
120
|
version_requirements: !ruby/object:Gem::Requirement
|
93
121
|
requirements:
|
94
|
-
- -
|
122
|
+
- - ">="
|
95
123
|
- !ruby/object:Gem::Version
|
96
124
|
version: '0'
|
97
125
|
- !ruby/object:Gem::Dependency
|
98
126
|
name: rspec-rails
|
99
127
|
requirement: !ruby/object:Gem::Requirement
|
100
128
|
requirements:
|
101
|
-
- -
|
129
|
+
- - ">="
|
102
130
|
- !ruby/object:Gem::Version
|
103
131
|
version: '0'
|
104
132
|
type: :development
|
105
133
|
prerelease: false
|
106
134
|
version_requirements: !ruby/object:Gem::Requirement
|
107
135
|
requirements:
|
108
|
-
- -
|
136
|
+
- - ">="
|
109
137
|
- !ruby/object:Gem::Version
|
110
138
|
version: '0'
|
111
139
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
140
|
+
name: rspec-its
|
113
141
|
requirement: !ruby/object:Gem::Requirement
|
114
142
|
requirements:
|
115
|
-
- -
|
143
|
+
- - ">="
|
116
144
|
- !ruby/object:Gem::Version
|
117
145
|
version: '0'
|
118
146
|
type: :development
|
119
147
|
prerelease: false
|
120
148
|
version_requirements: !ruby/object:Gem::Requirement
|
121
149
|
requirements:
|
122
|
-
- -
|
150
|
+
- - ">="
|
123
151
|
- !ruby/object:Gem::Version
|
124
152
|
version: '0'
|
125
153
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
154
|
+
name: shoulda-matchers
|
127
155
|
requirement: !ruby/object:Gem::Requirement
|
128
156
|
requirements:
|
129
|
-
- -
|
157
|
+
- - ">="
|
130
158
|
- !ruby/object:Gem::Version
|
131
159
|
version: '0'
|
132
160
|
type: :development
|
133
161
|
prerelease: false
|
134
162
|
version_requirements: !ruby/object:Gem::Requirement
|
135
163
|
requirements:
|
136
|
-
- -
|
164
|
+
- - ">="
|
137
165
|
- !ruby/object:Gem::Version
|
138
166
|
version: '0'
|
139
167
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
168
|
+
name: factory_girl_rails
|
141
169
|
requirement: !ruby/object:Gem::Requirement
|
142
170
|
requirements:
|
143
|
-
- -
|
171
|
+
- - ">="
|
144
172
|
- !ruby/object:Gem::Version
|
145
173
|
version: '0'
|
146
174
|
type: :development
|
147
175
|
prerelease: false
|
148
176
|
version_requirements: !ruby/object:Gem::Requirement
|
149
177
|
requirements:
|
150
|
-
- -
|
178
|
+
- - ">="
|
151
179
|
- !ruby/object:Gem::Version
|
152
180
|
version: '0'
|
153
181
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
182
|
+
name: database_cleaner
|
155
183
|
requirement: !ruby/object:Gem::Requirement
|
156
184
|
requirements:
|
157
|
-
- -
|
185
|
+
- - ">="
|
158
186
|
- !ruby/object:Gem::Version
|
159
187
|
version: '0'
|
160
188
|
type: :development
|
161
189
|
prerelease: false
|
162
190
|
version_requirements: !ruby/object:Gem::Requirement
|
163
191
|
requirements:
|
164
|
-
- -
|
192
|
+
- - ">="
|
165
193
|
- !ruby/object:Gem::Version
|
166
194
|
version: '0'
|
167
195
|
description: Private person is an active record extension gem that allows a model
|
168
196
|
to be given privacy settings over arbitrary models and polymorphic relations, putting
|
169
197
|
users' accounts in control of their own privacy policies.
|
170
|
-
email:
|
198
|
+
email: karen.e.lundgren@gmail.com
|
171
199
|
executables: []
|
172
200
|
extensions: []
|
173
201
|
extra_rdoc_files:
|
174
202
|
- LICENSE.txt
|
175
203
|
- README.rdoc
|
176
204
|
files:
|
177
|
-
- .document
|
178
|
-
- .idea/scopes/scope_settings.xml
|
179
|
-
- .rspec
|
205
|
+
- ".document"
|
206
|
+
- ".idea/scopes/scope_settings.xml"
|
207
|
+
- ".rspec"
|
180
208
|
- Gemfile
|
181
209
|
- LICENSE.txt
|
182
210
|
- README.rdoc
|
@@ -186,10 +214,10 @@ files:
|
|
186
214
|
- lib/generators/private_person/install/templates/migrate/create_permissions_table.rb
|
187
215
|
- lib/generators/private_person/utils.rb
|
188
216
|
- lib/private_person.rb
|
189
|
-
- lib/private_person/
|
217
|
+
- lib/private_person/extensions/acts_as_permissible.rb
|
218
|
+
- lib/private_person/extensions/acts_as_permissor.rb
|
219
|
+
- lib/private_person/extensions/acts_as_permitted.rb
|
190
220
|
- lib/private_person/models/permission.rb
|
191
|
-
- lib/private_person/models/permissor.rb
|
192
|
-
- lib/private_person/models/permitted.rb
|
193
221
|
- lib/private_person/version.rb
|
194
222
|
- private_person.gemspec
|
195
223
|
- script/rails
|
@@ -209,7 +237,6 @@ files:
|
|
209
237
|
- spec/dummy/config/initializers/mime_types.rb
|
210
238
|
- spec/dummy/config/initializers/secret_token.rb
|
211
239
|
- spec/dummy/config/initializers/session_store.rb
|
212
|
-
- spec/dummy/config/initializers/wrap_parameters.rb
|
213
240
|
- spec/dummy/config/locales/devise.en.yml
|
214
241
|
- spec/dummy/config/locales/en.yml
|
215
242
|
- spec/dummy/config/routes.rb
|
@@ -230,7 +257,7 @@ files:
|
|
230
257
|
- spec/support/permissions_support.rb
|
231
258
|
- spec/support/permissor_support.rb
|
232
259
|
- spec/support/users_support.rb
|
233
|
-
homepage: http://
|
260
|
+
homepage: http://www.gemvein.com/museum/cases/private_person
|
234
261
|
licenses:
|
235
262
|
- MIT
|
236
263
|
metadata: {}
|
@@ -240,17 +267,17 @@ require_paths:
|
|
240
267
|
- lib
|
241
268
|
required_ruby_version: !ruby/object:Gem::Requirement
|
242
269
|
requirements:
|
243
|
-
- -
|
270
|
+
- - ">="
|
244
271
|
- !ruby/object:Gem::Version
|
245
272
|
version: '0'
|
246
273
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
247
274
|
requirements:
|
248
|
-
- -
|
275
|
+
- - ">="
|
249
276
|
- !ruby/object:Gem::Version
|
250
277
|
version: '0'
|
251
278
|
requirements: []
|
252
279
|
rubyforge_project:
|
253
|
-
rubygems_version: 2.
|
280
|
+
rubygems_version: 2.2.2
|
254
281
|
signing_key:
|
255
282
|
specification_version: 4
|
256
283
|
summary: Private person puts your users in control of their own privacy policies.
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module PrivatePerson
|
2
|
-
module Permissible
|
3
|
-
def acts_as_permissible(params = {})
|
4
|
-
if params[:by].nil?
|
5
|
-
raise 'Called acts_as_permissible, but without a :by parameter.'
|
6
|
-
end
|
7
|
-
class_attribute :by
|
8
|
-
self.by = params[:by]
|
9
|
-
|
10
|
-
class_eval do
|
11
|
-
has_many :permissions, :as => :permissible
|
12
|
-
has_one :permissor, :through => :permissions, :as => :permissor
|
13
|
-
|
14
|
-
def is_public?
|
15
|
-
!permissions.by_relationship_type(nil).empty?
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
module PrivatePerson
|
2
|
-
module Permissor
|
3
|
-
def acts_as_permissor(params = {})
|
4
|
-
if params[:of].nil?
|
5
|
-
raise 'Called acts_as_permissor, but without an :of parameter.'
|
6
|
-
end
|
7
|
-
class_attribute :of
|
8
|
-
self.of = params[:of]
|
9
|
-
class_name = params[:class_name] || params[:of].to_s.classify
|
10
|
-
class_name.constantize.acts_as_permitted
|
11
|
-
class_eval do
|
12
|
-
has_many :permissions_as_permissor, :as => :permissor, :class_name => 'Permission'
|
13
|
-
has_many :permissibles, :through => :permissions, :as => :permissor
|
14
|
-
|
15
|
-
def permit!(whom, what)
|
16
|
-
existing = self.permissions_as_permissor.by_relationship_type(whom).by_permissible(what)
|
17
|
-
|
18
|
-
if existing.empty?
|
19
|
-
self.permissions_as_permissor.create!(permission_params(whom, what))
|
20
|
-
end
|
21
|
-
self.permissions_as_permissor.reload
|
22
|
-
end
|
23
|
-
|
24
|
-
def wildcard_permit!(whom, what)
|
25
|
-
existing = self.permissions_as_permissor.by_relationship_type(whom).where(:permissible_type, what)
|
26
|
-
|
27
|
-
if existing.empty?
|
28
|
-
self.permissions_as_permissor.create!(wildcard_permission_params(whom, what))
|
29
|
-
end
|
30
|
-
self.permissions_as_permissor.reload
|
31
|
-
end
|
32
|
-
|
33
|
-
def permission_params(whom, what)
|
34
|
-
ActionController::Parameters.new({:relationship_type => whom, :permissible_type => what.class.name, :permissible_id => what.id}).permit!
|
35
|
-
end
|
36
|
-
|
37
|
-
def wildcard_permission_params(whom, what)
|
38
|
-
ActionController::Parameters.new({:relationship_type => whom, :permissible_type => what}).permit!
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
module PrivatePerson
|
2
|
-
module Permitted
|
3
|
-
def acts_as_permitted
|
4
|
-
class_eval do
|
5
|
-
def is_permitted?(permissor, permissible)
|
6
|
-
if permissible.nil?
|
7
|
-
raise 'Called is_permitted? on nil. Does not compute. Preparing to self destruct.'
|
8
|
-
end
|
9
|
-
unless Permission.by_permissible(permissible).blocked.empty?
|
10
|
-
return false
|
11
|
-
end
|
12
|
-
wildcards = permissions_by(permissor).by_wildcard(permissible.class.name).legitimate
|
13
|
-
if wildcards.present?
|
14
|
-
return true
|
15
|
-
end
|
16
|
-
permissions = permissions_by(permissor).by_permissible(permissible).legitimate
|
17
|
-
if permissions.present?
|
18
|
-
return true
|
19
|
-
end
|
20
|
-
return false
|
21
|
-
end
|
22
|
-
|
23
|
-
def permissions_by(permissor)
|
24
|
-
Permission.by_permissor(permissor).by_relationship_type(relationship_to(permissor))
|
25
|
-
end
|
26
|
-
|
27
|
-
def relationship_to(permissor)
|
28
|
-
# First make sure we're not a new user
|
29
|
-
if self.new_record?
|
30
|
-
return 'public'
|
31
|
-
end
|
32
|
-
# Next check for an efficient method
|
33
|
-
for relationship_method in permissor.class.of
|
34
|
-
is_method = ('is_' + relationship_method.to_s.singularize + '_of?').to_sym
|
35
|
-
if respond_to?(is_method) and self.send(is_method, permissor)
|
36
|
-
return relationship_method.to_s
|
37
|
-
end
|
38
|
-
end
|
39
|
-
# Then check for a slow method
|
40
|
-
for relationship_method in permissor.class.of
|
41
|
-
relationship_members = permissor.send(relationship_method.to_sym)
|
42
|
-
if relationship_members.present? and relationship_members.include? self
|
43
|
-
return relationship_method.to_s
|
44
|
-
end
|
45
|
-
end
|
46
|
-
return 'public'
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
# Be sure to restart your server when you modify this file.
|
2
|
-
#
|
3
|
-
# This file contains settings for ActionController::ParamsWrapper which
|
4
|
-
# is enabled by default.
|
5
|
-
|
6
|
-
# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
|
7
|
-
ActiveSupport.on_load(:action_controller) do
|
8
|
-
wrap_parameters :format => [:json]
|
9
|
-
end
|
10
|
-
|
11
|
-
# Disable root element in JSON by default.
|
12
|
-
ActiveSupport.on_load(:active_record) do
|
13
|
-
self.include_root_in_json = false
|
14
|
-
end
|