effective_memberships 0.6.5 → 0.6.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 276edc8f53de07b32c2a6f5467727cda1ca37a4748dd6fccf37fd8657150e1b8
4
- data.tar.gz: '097342ca3d781331f2d660e0e027016b34c67d0f13f24b535b2703c0d30cf212'
3
+ metadata.gz: d5a9ac211f2370d13d88ee7b8ce0345c4c8363c530dd60dccbe4bc2da046bf98
4
+ data.tar.gz: 69f0f40f0116c65bea68c949424921b2a87b821e50e664fc73b1312f90c79a79
5
5
  SHA512:
6
- metadata.gz: 87669cf4f1bc83980b9f915916a509d1580cb4ba14545c178bf344f9dfe9f0c9c8c7b45f6e350fc38d1ae4aa9f2ef0c1de93382e8e310fc368623b007b4a1a4e
7
- data.tar.gz: 1c71acefad1595cc972e63399a4709c1d934f1f487c439bf593feb8cdb9d2167a7ea703f2d36ad78e010c727e128d7548a0b26847538ea3ba81ab48d69ba3ba4
6
+ metadata.gz: 7edb8681ca649e8aa121cf38add83c1e21277a968682e8b183f5f3197a84dd061f5ebac01c0da824c64f59c93f47e17d46ea43d81ee4b31a1cb485235b24f7e7
7
+ data.tar.gz: 4fe46479e76c85a356861d4b42f2e1b59675c3726e61c9791044b85133679e87f5d2b66e7a719311fe6c15a6d25a89db04f2b4f20232c462c5a028cf2c013f85
@@ -206,32 +206,58 @@ module EffectiveMembershipsRegistrar
206
206
  save!(owner, date: date)
207
207
  end
208
208
 
209
- # This clears the status entirely from user
210
- def status_remove!(owner, date: nil)
211
- status_change!(owner, to: nil, date: date)
209
+ def status_clear!(owner, date: nil)
210
+ raise('expecting a memberships owner') unless owner.class.respond_to?(:effective_memberships_owner?)
211
+ raise('owner must have an existing membership. use register! instead') if owner.membership.blank?
212
+
213
+ status_assign!(owner, date: date, status: [])
212
214
  end
213
215
 
214
- # To can be nil to clear the status entirely
215
- def status_change!(owner, to:, date: nil)
216
+ def status_add!(owner, status:, date: nil)
216
217
  raise('expecting a memberships owner') unless owner.class.respond_to?(:effective_memberships_owner?)
217
218
  raise('owner must have an existing membership. use register! instead') if owner.membership.blank?
218
219
 
219
- from = owner.membership.status
220
+ status_assign!(owner, date: date, status: owner.membership.statuses + Array(status))
221
+ end
220
222
 
221
- raise('expecting a to memberships status') if to.present? && !to.class.respond_to?(:effective_memberships_status?)
222
- raise('expecting a from memberships status') if from.present? && !from.class.respond_to?(:effective_memberships_status?)
223
- raise('expected to and from to be different') if from == to
223
+ def status_remove!(owner, status:, date: nil)
224
+ raise('expecting a memberships owner') unless owner.class.respond_to?(:effective_memberships_owner?)
225
+ raise('owner must have an existing membership. use register! instead') if owner.membership.blank?
224
226
 
225
- date ||= Time.zone.now
227
+ status_assign!(owner, date: date, status: owner.membership.statuses - Array(status))
228
+ end
229
+
230
+ def status_assign!(owner, status:, date: nil)
231
+ raise('expecting a memberships owner') unless owner.class.respond_to?(:effective_memberships_owner?)
226
232
 
227
233
  membership = owner.membership
234
+ raise('owner must have an existing membership. use register! instead') if membership.blank?
228
235
 
229
- # Assign Status
230
- membership.build_membership_status(status: to) if to.present?
231
- membership.membership_status(status: from).mark_for_destruction if from.present?
236
+ statuses = Array(status)
237
+ raise('expected a memberships status') unless statuses.blank? || statuses.all? { |status| status.class.respond_to?(:effective_memberships_status?) }
232
238
 
233
- # Save
234
- save!(owner, date: date)
239
+ # Add
240
+ statuses.each do |status|
241
+ next if membership.membership_status(status: status).present?
242
+ membership.build_membership_status(status: status)
243
+ end
244
+
245
+ # Remove
246
+ membership.statuses.each do |existing|
247
+ next if statuses.include?(existing)
248
+ membership.membership_status(status: existing).mark_for_destruction
249
+ end
250
+
251
+ changed = membership.membership_statuses.any? { |ms| ms.new_record? || ms.marked_for_destruction? }
252
+
253
+ if changed
254
+ date ||= Time.zone.now
255
+
256
+ membership.registration_on = date # Always new registration_on
257
+ save!(owner, date: date)
258
+ end
259
+
260
+ true
235
261
  end
236
262
 
237
263
  def remove!(owner, date: nil)
@@ -1,3 +1,3 @@
1
1
  module EffectiveMemberships
2
- VERSION = '0.6.5'
2
+ VERSION = '0.6.6'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_memberships
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.5
4
+ version: 0.6.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect