effective_memberships 0.1.23 → 0.2.0
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.
- checksums.yaml +4 -4
- data/app/controllers/effective/applicants_controller.rb +0 -1
- data/app/models/concerns/effective_memberships_owner.rb +28 -0
- data/app/models/concerns/effective_memberships_registrar.rb +38 -1
- data/app/models/effective/membership.rb +1 -0
- data/config/effective_memberships.rb +1 -1
- data/lib/effective_memberships/version.rb +1 -1
- metadata +30 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f8c32ed9ffd17db6a7c0826bfb9eb72615ec3e7049adbb9f18b99cb8957c905
|
4
|
+
data.tar.gz: 5685ca74db5bd94d757c6a209b135160a015fddd2900ba6d66b55976a495eaa9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9590986cb17a70c70183acfa7a4bf7dbc23959fd9482058737a916f767feedeb77a14444f2b6f1ed9631bb1c4d7d70affaf46e38f879a0af1a6acdc4ac480c94
|
7
|
+
data.tar.gz: 4dc42f6e02b50adad0c8c714ee64e97ef398828a391736db51348fed377ced92784cf116f21f147edec98eea06c365925d4d0efce559001c839d2ad89826e7ca
|
@@ -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"
|
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.
|
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-
|
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
|