effective_memberships 0.6.5 → 0.6.6

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: 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