effective_memberships 0.1.23 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 928383b46dabf57a0ee3e4ebed61050c15ddd4d2da01fcc50cec8ead2ded706b
4
- data.tar.gz: 2e7b2f5b6e5e75991239f093783ab8a83c6f2b522fa8f5a482c067d04cb122ba
3
+ metadata.gz: 2f8c32ed9ffd17db6a7c0826bfb9eb72615ec3e7049adbb9f18b99cb8957c905
4
+ data.tar.gz: 5685ca74db5bd94d757c6a209b135160a015fddd2900ba6d66b55976a495eaa9
5
5
  SHA512:
6
- metadata.gz: 8cd3faa8139e44db7aa485de820bed35f09b9d8cf8b2d56010cd87bf47515f143b9289362978cc305d63a50d8a24b4b8b9dadaabd240fffcc50abb970e8ac7d4
7
- data.tar.gz: ba43e01d4180108144333d61d17f22a4297374db0842c6e33bf7044d381b192883d6813532b5717dca8df778293b065e1a0ba7d07a2c867f2c60b03912520e1e
6
+ metadata.gz: 9590986cb17a70c70183acfa7a4bf7dbc23959fd9482058737a916f767feedeb77a14444f2b6f1ed9631bb1c4d7d70affaf46e38f879a0af1a6acdc4ac480c94
7
+ data.tar.gz: 4dc42f6e02b50adad0c8c714ee64e97ef398828a391736db51348fed377ced92784cf116f21f147edec98eea06c365925d4d0efce559001c839d2ad89826e7ca
@@ -16,7 +16,6 @@ module Effective
16
16
  end
17
17
  end
18
18
 
19
-
20
19
  after_save do
21
20
  flash.now[:success] = ''
22
21
  end
@@ -21,6 +21,8 @@ module EffectiveMembershipsOwner
21
21
  end
22
22
 
23
23
  included do
24
+ acts_as_role_restricted unless respond_to?(:acts_as_role_restricted?)
25
+
24
26
  # App scoped
25
27
  has_many :applicants, -> { order(:id) }, inverse_of: :owner, as: :owner
26
28
  has_many :fee_payments, -> { order(:id) }, inverse_of: :owner, as: :owner
@@ -57,6 +59,31 @@ module EffectiveMembershipsOwner
57
59
  owners || [self]
58
60
  end
59
61
 
62
+ # This is the calculated way of determining if an owner is a member or not.
63
+ # The correct way to check for membership is: current_user.is?(:member)
64
+ def membership_present?
65
+ individual_membership_present? || organization_membership_present?
66
+ end
67
+
68
+ def individual_membership_present?
69
+ membership.present? && !membership.marked_for_destruction?
70
+ end
71
+
72
+ def organization_membership_present?(except: nil)
73
+ return false unless self.class.respond_to?(:effective_organizations_user?)
74
+ organizations.any? { |organization| organization != except && organization.membership_present? }
75
+ end
76
+
77
+ def assign_member_role
78
+ membership_present? ? add_role(:member) : remove_role(:member)
79
+ end
80
+
81
+ # This can be called by a script to recalculate the owner role based on current membership
82
+ def update_member_role!
83
+ assign_member_role
84
+ save!
85
+ end
86
+
60
87
  def outstanding_fee_payment_owners
61
88
  effective_memberships_owners.select { |owner| !owner.membership_fees_paid? }
62
89
  end
@@ -230,6 +257,7 @@ module EffectiveMembershipsOwner
230
257
  fee
231
258
  end
232
259
 
260
+ # Called by the registrar.
233
261
  def update_membership_status!
234
262
  raise('expected membership to be present') unless membership.present?
235
263
 
@@ -37,7 +37,7 @@ module EffectiveMembershipsRegistrar
37
37
  categories = Array(categories)
38
38
 
39
39
  raise('expecting a memberships owner') unless owner.class.respond_to?(:effective_memberships_owner?)
40
- raise('expecting a membership category') unless categories.all? { |cat| cat.class.respond_to?(:effective_memberships_category?) }
40
+ raise('expecting a membership category') unless categories.present? && categories.all? { |cat| cat.class.respond_to?(:effective_memberships_category?) }
41
41
 
42
42
  # Default Date and next number
43
43
  date ||= Time.zone.now
@@ -73,6 +73,9 @@ module EffectiveMembershipsRegistrar
73
73
  save!(owner, date: date)
74
74
  end
75
75
 
76
+ # Assign member role
77
+ add_member_role(owner)
78
+
76
79
  owner.update_membership_status!
77
80
  end
78
81
 
@@ -113,6 +116,9 @@ module EffectiveMembershipsRegistrar
113
116
  raise('already has purchased prorated fee') if fee.purchased?
114
117
  end
115
118
 
119
+ # Assign member role
120
+ add_member_role(owner)
121
+
116
122
  # Save owner
117
123
  save!(owner, date: date)
118
124
  end
@@ -163,6 +169,9 @@ module EffectiveMembershipsRegistrar
163
169
  owner.outstanding_fee_payment_fees.each { |fee| fee.mark_for_destruction }
164
170
  owner.outstanding_fee_payment_orders.each { |order| order.mark_for_destruction }
165
171
 
172
+ # Remove member role
173
+ remove_member_role(owner)
174
+
166
175
  save!(owner, date: date)
167
176
  end
168
177
 
@@ -293,6 +302,34 @@ module EffectiveMembershipsRegistrar
293
302
 
294
303
  protected
295
304
 
305
+ def add_member_role(owner)
306
+ owner.add_role(:member)
307
+
308
+ if owner.class.respond_to?(:effective_organizations_organization?)
309
+ organization = owner
310
+ organization.representatives.each { |representative| representative.user.add_role(:member) }
311
+ end
312
+
313
+ true
314
+ end
315
+
316
+ def remove_member_role(owner)
317
+ owner.remove_role(:member)
318
+
319
+ if owner.class.respond_to?(:effective_organizations_organization?)
320
+ organization = owner
321
+
322
+ organization.representatives.each do |representative|
323
+ user = representative.user
324
+ member = user.individual_membership_present? || user.organization_membership_present?(except: organization)
325
+
326
+ user.remove_role(:member) if !member
327
+ end
328
+ end
329
+
330
+ true
331
+ end
332
+
296
333
  def save!(owner, date: Time.zone.now)
297
334
  owner.build_membership_history(start_on: date)
298
335
  owner.save!
@@ -58,6 +58,7 @@ module Effective
58
58
  validates :number, presence: true, uniqueness: true
59
59
  validates :joined_on, presence: true
60
60
  validates :registration_on, presence: true
61
+ validates :membership_categories, presence: true
61
62
 
62
63
  validate(if: -> { owner.present? }) do
63
64
  self.errors.add(:owner_id, 'must be a memberships owner') unless owner.class.effective_memberships_owner?
@@ -32,7 +32,7 @@ EffectiveMemberships.setup do |config|
32
32
  # config.deliver_method = :deliver_later
33
33
 
34
34
  # Default layout
35
- config.mailer_layout = 'effective_memberships_mailer_layout'
35
+ # config.mailer_layout = 'effective_memberships_mailer_layout'
36
36
 
37
37
  # Default From
38
38
  config.mailer_sender = "no-reply@example.com"
@@ -1,3 +1,3 @@
1
1
  module EffectiveMemberships
2
- VERSION = '0.1.23'
2
+ VERSION = '0.2.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_memberships
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.23
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-12 00:00:00.000000000 Z
11
+ date: 2022-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: effective_roles
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: wicked
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +178,20 @@ dependencies:
164
178
  - - ">="
165
179
  - !ruby/object:Gem::Version
166
180
  version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: effective_organizations
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
167
195
  - !ruby/object:Gem::Dependency
168
196
  name: effective_developer
169
197
  requirement: !ruby/object:Gem::Requirement