mongoid-list 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/lib/mongoid/list.rb CHANGED
@@ -1,11 +1,8 @@
1
- require "mongoid/list/scoping"
2
-
3
1
  module Mongoid
4
2
 
5
3
 
6
4
  module List
7
5
  extend ActiveSupport::Concern
8
- include Mongoid::List::Scoping
9
6
 
10
7
  autoload :Collection, 'mongoid/list/collection'
11
8
  autoload :Embedded, 'mongoid/list/embedded'
@@ -43,6 +40,23 @@ module Mongoid
43
40
  attr_accessor :_process_list_change
44
41
 
45
42
 
43
+ def list_scoped?
44
+ fields["position"].options.has_key?(:scope)
45
+ end
46
+
47
+ def list_scope_field
48
+ fields["position"].options[:scope]
49
+ end
50
+
51
+ def list_scope_value
52
+ public_send(list_scope_field)
53
+ end
54
+
55
+ def list_scope_conditions
56
+ list_scoped? ? { list_scope_field.to_sym => list_scope_value } : {}
57
+ end
58
+
59
+
46
60
  private
47
61
 
48
62
 
@@ -74,7 +88,6 @@ module Mongoid
74
88
  embedded? ? Embedded.new(self).count : Collection.new(self).count
75
89
  end
76
90
 
77
-
78
91
  end
79
92
 
80
93
  end
@@ -0,0 +1,22 @@
1
+ module Mongoid
2
+ module List
3
+ class Abstract
4
+
5
+ attr_accessor :obj
6
+
7
+ def initialize(obj)
8
+ @obj = obj
9
+ end
10
+
11
+ def changes
12
+ obj._process_list_change
13
+ end
14
+
15
+
16
+ def conditions
17
+ obj.list_scope_conditions
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -1,30 +1,26 @@
1
+ require 'mongoid/list/abstract'
2
+
1
3
  module Mongoid
2
4
  module List
3
- class Collection
4
-
5
- attr_accessor :obj
6
-
7
- def initialize(obj)
8
- @obj = obj
9
- end
5
+ class Collection < Abstract
10
6
 
11
7
  def update_positions!
12
8
  obj.class.collection.update(
13
9
  criteria,
14
- { '$inc' => { position: obj._process_list_change[:by] } },
10
+ { '$inc' => { position: changes[:by] } },
15
11
  multi: true
16
12
  )
17
13
  end
18
14
 
19
15
  def count
20
- obj.class.where(obj.list_scope_conditions).count
16
+ obj.class.where(conditions).count
21
17
  end
22
18
 
23
19
  private
24
20
 
25
21
  def criteria
26
- position = { '$lte' => obj._process_list_change[:max], '$gte' => obj._process_list_change[:min] }.delete_if { |k, v| v.nil? }
27
- obj.list_scope_conditions.merge({ _id: { '$ne' => obj.id }, position: position })
22
+ position = { '$lte' => changes[:max], '$gte' => changes[:min] }.delete_if { |k, v| v.nil? }
23
+ conditions.merge({ _id: { '$ne' => obj.id }, position: position })
28
24
  end
29
25
 
30
26
  end
@@ -1,24 +1,20 @@
1
+ require 'mongoid/list/abstract'
2
+
1
3
  module Mongoid
2
4
  module List
3
- class Embedded
4
-
5
- attr_accessor :obj
6
-
7
- def initialize(obj)
8
- @obj = obj
9
- end
5
+ class Embedded < Abstract
10
6
 
11
7
  def update_positions!
12
8
  items.each do |item|
13
9
  next unless should_operate_on_item?(item)
14
- criteria = { "#{obj.metadata.name.to_sym}._id" => item.id }
15
- changes = { '$inc' => { "#{obj.metadata.name.to_sym}.$.position" => obj._process_list_change[:by] } }
16
- _embedded_list_container.class.collection.update(criteria, changes)
10
+ criteria = { "#{relation_name}._id" => item.id }
11
+ updates = { '$inc' => { "#{relation_name}.$.position" => changes[:by] } }
12
+ container.class.collection.update(criteria, updates)
17
13
  end
18
14
  end
19
15
 
20
16
  def count
21
- _embedded_list_container.send(obj.metadata.name.to_sym).excludes(_id: obj.id).where(obj.list_scope_conditions).count
17
+ items.excludes(_id: obj.id).where(conditions).count
22
18
  end
23
19
 
24
20
 
@@ -26,25 +22,29 @@ module Mongoid
26
22
 
27
23
 
28
24
  def items
29
- _embedded_list_container.send(obj.metadata.name.to_sym)
25
+ container.send(relation_name)
30
26
  end
31
27
 
32
28
  def should_operate_on_item?(item)
33
29
  # TODO: This includes duplicate logic from :list_scope_conditions
34
30
  ![
35
31
  item == obj,
36
- obj._process_list_change[:min].present? && item.position < obj._process_list_change[:min],
37
- obj._process_list_change[:max].present? && item.position > obj._process_list_change[:max],
32
+ changes[:min].present? && item.position < changes[:min],
33
+ changes[:max].present? && item.position > changes[:max],
38
34
  obj.list_scoped? && item.list_scope_value != obj.list_scope_value
39
35
  ].any?
40
36
  end
41
37
 
42
- def _embedded_list_container
38
+ def container
43
39
  # TODO: MONGOID: Mongoid is not currently setting up the metadata properly so we have to do some extra
44
40
  # work with getting the values we need out of the partial information.
45
41
  obj.send(obj.metadata.inverse_setter.sub('=', '').to_sym)
46
42
  end
47
43
 
44
+ def relation_name
45
+ obj.metadata.name.to_sym
46
+ end
47
+
48
48
 
49
49
  end
50
50
  end
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module List
3
- VERSION = "0.1.2"
3
+ VERSION = "0.1.3"
4
4
  end
5
5
  end
data/mongoid-list.gemspec CHANGED
@@ -11,6 +11,7 @@ Gem::Specification.new do |s|
11
11
  s.authors = [ 'Dave Krupinski' ]
12
12
  s.email = 'dave@davekrupinski.com'
13
13
  s.summary = 'Simple list behavior for Mongoid'
14
+ s.homepage = 'https://github.com/davekrupinski/mongoid-list'
14
15
 
15
16
  s.add_dependency('mongoid', [ '>= 2.0.0' ])
16
17
 
@@ -0,0 +1,78 @@
1
+ require 'test_helper'
2
+
3
+ describe Mongoid::List::Collection do
4
+
5
+ describe "#initialization" do
6
+
7
+ let :simple do
8
+ Simple.create
9
+ end
10
+
11
+ let :collection do
12
+ Mongoid::List::Collection.new(simple)
13
+ end
14
+
15
+ should "assign @simple to :obj" do
16
+ assert_equal simple, collection.obj
17
+ end
18
+
19
+ end
20
+
21
+
22
+
23
+ describe "#count" do
24
+
25
+ context "when unscoped" do
26
+
27
+ let :collection do
28
+ Mongoid::List::Collection.new(Simple.new)
29
+ end
30
+
31
+ setup do
32
+ 5.times { Simple.create }
33
+ end
34
+
35
+ should "be 5" do
36
+ assert_equal 5, collection.count
37
+ end
38
+
39
+ end
40
+
41
+
42
+ context "when scoped" do
43
+
44
+ setup do
45
+ 4.times { Scoped.create(group: "airplane 1") }
46
+ 3.times { Scoped.create(group: "airplane 2") }
47
+ end
48
+
49
+ context "group 1" do
50
+
51
+ let :collection do
52
+ Mongoid::List::Collection.new(Scoped.new(group: "airplane 1"))
53
+ end
54
+
55
+ should "be 4" do
56
+ assert_equal 4, collection.count
57
+ end
58
+
59
+ end
60
+
61
+ context "group 2" do
62
+
63
+ let :collection do
64
+ Mongoid::List::Collection.new(Scoped.new(group: "airplane 2"))
65
+ end
66
+
67
+ should "be 3" do
68
+ assert_equal 3, collection.count
69
+ end
70
+
71
+ end
72
+
73
+ end
74
+
75
+ end
76
+
77
+
78
+ end
@@ -0,0 +1,107 @@
1
+ require 'test_helper'
2
+
3
+ describe Mongoid::List::Embedded do
4
+
5
+ describe "#initialization" do
6
+
7
+ let :container do
8
+ Container.create
9
+ end
10
+
11
+ let :item do
12
+ container.items.create
13
+ end
14
+
15
+ let :embedded do
16
+ Mongoid::List::Embedded.new(item)
17
+ end
18
+
19
+ should "assign @item to :obj" do
20
+ assert_equal item, embedded.obj
21
+ end
22
+
23
+ end
24
+
25
+
26
+
27
+ describe "#count" do
28
+
29
+ context "when unscoped" do
30
+
31
+ let :container do
32
+ Container.create!
33
+ end
34
+
35
+ let :container2 do
36
+ Container.create!
37
+ end
38
+
39
+ let :item do
40
+ container.items.build
41
+ end
42
+
43
+ let :embedded do
44
+ Mongoid::List::Embedded.new(item)
45
+ end
46
+
47
+ setup do
48
+ 3.times { container.items.create! }
49
+ 2.times { container2.items.create! }
50
+ end
51
+
52
+ should "be 3" do
53
+ assert_equal 3, embedded.count
54
+ end
55
+
56
+ end
57
+
58
+
59
+ context "when scoped" do
60
+
61
+ let :container do
62
+ Container.create!
63
+ end
64
+
65
+ setup do
66
+ 3.times { container.scoped_items.create!(group: "alien") }
67
+ 2.times { container.scoped_items.create!(group: "aliens") }
68
+ end
69
+
70
+ context "group 1" do
71
+
72
+ let :item do
73
+ container.scoped_items.build(group: "alien")
74
+ end
75
+
76
+ let :embedded do
77
+ Mongoid::List::Embedded.new(item)
78
+ end
79
+
80
+ should "be 3" do
81
+ assert_equal 3, embedded.count
82
+ end
83
+
84
+ end
85
+
86
+ context "group 2" do
87
+
88
+ let :item do
89
+ container.scoped_items.build(group: "aliens")
90
+ end
91
+
92
+ let :embedded do
93
+ Mongoid::List::Embedded.new(item)
94
+ end
95
+
96
+ should "be 2" do
97
+ assert_equal 2, embedded.count
98
+ end
99
+
100
+ end
101
+
102
+ end
103
+
104
+ end
105
+
106
+
107
+ end
@@ -335,5 +335,354 @@ describe Mongoid::List do
335
335
  end
336
336
 
337
337
 
338
- end
339
338
 
339
+
340
+ describe "#list_scope_field" do
341
+
342
+ let :obj do
343
+ Scoped.create
344
+ end
345
+
346
+ should "be :group" do
347
+ assert_equal :group, obj.list_scope_field
348
+ end
349
+
350
+ end
351
+
352
+
353
+ describe "#list_scope_conditions" do
354
+
355
+ context "when unscoped" do
356
+
357
+ let :obj do
358
+ Simple.new
359
+ end
360
+
361
+ let :expected_conditions do
362
+ { }
363
+ end
364
+
365
+ should "be an empty hash" do
366
+ assert_equal expected_conditions, obj.list_scope_conditions
367
+ end
368
+
369
+ end
370
+
371
+ context "when scoped" do
372
+
373
+ let :obj do
374
+ Scoped.new(group: "a grouping")
375
+ end
376
+
377
+ let :expected_conditions do
378
+ { group: "a grouping" }
379
+ end
380
+
381
+ should "have be for a :group of 'a grouping'" do
382
+ assert_equal expected_conditions, obj.list_scope_conditions
383
+ end
384
+ end
385
+
386
+ end
387
+
388
+
389
+ describe "Initializing in multiple scopes" do
390
+
391
+ context "on a Collection" do
392
+
393
+ setup do
394
+ @group1_1 = Scoped.create(group: 1)
395
+ @group2_1 = Scoped.create(group: 2)
396
+ @group2_2 = Scoped.create(group: 2)
397
+ end
398
+
399
+ should "default @group1_1 to a :position of 1" do
400
+ assert_equal 1, @group1_1.position
401
+ end
402
+
403
+ should "default @group2_1 to a :position of 1" do
404
+ assert_equal 1, @group2_1.position
405
+ end
406
+
407
+ should "default @group2_2 to a :position of 2" do
408
+ assert_equal 2, @group2_2.position
409
+ end
410
+
411
+ end
412
+
413
+ context "on Embedded Documents" do
414
+
415
+ setup do
416
+ @container = Container.create
417
+ @group1_1 = @container.scoped_items.create(group: 1)
418
+ @group1_2 = @container.scoped_items.create(group: 1)
419
+ @group2_1 = @container.scoped_items.create(group: 2)
420
+ @group2_2 = @container.scoped_items.create(group: 2)
421
+ @group2_3 = @container.scoped_items.create(group: 2)
422
+ @group3_1 = @container.scoped_items.create(group: 3)
423
+ end
424
+
425
+ should "default @group1_1 to a :position of 1" do
426
+ assert_equal 1, @group1_1.position
427
+ end
428
+
429
+ should "default @group1_2 to a :position of 2" do
430
+ assert_equal 2, @group1_2.position
431
+ end
432
+
433
+ should "default @group2_1 to a :position of 1" do
434
+ assert_equal 1, @group2_1.position
435
+ end
436
+
437
+ should "default @group2_2 to a :position of 2" do
438
+ assert_equal 2, @group2_2.position
439
+ end
440
+
441
+ should "default @group2_3 to a :position of 3" do
442
+ assert_equal 3, @group2_3.position
443
+ end
444
+
445
+ should "default @group3_1 to a :position of 1" do
446
+ assert_equal 1, @group3_1.position
447
+ end
448
+
449
+ end
450
+ end
451
+
452
+
453
+
454
+ describe "#update :position" do
455
+
456
+ context "for Collection List" do
457
+
458
+ setup do
459
+ @group1_1 = Scoped.create(group: 1)
460
+ @group1_2 = Scoped.create(group: 1)
461
+ @group2_1 = Scoped.create(group: 2)
462
+ @group2_2 = Scoped.create(group: 2)
463
+ @group2_3 = Scoped.create(group: 2)
464
+ end
465
+
466
+ context "@group1_2 to :position 1" do
467
+
468
+ setup do
469
+ @group1_2.update_attribute(:position, 1)
470
+ end
471
+
472
+ should "have updated @group1_1 to :position of 2" do
473
+ assert_equal 1, @group1_1.position
474
+ assert_equal 2, @group1_1.reload.position
475
+ end
476
+
477
+ should "not have updated :group2_1's :position" do
478
+ assert_equal @group2_1.position, @group2_1.reload.position
479
+ end
480
+
481
+ should "not have updated :group2_2's :position" do
482
+ assert_equal @group2_2.position, @group2_2.reload.position
483
+ end
484
+
485
+ should "not have updated :group2_3's :position" do
486
+ assert_equal @group2_3.position, @group2_3.reload.position
487
+ end
488
+
489
+ end
490
+
491
+
492
+ context "@group2_2 to :position 3" do
493
+
494
+ setup do
495
+ @group2_2.update_attribute(:position, 3)
496
+ end
497
+
498
+ should "not have updated @group1_1's :position" do
499
+ assert_equal @group1_1.position, @group1_1.reload.position
500
+ end
501
+
502
+ should "not have updated @group1_2's :position" do
503
+ assert_equal @group1_2.position, @group1_2.reload.position
504
+ end
505
+
506
+ should "not have updated @group2_1's :position" do
507
+ assert_equal @group2_1.position, @group2_1.reload.position
508
+ end
509
+
510
+ should "have updated @group2_2's :position to 3" do
511
+ assert_equal 3, @group2_2.position
512
+ end
513
+
514
+ should "have updated @group2_3's :position to 2" do
515
+ assert_equal 3, @group2_3.position
516
+ assert_equal 2, @group2_3.reload.position
517
+ end
518
+ end
519
+
520
+ end
521
+
522
+
523
+ context "for an Embedded List" do
524
+
525
+ setup do
526
+ @container = Container.create
527
+ @group1_1 = @container.scoped_items.create(group: 1)
528
+ @group1_2 = @container.scoped_items.create(group: 1)
529
+ @group2_1 = @container.scoped_items.create(group: 2)
530
+ @group2_2 = @container.scoped_items.create(group: 2)
531
+ @group2_3 = @container.scoped_items.create(group: 2)
532
+ end
533
+
534
+ context "moving @group1_1 to :position 2" do
535
+
536
+ setup do
537
+ @group1_1.update_attributes(position: 2)
538
+ end
539
+
540
+ should "update @group1_1's :position to 2" do
541
+ assert_equal 2, @group1_1.position
542
+ end
543
+
544
+ should "update @group1_2's :position to 1" do
545
+ assert_equal 2, @group1_2.position
546
+ assert_equal 1, @group1_2.reload.position
547
+ end
548
+
549
+ should "not update @group2_1's :position" do
550
+ assert_equal 1, @group2_1.position
551
+ assert_equal 1, @group2_1.reload.position
552
+ end
553
+
554
+ should "not update @group2_2's :position" do
555
+ assert_equal 2, @group2_2.position
556
+ assert_equal 2, @group2_2.reload.position
557
+ end
558
+
559
+ should "not update @group2_3's :position" do
560
+ assert_equal 3, @group2_3.position
561
+ assert_equal 3, @group2_3.reload.position
562
+ end
563
+ end
564
+
565
+
566
+ context "moving @group2_3 to :position 1" do
567
+
568
+ setup do
569
+ @group2_3.update_attributes(position: 1)
570
+ end
571
+
572
+ should "not update @group1_1's :position" do
573
+ assert_equal 1, @group1_1.position
574
+ assert_equal 1, @group1_1.reload.position
575
+ end
576
+
577
+ should "not update @group1_2's :position" do
578
+ assert_equal 2, @group1_2.position
579
+ assert_equal 2, @group1_2.reload.position
580
+ end
581
+
582
+ should "update @group2_1's :position to 2" do
583
+ assert_equal 1, @group2_1.position
584
+ assert_equal 2, @group2_1.reload.position
585
+ end
586
+
587
+ should "update @group2_2's :position to 3" do
588
+ assert_equal 2, @group2_2.position
589
+ assert_equal 3, @group2_2.reload.position
590
+ end
591
+
592
+ should "update @group2_3's :position to 1" do
593
+ assert_equal 1, @group2_3.position
594
+ assert_equal 1, @group2_3.reload.position
595
+ end
596
+ end
597
+
598
+ end
599
+
600
+ end
601
+
602
+
603
+
604
+ describe "#destroy" do
605
+
606
+ context "from a Collection" do
607
+
608
+ setup do
609
+ @group1_1 = Scoped.create(group: 1)
610
+ @group1_2 = Scoped.create(group: 1)
611
+ @group2_1 = Scoped.create(group: 2)
612
+ @group2_2 = Scoped.create(group: 2)
613
+ @group2_3 = Scoped.create(group: 2)
614
+ end
615
+
616
+ context "for @group2_1" do
617
+
618
+ setup do
619
+ @group2_1.destroy
620
+ end
621
+
622
+ should "not update @group1_1's :position" do
623
+ assert_equal 1, @group1_1.position
624
+ assert_equal 1, @group1_1.reload.position
625
+ end
626
+
627
+ should "not update @group1_2's :position" do
628
+ assert_equal 2, @group1_2.position
629
+ assert_equal 2, @group1_2.reload.position
630
+ end
631
+
632
+ should "update @group2_2's :position to 1" do
633
+ assert_equal 2, @group2_2.position
634
+ assert_equal 1, @group2_2.reload.position
635
+ end
636
+
637
+ should "update @group2_3's :position to 2" do
638
+ assert_equal 3, @group2_3.position
639
+ assert_equal 2, @group2_3.reload.position
640
+ end
641
+ end
642
+
643
+ end
644
+
645
+
646
+ context "from an Embedded Collection" do
647
+
648
+ setup do
649
+ @container = Container.create
650
+ @group1_1 = @container.scoped_items.create(group: 1)
651
+ @group1_2 = @container.scoped_items.create(group: 1)
652
+ @group2_1 = @container.scoped_items.create(group: 2)
653
+ @group2_2 = @container.scoped_items.create(group: 2)
654
+ @group2_3 = @container.scoped_items.create(group: 2)
655
+ end
656
+
657
+ context "for @group2_2" do
658
+
659
+ setup do
660
+ @group2_2.destroy
661
+ end
662
+
663
+ should "not update @group1_1's :position" do
664
+ assert_equal 1, @group1_1.position
665
+ assert_equal 1, @group1_1.reload.position
666
+ end
667
+
668
+ should "not update @group1_2's :position" do
669
+ assert_equal 2, @group1_2.position
670
+ assert_equal 2, @group1_2.reload.position
671
+ end
672
+
673
+ should "not update @group2_1's :position" do
674
+ assert_equal 1, @group2_1.position
675
+ assert_equal 1, @group2_1.reload.position
676
+ end
677
+
678
+ should "update @group2_3's :position to 2" do
679
+ assert_equal 3, @group2_3.position
680
+ assert_equal 2, @container.reload.scoped_items.find(@group2_3.id).position
681
+ end
682
+ end
683
+
684
+ end
685
+
686
+
687
+ end
688
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-list
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-10-28 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mongoid
16
- requirement: &2161351780 !ruby/object:Gem::Requirement
16
+ requirement: &2164486340 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.0.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2161351780
24
+ version_requirements: *2164486340
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bson_ext
27
- requirement: &2161351360 !ruby/object:Gem::Requirement
27
+ requirement: &2164485920 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *2161351360
35
+ version_requirements: *2164485920
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: minitest
38
- requirement: &2161350800 !ruby/object:Gem::Requirement
38
+ requirement: &2164485360 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 2.7.0
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2161350800
46
+ version_requirements: *2164485360
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: mini_shoulda
49
- requirement: &2161350280 !ruby/object:Gem::Requirement
49
+ requirement: &2164484820 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 0.4.0
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *2161350280
57
+ version_requirements: *2164484820
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: spork
60
- requirement: &2161349740 !ruby/object:Gem::Requirement
60
+ requirement: &2164484300 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 0.9.0.rc
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *2161349740
68
+ version_requirements: *2164484300
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: spork-testunit
71
- requirement: &2161349160 !ruby/object:Gem::Requirement
71
+ requirement: &2164483660 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 0.0.6
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *2161349160
79
+ version_requirements: *2164483660
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: guard-minitest
82
- requirement: &2161348560 !ruby/object:Gem::Requirement
82
+ requirement: &2164483040 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 0.4.0
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *2161348560
90
+ version_requirements: *2164483040
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: guard-spork
93
- requirement: &2161347840 !ruby/object:Gem::Requirement
93
+ requirement: &2164482400 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: 0.3.1
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *2161347840
101
+ version_requirements: *2164482400
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: turn
104
- requirement: &2161347060 !ruby/object:Gem::Requirement
104
+ requirement: &2164481620 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,7 +109,7 @@ dependencies:
109
109
  version: 0.8.3
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *2161347060
112
+ version_requirements: *2164481620
113
113
  description:
114
114
  email: dave@davekrupinski.com
115
115
  executables: []
@@ -125,12 +125,13 @@ files:
125
125
  - Rakefile
126
126
  - lib/mongoid-list.rb
127
127
  - lib/mongoid/list.rb
128
+ - lib/mongoid/list/abstract.rb
128
129
  - lib/mongoid/list/collection.rb
129
130
  - lib/mongoid/list/embedded.rb
130
- - lib/mongoid/list/scoping.rb
131
131
  - lib/mongoid/list/version.rb
132
132
  - mongoid-list.gemspec
133
- - test/mongoid/list/scoping_test.rb
133
+ - test/mongoid/list/collection_test.rb
134
+ - test/mongoid/list/embedded_test.rb
134
135
  - test/mongoid/list_test.rb
135
136
  - test/support/models/container.rb
136
137
  - test/support/models/embedded.rb
@@ -138,7 +139,7 @@ files:
138
139
  - test/support/models/scoped_embedded.rb
139
140
  - test/support/models/simple.rb
140
141
  - test/test_helper.rb
141
- homepage:
142
+ homepage: https://github.com/davekrupinski/mongoid-list
142
143
  licenses: []
143
144
  post_install_message:
144
145
  rdoc_options: []
@@ -163,7 +164,8 @@ signing_key:
163
164
  specification_version: 3
164
165
  summary: Simple list behavior for Mongoid
165
166
  test_files:
166
- - test/mongoid/list/scoping_test.rb
167
+ - test/mongoid/list/collection_test.rb
168
+ - test/mongoid/list/embedded_test.rb
167
169
  - test/mongoid/list_test.rb
168
170
  - test/support/models/container.rb
169
171
  - test/support/models/embedded.rb
@@ -1,23 +0,0 @@
1
- module Mongoid
2
- module List
3
- module Scoping
4
-
5
- def list_scoped?
6
- fields["position"].options.has_key?(:scope)
7
- end
8
-
9
- def list_scope_field
10
- fields["position"].options[:scope]
11
- end
12
-
13
- def list_scope_value
14
- public_send(list_scope_field)
15
- end
16
-
17
- def list_scope_conditions
18
- list_scoped? ? { list_scope_field.to_sym => list_scope_value } : {}
19
- end
20
-
21
- end
22
- end
23
- end
@@ -1,354 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe Mongoid::List::Scoping do
4
-
5
- describe "#list_scope_field" do
6
-
7
- let :obj do
8
- Scoped.create
9
- end
10
-
11
- should "be :group" do
12
- assert_equal :group, obj.list_scope_field
13
- end
14
-
15
- end
16
-
17
-
18
- describe "#list_scope_conditions" do
19
-
20
- context "when unscoped" do
21
-
22
- let :obj do
23
- Simple.new
24
- end
25
-
26
- let :expected_conditions do
27
- { }
28
- end
29
-
30
- should "be an empty hash" do
31
- assert_equal expected_conditions, obj.list_scope_conditions
32
- end
33
-
34
- end
35
-
36
- context "when scoped" do
37
-
38
- let :obj do
39
- Scoped.new(group: "a grouping")
40
- end
41
-
42
- let :expected_conditions do
43
- { group: "a grouping" }
44
- end
45
-
46
- should "have be for a :group of 'a grouping'" do
47
- assert_equal expected_conditions, obj.list_scope_conditions
48
- end
49
- end
50
-
51
- end
52
-
53
-
54
- describe "Initializing in multiple scopes" do
55
-
56
- context "on a Collection" do
57
-
58
- setup do
59
- @group1_1 = Scoped.create(group: 1)
60
- @group2_1 = Scoped.create(group: 2)
61
- @group2_2 = Scoped.create(group: 2)
62
- end
63
-
64
- should "default @group1_1 to a :position of 1" do
65
- assert_equal 1, @group1_1.position
66
- end
67
-
68
- should "default @group2_1 to a :position of 1" do
69
- assert_equal 1, @group2_1.position
70
- end
71
-
72
- should "default @group2_2 to a :position of 2" do
73
- assert_equal 2, @group2_2.position
74
- end
75
-
76
- end
77
-
78
- context "on Embedded Documents" do
79
-
80
- setup do
81
- @container = Container.create
82
- @group1_1 = @container.scoped_items.create(group: 1)
83
- @group1_2 = @container.scoped_items.create(group: 1)
84
- @group2_1 = @container.scoped_items.create(group: 2)
85
- @group2_2 = @container.scoped_items.create(group: 2)
86
- @group2_3 = @container.scoped_items.create(group: 2)
87
- @group3_1 = @container.scoped_items.create(group: 3)
88
- end
89
-
90
- should "default @group1_1 to a :position of 1" do
91
- assert_equal 1, @group1_1.position
92
- end
93
-
94
- should "default @group1_2 to a :position of 2" do
95
- assert_equal 2, @group1_2.position
96
- end
97
-
98
- should "default @group2_1 to a :position of 1" do
99
- assert_equal 1, @group2_1.position
100
- end
101
-
102
- should "default @group2_2 to a :position of 2" do
103
- assert_equal 2, @group2_2.position
104
- end
105
-
106
- should "default @group2_3 to a :position of 3" do
107
- assert_equal 3, @group2_3.position
108
- end
109
-
110
- should "default @group3_1 to a :position of 1" do
111
- assert_equal 1, @group3_1.position
112
- end
113
-
114
- end
115
- end
116
-
117
-
118
-
119
- describe "#update :position" do
120
-
121
- context "for Collection List" do
122
-
123
- setup do
124
- @group1_1 = Scoped.create(group: 1)
125
- @group1_2 = Scoped.create(group: 1)
126
- @group2_1 = Scoped.create(group: 2)
127
- @group2_2 = Scoped.create(group: 2)
128
- @group2_3 = Scoped.create(group: 2)
129
- end
130
-
131
- context "@group1_2 to :position 1" do
132
-
133
- setup do
134
- @group1_2.update_attribute(:position, 1)
135
- end
136
-
137
- should "have updated @group1_1 to :position of 2" do
138
- assert_equal 1, @group1_1.position
139
- assert_equal 2, @group1_1.reload.position
140
- end
141
-
142
- should "not have updated :group2_1's :position" do
143
- assert_equal @group2_1.position, @group2_1.reload.position
144
- end
145
-
146
- should "not have updated :group2_2's :position" do
147
- assert_equal @group2_2.position, @group2_2.reload.position
148
- end
149
-
150
- should "not have updated :group2_3's :position" do
151
- assert_equal @group2_3.position, @group2_3.reload.position
152
- end
153
-
154
- end
155
-
156
-
157
- context "@group2_2 to :position 3" do
158
-
159
- setup do
160
- @group2_2.update_attribute(:position, 3)
161
- end
162
-
163
- should "not have updated @group1_1's :position" do
164
- assert_equal @group1_1.position, @group1_1.reload.position
165
- end
166
-
167
- should "not have updated @group1_2's :position" do
168
- assert_equal @group1_2.position, @group1_2.reload.position
169
- end
170
-
171
- should "not have updated @group2_1's :position" do
172
- assert_equal @group2_1.position, @group2_1.reload.position
173
- end
174
-
175
- should "have updated @group2_2's :position to 3" do
176
- assert_equal 3, @group2_2.position
177
- end
178
-
179
- should "have updated @group2_3's :position to 2" do
180
- assert_equal 3, @group2_3.position
181
- assert_equal 2, @group2_3.reload.position
182
- end
183
- end
184
-
185
- end
186
-
187
-
188
- context "for an Embedded List" do
189
-
190
- setup do
191
- @container = Container.create
192
- @group1_1 = @container.scoped_items.create(group: 1)
193
- @group1_2 = @container.scoped_items.create(group: 1)
194
- @group2_1 = @container.scoped_items.create(group: 2)
195
- @group2_2 = @container.scoped_items.create(group: 2)
196
- @group2_3 = @container.scoped_items.create(group: 2)
197
- end
198
-
199
- context "moving @group1_1 to :position 2" do
200
-
201
- setup do
202
- @group1_1.update_attributes(position: 2)
203
- end
204
-
205
- should "update @group1_1's :position to 2" do
206
- assert_equal 2, @group1_1.position
207
- end
208
-
209
- should "update @group1_2's :position to 1" do
210
- assert_equal 2, @group1_2.position
211
- assert_equal 1, @group1_2.reload.position
212
- end
213
-
214
- should "not update @group2_1's :position" do
215
- assert_equal 1, @group2_1.position
216
- assert_equal 1, @group2_1.reload.position
217
- end
218
-
219
- should "not update @group2_2's :position" do
220
- assert_equal 2, @group2_2.position
221
- assert_equal 2, @group2_2.reload.position
222
- end
223
-
224
- should "not update @group2_3's :position" do
225
- assert_equal 3, @group2_3.position
226
- assert_equal 3, @group2_3.reload.position
227
- end
228
- end
229
-
230
-
231
- context "moving @group2_3 to :position 1" do
232
-
233
- setup do
234
- @group2_3.update_attributes(position: 1)
235
- end
236
-
237
- should "not update @group1_1's :position" do
238
- assert_equal 1, @group1_1.position
239
- assert_equal 1, @group1_1.reload.position
240
- end
241
-
242
- should "not update @group1_2's :position" do
243
- assert_equal 2, @group1_2.position
244
- assert_equal 2, @group1_2.reload.position
245
- end
246
-
247
- should "update @group2_1's :position to 2" do
248
- assert_equal 1, @group2_1.position
249
- assert_equal 2, @group2_1.reload.position
250
- end
251
-
252
- should "update @group2_2's :position to 3" do
253
- assert_equal 2, @group2_2.position
254
- assert_equal 3, @group2_2.reload.position
255
- end
256
-
257
- should "update @group2_3's :position to 1" do
258
- assert_equal 1, @group2_3.position
259
- assert_equal 1, @group2_3.reload.position
260
- end
261
- end
262
-
263
- end
264
-
265
- end
266
-
267
-
268
-
269
- describe "#destroy" do
270
-
271
- context "from a Collection" do
272
-
273
- setup do
274
- @group1_1 = Scoped.create(group: 1)
275
- @group1_2 = Scoped.create(group: 1)
276
- @group2_1 = Scoped.create(group: 2)
277
- @group2_2 = Scoped.create(group: 2)
278
- @group2_3 = Scoped.create(group: 2)
279
- end
280
-
281
- context "for @group2_1" do
282
-
283
- setup do
284
- @group2_1.destroy
285
- end
286
-
287
- should "not update @group1_1's :position" do
288
- assert_equal 1, @group1_1.position
289
- assert_equal 1, @group1_1.reload.position
290
- end
291
-
292
- should "not update @group1_2's :position" do
293
- assert_equal 2, @group1_2.position
294
- assert_equal 2, @group1_2.reload.position
295
- end
296
-
297
- should "update @group2_2's :position to 1" do
298
- assert_equal 2, @group2_2.position
299
- assert_equal 1, @group2_2.reload.position
300
- end
301
-
302
- should "update @group2_3's :position to 2" do
303
- assert_equal 3, @group2_3.position
304
- assert_equal 2, @group2_3.reload.position
305
- end
306
- end
307
-
308
- end
309
-
310
-
311
- context "from an Embedded Collection" do
312
-
313
- setup do
314
- @container = Container.create
315
- @group1_1 = @container.scoped_items.create(group: 1)
316
- @group1_2 = @container.scoped_items.create(group: 1)
317
- @group2_1 = @container.scoped_items.create(group: 2)
318
- @group2_2 = @container.scoped_items.create(group: 2)
319
- @group2_3 = @container.scoped_items.create(group: 2)
320
- end
321
-
322
- context "for @group2_2" do
323
-
324
- setup do
325
- @group2_2.destroy
326
- end
327
-
328
- should "not update @group1_1's :position" do
329
- assert_equal 1, @group1_1.position
330
- assert_equal 1, @group1_1.reload.position
331
- end
332
-
333
- should "not update @group1_2's :position" do
334
- assert_equal 2, @group1_2.position
335
- assert_equal 2, @group1_2.reload.position
336
- end
337
-
338
- should "not update @group2_1's :position" do
339
- assert_equal 1, @group2_1.position
340
- assert_equal 1, @group2_1.reload.position
341
- end
342
-
343
- should "update @group2_3's :position to 2" do
344
- assert_equal 3, @group2_3.position
345
- assert_equal 2, @container.reload.scoped_items.find(@group2_3.id).position
346
- end
347
- end
348
-
349
- end
350
-
351
-
352
- end
353
-
354
- end