activeset 0.5.1 → 0.5.2

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: 0b2aa11544be377a08e047b5040128f7d3d10f1c
4
- data.tar.gz: ddb9a50f0b72ca006b98538a03ffbbeb5cd05f7f
3
+ metadata.gz: d7cdef49d5066bfce1716a02c22c6944be6e78b5
4
+ data.tar.gz: 2e24745f57ba9312dce23a5d8d9ce3ad95f035fd
5
5
  SHA512:
6
- metadata.gz: '018352eadd91866a0b5bfa05aae1f1653ae7e4f674f681e89fbf497d22e42d76b43fdd44df8b0e961cdb56179c1e83f84e9fed5bd13086022c141e400c1d542a'
7
- data.tar.gz: 69a1acc99c63fbcd6b25def52599d0553c072c424ba689deddafc34444ad8d9ae0bbe8dada17835667ddd6ad9454ebccd462063d4c129ab0564c9cd73f224e51
6
+ metadata.gz: afd9e636ca59c097baca307dd47e1bb25f8c18745a09f5665e5d118d2fca5e604f3a1bdafe73a997fea6d49941ae6bb6c556432c5289aa04cf0060de58955c05
7
+ data.tar.gz: 40f35bb0ec2f2b83c1b7b1b511fd0641d4a45e962b4058b59565fc70bc2609eec616ab8aa9eb8425b78025eede79982472ba09580d38f9723e9366269c0d74cd
data/CHANGELOG CHANGED
@@ -1,3 +1,8 @@
1
+ v 0.5.2
2
+ - Add an ActiveRecord adapter for the PaginateProcessor
3
+ - Update the EnumerableAdapter for the PaginateProcessor to more consistently handle edgecases
4
+ When asking for a page number that is outside of the meaningful range (e.g. page 10 of a collection that would only have 5 meaningful pages), should return an empty collection.
5
+ - Ensure that the built up intstruction and the base size of the original set are readable from any chained instance of ActiveSet
1
6
  v 0.5.1
2
7
  - Fix bug where `transform` method tried to return a new instance of ActiveSet. It should simply returned the transformed value.
3
8
  - Fail if tranformer can’t handle passed format
@@ -10,10 +10,12 @@ require 'active_set/processors/transform_processor'
10
10
  class ActiveSet
11
11
  include Enumerable
12
12
 
13
- attr_reader :set
13
+ attr_reader :set, :instructions, :total_count
14
14
 
15
- def initialize(set)
15
+ def initialize(set, instructions: {}, total_count: nil)
16
16
  @set = set
17
+ @instructions = instructions
18
+ @total_count = total_count || @set.count
17
19
  end
18
20
 
19
21
  def each(&block)
@@ -35,17 +37,23 @@ class ActiveSet
35
37
 
36
38
  def filter(instructions)
37
39
  filterer = FilterProcessor.new(@set, instructions)
38
- self.class.new(filterer.process)
40
+ self.class.new(filterer.process,
41
+ instructions: @instructions.merge(filter: instructions),
42
+ total_count: @total_count)
39
43
  end
40
44
 
41
45
  def sort(instructions)
42
46
  sorter = SortProcessor.new(@set, instructions)
43
- self.class.new(sorter.process)
47
+ self.class.new(sorter.process,
48
+ instructions: @instructions.merge(sort: instructions),
49
+ total_count: @total_count)
44
50
  end
45
51
 
46
52
  def paginate(instructions)
47
53
  paginater = PaginateProcessor.new(@set, instructions)
48
- self.class.new(paginater.process)
54
+ self.class.new(paginater.process,
55
+ instructions: @instructions.merge(paginate: instructions),
56
+ total_count: @total_count)
49
57
  end
50
58
 
51
59
  def transform(instructions)
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../base_adapter'
4
+ require_relative '../base_processor'
5
+
6
+ class ActiveSet
7
+ class PaginateProcessor < BaseProcessor
8
+ class ActiveRecordAdapter < BaseAdapter
9
+ def process
10
+ return return_set unless @set.respond_to? :to_sql
11
+
12
+ return_set(paginated_set)
13
+ end
14
+
15
+ private
16
+
17
+ def paginated_set
18
+ return @set.none if @set.count <= page_size && page_number > 1
19
+ @set.limit(page_size).offset(page_offset)
20
+ end
21
+
22
+ def page_offset
23
+ return 0 if page_number == 1
24
+ page_size * page_number
25
+ end
26
+
27
+ def page_size
28
+ @instruction.value
29
+ end
30
+
31
+ def page_number
32
+ num = @instruction.attribute.to_i
33
+ return 1 if (num - 1).negative?
34
+ return 1 if (num - 1).zero?
35
+ num
36
+ end
37
+ end
38
+ end
39
+ end
@@ -7,22 +7,34 @@ class ActiveSet
7
7
  class PaginateProcessor < BaseProcessor
8
8
  class EnumerableAdapter < BaseAdapter
9
9
  def process
10
- return return_set if @set.count < pagesize
11
10
  return_set(paginated_set)
12
11
  end
13
12
 
14
13
  private
15
14
 
16
15
  def paginated_set
17
- @set.each_slice(pagesize).take(page_number).last
16
+ return [] if @set.count <= page_size && page_number > 1
17
+
18
+ @set[page_start..page_end] || []
19
+ end
20
+
21
+ def page_start
22
+ return 0 if page_number == 1
23
+ page_size * (page_number - 1)
24
+ end
25
+
26
+ def page_end
27
+ return page_start if page_size == 1
28
+ page_start + page_size - 1
18
29
  end
19
30
 
20
- def pagesize
31
+ def page_size
21
32
  @instruction.value
22
33
  end
23
34
 
24
35
  def page_number
25
- @instruction.attribute.to_i
36
+ num = @instruction.attribute.to_i
37
+ (num.to_i - 1).negative? ? 0 : num
26
38
  end
27
39
  end
28
40
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  require_relative './base_processor'
4
4
  require_relative './paginate/enumerable_adapter'
5
+ require_relative './paginate/active_record_adapter'
5
6
 
6
7
  class ActiveSet
7
8
  class PaginateProcessor < BaseProcessor
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class ActiveSet
4
- VERSION = '0.5.1'
4
+ VERSION = '0.5.2'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activeset
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Margheim
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-10-20 00:00:00.000000000 Z
11
+ date: 2017-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -181,6 +181,7 @@ files:
181
181
  - lib/active_set/processors/filter/active_record_adapter.rb
182
182
  - lib/active_set/processors/filter/enumerable_adapter.rb
183
183
  - lib/active_set/processors/filter_processor.rb
184
+ - lib/active_set/processors/paginate/active_record_adapter.rb
184
185
  - lib/active_set/processors/paginate/enumerable_adapter.rb
185
186
  - lib/active_set/processors/paginate_processor.rb
186
187
  - lib/active_set/processors/sort/active_record_adapter.rb