Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Connected groups as replacement for acts_as_dag #30

Open
wants to merge 43 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
7478e16
connected groups: implementing StructureableConnectedGroups
fiedl Sep 10, 2015
db04f36
connected groups: first attempt to implement a Membership model, whic…
fiedl Sep 10, 2015
8278ce5
connected groups: improving mechanism to find Membership objects
fiedl Sep 11, 2015
63bd0d1
connected groups: find memberships for user and group
fiedl Sep 11, 2015
a609ac6
connected groups: validity range for memberships
fiedl Sep 12, 2015
32f4356
connected groups: officer_parent groups separate group connections.
fiedl Sep 13, 2015
823757c
connected groups: fix: the default scope is still needed for UserGrou…
fiedl Sep 14, 2015
edd3b9a
connected groups: adding validity check Membership#currently_valid?
fiedl Sep 14, 2015
e7777b9
connected groups: adding MembershipCollection#uniq
fiedl Sep 14, 2015
3e970f7
connected groups: adding Membership.create
fiedl Sep 14, 2015
d5e1911
connected groups: Adding methods to Membership for validity range loc…
fiedl Sep 14, 2015
5fc2958
connected groups: addimg Membership#id and Membership.find(id).
fiedl Sep 14, 2015
d3d6d60
connected groups: fixing Membership#where(group: …)
fiedl Sep 15, 2015
c7f33ca
connected groups: N+1 optimization and query count spec
fiedl Sep 15, 2015
cc70b97
connected groups: MembershipPersistence methods, which are needed whe…
fiedl Sep 15, 2015
9f3e592
connected groups: migrating memberships#index to the new mechanism.
fiedl Sep 15, 2015
2a96d5b
connected groups: fixing spec for Group#build_membership after change…
fiedl Sep 15, 2015
4291179
connected groups: moving specs from membership_spec to membership_col…
fiedl Sep 16, 2015
080efc5
connected groups: implementing Membership#update_attributes
fiedl Sep 16, 2015
7680f77
connected groups: implementing MembershipCollection#first_per_group
fiedl Sep 16, 2015
69596d0
connected groups: moving spec to correct folder
fiedl Sep 16, 2015
2811715
connected groups: Implementing MembershipCollection#join_validity_ran…
fiedl Sep 16, 2015
68e8b26
connected groups: migrating `group_members#index` to the new mechanism.
fiedl Sep 16, 2015
72bc14c
connected groups: Migrating `User#memberships` and `User#groups` to t…
fiedl Sep 16, 2015
1937c06
connected groups: working on migration from UserGroupMembership to Me…
fiedl Sep 27, 2015
5d7cda2
connected groups: User#memberships interface migrated.
fiedl Oct 1, 2015
423ac05
connected groups: migrating Group#members interface to the new mechan…
fiedl Oct 3, 2015
d30e661
Membership: introduce some model caching
fiedl Oct 4, 2015
d66635d
Merge branch 'master' into sf/connected_groups
fiedl Oct 28, 2015
4f2028b
connected groups: working on Group#members
fiedl Nov 1, 2015
704a20b
connected groups: fixing caching issue in Membership.where(user: …, g…
fiedl Nov 3, 2015
b15e779
caching: Setting the cache timestamp length according to the database.
fiedl Nov 4, 2015
720fbc9
connected groups: fixing model specs.
fiedl Nov 4, 2015
794f18c
implementing Array#pluck
fiedl Nov 4, 2015
5ba6fa3
connected groups: removing the acts_as_dag gem.
fiedl Nov 4, 2015
da98c55
connected groups: migrating Corporation#status_groups
fiedl Nov 4, 2015
37f1ace
connected groups: migrating Group#workflows
fiedl Nov 4, 2015
db4553b
connected groups: implementing Structureable#connected_descendant_pages
fiedl Nov 8, 2015
fdad071
connected groups: working on graph caching:
fiedl Nov 8, 2015
367d377
connected groups: working on graph cache refreshments
fiedl Nov 12, 2015
4350a09
working on graph performance spec
fiedl Apr 12, 2016
bfabfbe
working on graph performance specs.
fiedl Apr 12, 2016
6e3f115
working on connected groups to get lots of model specs green
fiedl Apr 12, 2016
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 54 additions & 51 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ PATH
remote: .
specs:
your_platform (1.0.1)
acts-as-dag (>= 2.5.7)
acts_as_tree
auto_html (>= 1.6.4)
autosize-rails
Expand All @@ -47,6 +46,7 @@ PATH
edit_mode (>= 1.0.2)
eventmachine (>= 1.0.7)
execjs (>= 2.5.2)
faker
fnordmetric
font-awesome-rails (~> 4.3.0)
foreman
Expand Down Expand Up @@ -88,6 +88,7 @@ PATH
slim_breadcrumb (>= 0.0.3)
strong_parameters
sugar-rails
table-formatter
to_xls
transaction_retry
turboboost
Expand Down Expand Up @@ -135,24 +136,22 @@ GEM
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
acts-as-dag (4.0.0)
activemodel
activerecord (~> 4.0, >= 4.0.0)
acts_as_tree (2.2.0)
acts_as_tree (2.4.0)
activerecord (>= 3.0.0)
addressable (2.3.8)
ambry (0.3.1)
arel (6.0.0)
auto_html (1.6.4)
redcarpet (~> 3.1)
rinku (~> 1.5.0)
autoprefixer-rails (6.0.3)
auto_html (2.0.0)
gemoji (~> 2.1)
redcarpet (~> 3.3)
rinku (~> 1.7)
tag_helper (~> 0.5)
autoprefixer-rails (6.3.6)
execjs
json
autosize-rails (1.18.17)
rails (>= 3.1)
bcrypt (3.1.10)
best_in_place (3.0.3)
bcrypt (3.1.11)
best_in_place (3.1.0)
actionpack (>= 3.2)
railties (>= 3.2)
binding_of_caller (0.7.2)
Expand All @@ -178,7 +177,7 @@ GEM
rack (>= 1.0.0)
rack-test (>= 0.5.4)
xpath (~> 2.0)
carrierwave (0.10.0)
carrierwave (0.11.0)
activemodel (>= 3.2.0)
activesupport (>= 3.2.0)
json (>= 1.7)
Expand All @@ -199,6 +198,7 @@ GEM
execjs
coffee-script-source (1.9.1.1)
colored (1.2)
concurrent-ruby (1.0.1)
connection_pool (2.2.0)
coveralls (0.7.12)
multi_json (~> 1.10)
Expand All @@ -209,7 +209,7 @@ GEM
daemons (1.2.3)
database_cleaner (1.4.1)
debug_inspector (0.0.2)
devise (3.5.2)
devise (3.5.6)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 3.2.6, < 5)
Expand All @@ -224,23 +224,25 @@ GEM
jquery-rails
jquery-turbolinks
rails (>= 3.2)
em-hiredis (0.3.0)
em-hiredis (0.3.1)
eventmachine (~> 1.0)
hiredis (~> 0.5.0)
hiredis (~> 0.6.0)
em-websocket (0.3.8)
addressable (>= 2.1.1)
eventmachine (>= 0.12.9)
email_spec (1.6.0)
launchy (~> 2.1)
mail (~> 2.2)
erubis (2.7.0)
eventmachine (1.0.8)
eventmachine (1.0.9.1)
execjs (2.6.0)
factory_girl (4.5.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.5.0)
factory_girl (~> 4.5.0)
railties (>= 3.0.0)
faker (1.6.3)
i18n (~> 0.5)
fastercsv (1.5.5)
ffi (1.9.8)
fnordmetric (1.2.9)
Expand All @@ -262,13 +264,13 @@ GEM
foreman (0.78.0)
thor (~> 0.19.1)
formatador (0.2.5)
formtastic (3.1.3)
formtastic (3.1.4)
actionpack (>= 3.2.13)
fuubar (1.3.3)
rspec (>= 2.14.0, < 3.1.0)
ruby-progressbar (~> 1.4)
gemoji (2.1.0)
geocoder (1.2.11)
geocoder (1.3.2)
globalid (0.3.5)
activesupport (>= 4.1.0)
gravatar_image_tag (1.2.0)
Expand All @@ -294,13 +296,13 @@ GEM
tilt
highline (1.6.21)
hike (1.2.3)
hiredis (0.5.2)
hiredis (0.6.1)
hitimes (1.2.2)
http-cookie (1.0.2)
domain_name (~> 0.5)
i18n (0.7.0)
i18n-js (3.0.0.rc11)
i18n (~> 0.6)
i18n-js (3.0.0.rc12)
i18n (~> 0.6, >= 0.6.6)
icalendar (2.3.0)
jbuilder (2.2.12)
activesupport (>= 3.0.0, < 5)
Expand All @@ -325,7 +327,7 @@ GEM
jquery-ui-rails (4.2.1)
railties (>= 3.2.16)
json (1.8.3)
judge (2.1.0)
judge (2.1.1)
rails (>= 3.1)
kgio (2.9.3)
launchy (2.4.3)
Expand All @@ -340,11 +342,11 @@ GEM
loofah (2.0.3)
nokogiri (>= 1.5.9)
lumberjack (1.0.9)
merit (2.3.2)
merit (2.3.3)
ambry (~> 0.3.0)
method_source (0.8.2)
mime-types (1.25.1)
mini_magick (4.3.6)
mini_magick (4.5.1)
mini_portile (0.6.2)
minitest (5.8.1)
multi_json (1.11.2)
Expand All @@ -359,7 +361,7 @@ GEM
orm_adapter (0.5.0)
passgen (1.0.2)
pdf-core (0.5.1)
phony (2.15.4)
phony (2.15.20)
poltergeist (1.6.0)
capybara (~> 2.1)
cliver (~> 0.3.1)
Expand All @@ -372,14 +374,14 @@ GEM
coderay (~> 1.1.0)
method_source (~> 0.8.1)
slop (~> 3.4)
public_activity (1.4.2)
public_activity (1.4.3)
actionpack (>= 3.0.0)
activerecord (>= 3.0)
i18n (>= 0.5.0)
railties (>= 3.0.0)
rack (1.6.4)
rack-mini-profiler (0.9.7)
rack (>= 1.1.3)
rack-mini-profiler (0.9.9.2)
rack (>= 1.2.0)
rack-protection (1.5.3)
rack
rack-ssl (1.4.1)
Expand All @@ -405,8 +407,8 @@ GEM
rails-deprecated_sanitizer (>= 1.0.1)
rails-html-sanitizer (1.0.2)
loofah (~> 2.0)
rails-i18n (4.0.5)
i18n (~> 0.6)
rails-i18n (4.0.8)
i18n (~> 0.7)
railties (~> 4.0)
rails-settings-cached (0.4.1)
rails (>= 4.0.0)
Expand All @@ -423,37 +425,35 @@ GEM
rdoc (4.2.0)
json (~> 1.4)
redcarpet (3.3.2)
redis (3.2.1)
redis (3.2.2)
redis-actionpack (4.0.1)
actionpack (~> 4)
redis-rack (~> 1.5.0)
redis-store (~> 1.1.0)
redis-activesupport (4.1.4)
redis-activesupport (4.1.5)
activesupport (>= 3, < 5)
redis-store (~> 1.1.0)
redis-namespace (1.5.2)
redis (~> 3.0, >= 3.0.4)
redis-rack (1.5.0)
rack (~> 1.5)
redis-store (~> 1.1.0)
redis-rails (4.0.0)
redis-actionpack (~> 4)
redis-activesupport (~> 4)
redis-store (~> 1.1.0)
redis-store (1.1.6)
redis-store (1.1.7)
redis (>= 2.2)
ref (1.0.5)
refile (0.5.5)
mime-types
rest-client (~> 1.8)
sinatra (~> 1.4.5)
responders (2.1.0)
railties (>= 4.2.0, < 5)
responders (2.1.2)
railties (>= 4.2.0, < 5.1)
rest-client (1.8.0)
http-cookie (>= 1.0.2, < 2.0)
mime-types (>= 1.16, < 3.0)
netrc (~> 0.7)
rinku (1.5.1)
rinku (1.7.3)
rspec (2.14.1)
rspec-core (~> 2.14.0)
rspec-expectations (~> 2.14.0)
Expand All @@ -472,7 +472,7 @@ GEM
rspec-mocks (~> 2.14.0)
rspec-rerun (0.3.0)
rspec
ruby-ole (1.2.11.8)
ruby-ole (1.2.12)
ruby-progressbar (1.7.5)
ruby2ruby (2.1.3)
ruby_parser (~> 3.1)
Expand All @@ -490,21 +490,19 @@ GEM
rdoc (~> 4.0)
sexp_processor (4.5.0)
shellany (0.0.1)
sidekiq (3.4.2)
celluloid (~> 0.16.0)
sidekiq (4.1.1)
concurrent-ruby (~> 1.0)
connection_pool (~> 2.2, >= 2.2.0)
json (~> 1.0)
redis (~> 3.2, >= 3.2.1)
redis-namespace (~> 1.5, >= 1.5.2)
sidekiq-limit_fetch (2.4.2)
sidekiq (>= 2.6.5, < 4.0)
sidekiq-limit_fetch (3.1.0)
sidekiq (>= 4)
simplecov (0.9.2)
docile (~> 1.1.0)
multi_json (~> 1.0)
simplecov-html (~> 0.9.0)
simplecov-html (0.9.0)
sinatra (1.4.6)
rack (~> 1.4)
sinatra (1.4.7)
rack (~> 1.5)
rack-protection (~> 1.4)
tilt (>= 1.3, < 3)
slim_breadcrumb (0.0.3)
Expand All @@ -514,7 +512,7 @@ GEM
sass-rails
slop (3.6.0)
spork (0.9.2)
spreadsheet (1.0.8)
spreadsheet (1.1.2)
ruby-ole (>= 1.0)
spring (1.3.3)
sprockets (2.12.4)
Expand All @@ -532,6 +530,8 @@ GEM
railties (>= 3.2.0)
sugar-rails (1.4.1)
railties (>= 3.0.0)
table-formatter (0.2.0)
tag_helper (0.5.0)
term-ansicolor (1.3.0)
tins (~> 1.0)
terminal-table (1.4.5)
Expand Down Expand Up @@ -579,7 +579,7 @@ GEM
kgio (~> 2.6)
rack
raindrops (~> 0.7)
warden (1.2.3)
warden (1.2.6)
rack (>= 1.0)
web-console (2.1.3)
activemodel (>= 4.0)
Expand All @@ -594,7 +594,7 @@ GEM
eventmachine (~> 1.0.0.beta.4)
rack
thin
will_paginate (3.0.7)
will_paginate (3.1.0)
xpath (2.0.0)
nokogiri (~> 1.3)
yajl-ruby (1.2.1)
Expand Down Expand Up @@ -650,3 +650,6 @@ DEPENDENCIES
workflow_kit!
yard
your_platform!

BUNDLED WITH
1.11.2
14 changes: 2 additions & 12 deletions app/controllers/group_members_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,21 +31,11 @@ def load_and_authorize_group
def load_and_authorize_memberships
@memberships = @group.memberships_for_member_list
@memberships = @memberships.started_after(params[:valid_from].to_datetime) if params[:valid_from].present?

allowed_members = @group.members.accessible_by(current_ability)
allowed_memberships = @group.memberships.where(descendant_id: allowed_members.map(&:id))
@memberships = @memberships & allowed_memberships
@memberships = @memberships.select { |membership| can? :read, membership.user }
end

def load_members_from_memberships
# Fill also the members into a separate variable.
#
@members = @group.members.includes(:links_as_child).where(dag_links: {id: @memberships.map(&:id)})

# For some special groups, the first method of retreiving the members does not work.
# Fallback to these slower methods:
@members = User.includes(:links_as_child).where(dag_links: {id: @memberships.map(&:id)}) if @members.empty?
@members = @memberships.collect { |membership| membership.user } if @members.empty?
@members = @memberships.collect { |membership| membership.user }
end

def load_own_memberships
Expand Down
13 changes: 2 additions & 11 deletions app/controllers/groups_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -51,20 +51,11 @@ def show
Rack::MiniProfiler.step('groups#show controller: cancan') do
# Make sure only members that are allowed to be seen are in this array!
#
allowed_member_ids = @group.members.accessible_by(current_ability).pluck(:id)
allowed_memberships = @group.memberships.where(descendant_id: allowed_member_ids)
@memberships = @memberships & allowed_memberships
@memberships = @memberships.to_a.select { |m| can? :read, m.user }
end

Rack::MiniProfiler.step('groups#show controller: fetch members') do
# Fill also the members into a separate variable.
#
@members = @group.members.includes(:links_as_child).where(dag_links: {id: @memberships.map(&:id)})

# For some special groups, the first method of retreiving the members does not work.
# Fallback to these slower methods:
@members = User.includes(:links_as_child).where(dag_links: {id: @memberships.map(&:id)}) if @members.empty?
@members = @memberships.collect { |membership| membership.user } if @members.empty?
@members = @memberships.collect { |membership| membership.user }
end

# for performance reasons deactivated for the moment.
Expand Down
Loading