blacklight-spotlight 0.20.2 → 0.20.3

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: 67c958d969ca32275b0a601a62193550a72ff895
4
- data.tar.gz: 11af2709ad72c89efaec127a523d81adf5514a4e
3
+ metadata.gz: a9f570da0859bafcdda5b278a6c091c078d3923a
4
+ data.tar.gz: f949ab89b4ae716b88a2b1637ed74ed661706193
5
5
  SHA512:
6
- metadata.gz: 6925061b77a27a85c903bbe2d28752c69f0aea0d89c120fc4ca8a5e97bbd5c37faed52105dc92248110660887227ccdeebb604de186eb70d1365cbd4f10b9471
7
- data.tar.gz: cc014078433c7f278038fc9607f78ff1cc9f10160eef8c605acfcf72d30912f5114e0226803fd312eb6ee27858191c1969f5d8e40bd7dc936eb04be618a1e0b2
6
+ metadata.gz: c16e162aefe79ed7d01a1886c7636208cce5d82c5826e921a66ec0e440b41893588ff7c7eaf64bae4862fbbfd943deb20c9ad271074debfa8e4b93297c99bfb6
7
+ data.tar.gz: 5c603afe59cc54c39e476eed12ca820d183007968b68cd1c01c18466216c721f8460bcffad3114dc65de902f1f09f5af2d406134fe4ac8d3c839eae36b26d9b4
@@ -22,7 +22,7 @@ Spotlight.onLoad(function() {
22
22
  }
23
23
 
24
24
  function success(data) {
25
- if (data.in_progress) {
25
+ if (data.recently_in_progress) {
26
26
  monitorPanel().show();
27
27
  updateMonitorPanel(data);
28
28
  } else {
@@ -33,7 +33,7 @@ Spotlight.onLoad(function() {
33
33
  function fail() { monitorPanel().hide(); }
34
34
 
35
35
  function updateMonitorPanel(data) {
36
- panelStartDate().text(data.started);
36
+ panelStartDate().text(data.started_at);
37
37
  panelCurrentDate().text(data.updated_at);
38
38
  panelCompleted().text(data.completed);
39
39
  updatePanelTotals(data);
@@ -100,7 +100,7 @@ module Spotlight
100
100
  end
101
101
 
102
102
  def reindex_progress
103
- @reindex_progress ||= ReindexProgress.new(resources.order('updated_at')) if resources
103
+ @reindex_progress ||= ReindexProgress.new(resources) if resources
104
104
  end
105
105
 
106
106
  protected
@@ -4,23 +4,33 @@ module Spotlight
4
4
  class ReindexProgress
5
5
  def initialize(resource_list)
6
6
  @resources = if resource_list.present?
7
- resource_list
7
+ resource_list.order('updated_at')
8
8
  else
9
- null_resources
9
+ Spotlight::Resource.none
10
10
  end
11
11
  end
12
12
 
13
- def in_progress?
14
- return unless finished
15
- any_waiting? || finished > Spotlight::Engine.config.reindex_progress_window.minutes.ago
13
+ def recently_in_progress?
14
+ any_waiting? || (!!finished_at && finished_at > Spotlight::Engine.config.reindex_progress_window.minutes.ago)
16
15
  end
17
16
 
18
- def started
19
- @started ||= resources.first.indexed_at
17
+ def started_at
18
+ return unless resources.present?
19
+
20
+ @started ||= resources.min_by(&:enqueued_at).enqueued_at
21
+ end
22
+
23
+ def updated_at
24
+ @updated ||= resources.maximum(:updated_at) || started_at
20
25
  end
21
26
 
22
- def finished
23
- @finished ||= completed_resources.last.updated_at
27
+ def finished?
28
+ completed_resources.present? && !any_waiting?
29
+ end
30
+
31
+ def finished_at
32
+ return unless finished?
33
+ @finished ||= completed_resources.max_by(&:last_indexed_finished).last_indexed_finished
24
34
  end
25
35
 
26
36
  def total
@@ -37,11 +47,12 @@ module Spotlight
37
47
 
38
48
  def as_json(*)
39
49
  {
40
- in_progress: in_progress?,
41
- started: localized_start_time,
50
+ recently_in_progress: recently_in_progress?,
51
+ started_at: localized_start_time,
52
+ finished_at: localized_finish_time,
53
+ updated_at: localized_updated_time,
42
54
  total: total,
43
55
  completed: completed,
44
- updated_at: localized_finish_time,
45
56
  errored: errored?
46
57
  }
47
58
  end
@@ -55,53 +66,22 @@ module Spotlight
55
66
  end
56
67
 
57
68
  def localized_start_time
58
- return unless started
59
- I18n.l(started, format: :short)
69
+ return unless started_at
70
+ I18n.l(started_at, format: :short)
60
71
  end
61
72
 
62
73
  def localized_finish_time
63
- return unless finished
64
- I18n.l(finished, format: :short)
65
- end
66
-
67
- def completed_resources
68
- if resources.try(:completed).present?
69
- resources.completed
70
- else
71
- null_resources
72
- end
74
+ return unless finished_at
75
+ I18n.l(finished_at, format: :short)
73
76
  end
74
77
 
75
- def null_resources
76
- [NullResource.new]
78
+ def localized_updated_time
79
+ return unless updated_at
80
+ I18n.l(updated_at, format: :short)
77
81
  end
78
82
 
79
- ##
80
- # A NullObject for use in the absense of resources
81
- class NullResource
82
- def updated_at
83
- nil
84
- end
85
-
86
- def indexed_at
87
- nil
88
- end
89
-
90
- def last_indexed_estimate
91
- 0
92
- end
93
-
94
- def last_indexed_count
95
- 0
96
- end
97
-
98
- def waiting?
99
- false
100
- end
101
-
102
- def errored?
103
- false
104
- end
83
+ def completed_resources
84
+ resources.completed
105
85
  end
106
86
  end
107
87
  end
@@ -15,6 +15,7 @@ module Spotlight
15
15
  belongs_to :exhibit
16
16
  serialize :data, Hash
17
17
  store :metadata, accessors: [
18
+ :enqueued_at,
18
19
  :last_indexed_estimate,
19
20
  :last_indexed_count,
20
21
  :last_index_elapsed_time,
@@ -42,6 +43,16 @@ module Spotlight
42
43
  Spotlight::ReindexJob.perform_later(self)
43
44
  end
44
45
 
46
+ def waiting!
47
+ update(enqueued_at: Time.zone.now)
48
+ super
49
+ end
50
+
51
+ def enqueued_at
52
+ value = super
53
+ Time.zone.parse(value) if value
54
+ end
55
+
45
56
  def document_model
46
57
  exhibit.blacklight_config.document_model if exhibit
47
58
  end
@@ -1,3 +1,3 @@
1
1
  module Spotlight
2
- VERSION = '0.20.2'.freeze
2
+ VERSION = '0.20.3'.freeze
3
3
  end
@@ -1,82 +1,96 @@
1
1
  describe Spotlight::ReindexProgress, type: :model do
2
- let(:start_time) { 20.minutes.ago }
3
- let(:finish_time) { 5.minutes.ago }
4
- let(:first_resource) do
2
+ let(:start_time) { 20.minutes.ago.at_beginning_of_minute }
3
+ let(:finish_time) { 5.minutes.ago.at_beginning_of_minute }
4
+ let(:updated_time) { 1.minute.ago.at_beginning_of_minute }
5
+ let!(:first_resource) do
5
6
  FactoryGirl.create(
6
7
  :resource,
7
- updated_at: 15.minutes.ago,
8
+ updated_at: updated_time,
8
9
  indexed_at: start_time,
10
+ enqueued_at: start_time,
11
+ last_indexed_finished: start_time,
9
12
  last_indexed_estimate: 7,
10
13
  last_indexed_count: 5,
11
14
  index_status: 1
12
15
  )
13
16
  end
14
- let(:last_resource) do
17
+ let!(:last_resource) do
15
18
  FactoryGirl.create(
16
19
  :resource,
17
20
  updated_at: finish_time,
18
- indexed_at: 15.minutes.ago,
21
+ indexed_at: finish_time,
22
+ enqueued_at: start_time,
23
+ last_indexed_finished: finish_time,
19
24
  last_indexed_estimate: 3,
20
25
  last_indexed_count: 2,
21
26
  index_status: 1
22
27
  )
23
28
  end
24
29
  let(:resources) { [first_resource, last_resource] }
25
- subject { described_class.new(resources) }
30
+ subject { described_class.new(Spotlight::Resource.all) }
26
31
  let(:json) { JSON.parse(subject.to_json) }
27
32
 
28
33
  before do
29
34
  allow(subject).to receive_messages(completed_resources: resources)
30
35
  end
31
36
 
32
- describe '#in_progress' do
37
+ describe '#recently_in_progress?' do
33
38
  context 'when the last resource has been updated within the allotted time' do
34
39
  it 'is true' do
35
- expect(subject).to be_in_progress
40
+ expect(subject).to be_recently_in_progress
36
41
  end
37
42
  end
38
43
 
39
44
  context 'when any of the resources is makred as waiting' do
40
45
  before do
41
- expect(last_resource).to receive_messages(updated_at: 12.minutes.ago)
42
46
  first_resource.waiting!
43
47
  end
44
48
  it 'is true' do
45
- expect(subject).to be_in_progress
49
+ expect(subject).to be_recently_in_progress
46
50
  end
47
51
  end
48
52
 
49
53
  context 'when the last resources has been updated outside of the allotted time ' do
50
54
  before do
51
- expect(last_resource).to receive_messages(updated_at: 12.minutes.ago)
55
+ expect(last_resource).to receive_messages(last_indexed_finished: 12.minutes.ago)
52
56
  end
53
57
  it 'is false' do
54
- expect(subject).not_to be_in_progress
58
+ expect(subject).not_to be_recently_in_progress
55
59
  end
56
60
  end
57
61
 
58
62
  it 'is included in the json' do
59
- expect(json['in_progress']).to be true
63
+ expect(json['recently_in_progress']).to be true
60
64
  end
61
65
  end
62
66
 
63
- describe '#started' do
67
+ describe '#started_at' do
64
68
  it 'returns the indexed_at attribute of the first resource' do
65
- expect(subject.started).to eq start_time
69
+ expect(subject.started_at).to eq start_time
66
70
  end
67
71
 
68
72
  it 'is included in the json as a localized string' do
69
- expect(json['started']).to eq I18n.l(start_time, format: :short)
73
+ expect(json['started_at']).to eq I18n.l(start_time, format: :short)
70
74
  end
71
75
  end
72
76
 
73
- describe '#finished' do
77
+ describe '#updated_at' do
74
78
  it 'returns the updated_at attribute of the last resource' do
75
- expect(subject.finished).to eq finish_time
79
+ expect(subject.updated_at).to eq updated_time
76
80
  end
77
81
 
78
82
  it 'is included in the json as a localized string under the updated_at attribute' do
79
- expect(json['updated_at']).to eq I18n.l(finish_time, format: :short)
83
+ expect(json['updated_at']).to eq I18n.l(updated_time, format: :short)
84
+ end
85
+ end
86
+
87
+ describe '#finished_at' do
88
+ it 'returns the updated_at attribute of the last resource' do
89
+ expect(subject.finished_at).to eq finish_time
90
+ end
91
+
92
+ it 'is included in the json as a localized string under the updated_at attribute' do
93
+ expect(json['finished_at']).to eq I18n.l(finish_time, format: :short)
80
94
  end
81
95
  end
82
96
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blacklight-spotlight
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.2
4
+ version: 0.20.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Beer