mongoid_ability 2.0.0 → 2.0.1

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
  SHA1:
3
- metadata.gz: dae67db7ec93cdbf840238c3dd2b482646550ea5
4
- data.tar.gz: 9585efb9e63dbbee879f2865d378e9dcf81081a8
3
+ metadata.gz: 721df8ecdb6424b68a3bc809f25cdaba1c8ff688
4
+ data.tar.gz: 6d80989eadf2723af7eef09b9069b63ca2b84e26
5
5
  SHA512:
6
- metadata.gz: e92310170b4733d744668f02b59595f5ffc0a1b10b8aab414ff1db137a0fb417d0392f370b0cc341895503fea19bebd89799d8d7744c989ddc9d23aef946e06c
7
- data.tar.gz: f02421d9e891f91af19df44dc0a289beef01719e5fff3a1ef116a341f6ae10515bd4fc34fbddbc139ba03056e945fdf8a187e96c859203adc975c77539edbd62
6
+ metadata.gz: b2a8e5866633b0cb5451edf17ade4b4b4fc5977f6bac78054df986b13b674e4647b6d0d3d704b5fed4bacb13b2225496153379f749f3fe1f827e09459998e28b
7
+ data.tar.gz: 8cd962801bd4b8960432707c6a4a8a0b6f8bd2fced346a9dee183f2724a830a67076b244563134a81fd79b1c620e8b0c452f963c3aaf88eeb77799be714f9f1c
@@ -1,27 +1,33 @@
1
- # 2.0.0
1
+ # CHANGELOG
2
+
3
+ ## 2.0.1
4
+
5
+ * make sure all `subject_id` values are converted to BSON
6
+
7
+ ## 2.0.0
2
8
 
3
9
  * Full rewrite, which more closely follows the `CanCanCan` conventions: instead of custom algorithm for resolving permissions, the `Lock` documents are now converted to standard `CanCanCan` rules. Similarly the `.acessible_by` criteria are now handled by standard model adapter (`MongoidAdapter`), to be extracted to separate gem. Therefore this gem can benefit for potential future performance improvements of `CanCanCan`. Lastly, the `ability` objects are now cacheable, therefore the conversion of `Lock` documents to `CanCanCan` rule objects does not need to be performed on every request.
4
10
 
5
- # 1.0.0
11
+ ## 1.0.0
6
12
 
7
13
  * conforms to '[MONGOID-4418](https://jira.mongodb.org/browse/MONGOID-4418) Don't allow PersistenceContext method as field names' by renaming the `Lock` field `:options` to `:opts` (but aliasing it `as: :options`). As a result the `Mongoid::Ability` API stays unchanged, however in some cases it might be necessary to migrate the values from the `:options` fields to the new `:opts`.
8
14
 
9
- # 0.4.3
15
+ ## 0.4.3
10
16
 
11
17
  * stub `default_locks` in tests to avoid brittle tests
12
18
  * fix the ability syntactic sugar to support both proc & direct call
13
19
 
14
- # 0.4.2
20
+ ## 0.4.2
15
21
 
16
22
  * **yanked**
17
23
  * improved clarity in class naming
18
24
 
19
- # 0.4.1
25
+ ## 0.4.1
20
26
 
21
27
  * **yanked**
22
28
  * `Resolver` classes now accept `subject_id` (instead of `subject`) for greater flexibility
23
29
 
24
- # 0.4.0
30
+ ## 0.4.0
25
31
 
26
32
  * **yanked**
27
33
  * the `Resolver` classes refactored to return locks (instead of just an outcome)
@@ -83,9 +83,15 @@ module MongoidAbility
83
83
  ability_type = lock.outcome ? :can : :cannot
84
84
  cls = lock.subject_class
85
85
  options = lock.options
86
- options = options.merge(id: lock.subject_id) if lock.id_lock?
86
+ options = options.merge(id: convert_to_bson(lock.subject_id)) if lock.id_lock?
87
87
  action = lock.action
88
88
  send ability_type, action, cls, options
89
89
  end
90
+
91
+ def convert_to_bson(id)
92
+ return id unless id.is_a?(String)
93
+ return id unless BSON::ObjectId.legal?(id)
94
+ BSON::ObjectId.from_string(id)
95
+ end
90
96
  end
91
97
  end
@@ -1,3 +1,3 @@
1
1
  module MongoidAbility
2
- VERSION = '2.0.0'.freeze
2
+ VERSION = '2.0.1'.freeze
3
3
  end
@@ -35,6 +35,13 @@ module MongoidAbility
35
35
 
36
36
  it { ability.can?(:read, my_subject).must_equal true }
37
37
  it { ability.cannot?(:read, my_subject).must_equal false }
38
+
39
+ describe 'when id stored as String' do
40
+ let(:read_lock) { MyLock.new(subject_type: my_subject.model_name.to_s, subject_id: my_subject.id.to_s, action: :read, outcome: true) }
41
+
42
+ it { ability.can?(:read, my_subject).must_equal true }
43
+ it { ability.cannot?(:read, my_subject).must_equal false }
44
+ end
38
45
  end
39
46
  end
40
47
 
@@ -4,14 +4,23 @@ module MongoidAbility
4
4
  describe 'marshal' do
5
5
  before(:all) { MySubject.default_lock MyLock, :read, true }
6
6
 
7
- let(:read_lock) { MyLock.new(subject_type: MySubject1, action: :read, outcome: false) }
7
+ let(:my_subject) { MySubject.new }
8
+ let(:read_lock) { MyLock.new(subject_type: my_subject.model_name.to_s, subject_id: my_subject.id.to_s, action: :update, outcome: false) }
8
9
  let(:owner) { MyRole.new(my_locks: [read_lock]) }
9
10
  let(:ability) { Ability.new(owner) }
10
11
 
11
12
  let(:ability_dump) { Marshal.dump(ability) }
12
13
  let(:ability_load) { Marshal.load(ability_dump) }
13
14
 
14
- it { ability_dump.must_be :present? }
15
- it { ability_load.send(:rules).count.must_equal 2 }
15
+ let(:loaded_rules) { ability_load.send(:rules) }
16
+
17
+ describe 'dump' do
18
+ it { ability_dump.must_be :present? }
19
+ end
20
+
21
+ describe 'load' do
22
+ it { loaded_rules.count.must_equal 2 }
23
+ it { loaded_rules.map(&:conditions).must_include({ id: my_subject.id }) }
24
+ end
16
25
  end
17
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_ability
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomas Celizna
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-31 00:00:00.000000000 Z
11
+ date: 2018-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cancancan