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 +4 -4
- data/app/assets/javascripts/spotlight/reindex_monitor.js +2 -2
- data/app/models/spotlight/exhibit.rb +1 -1
- data/app/models/spotlight/reindex_progress.rb +32 -52
- data/app/models/spotlight/resource.rb +11 -0
- data/lib/spotlight/version.rb +1 -1
- data/spec/models/spotlight/reindex_progress_spec.rb +34 -20
- metadata +1 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: a9f570da0859bafcdda5b278a6c091c078d3923a
         | 
| 4 | 
            +
              data.tar.gz: f949ab89b4ae716b88a2b1637ed74ed661706193
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 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. | 
| 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. | 
| 36 | 
            +
                  panelStartDate().text(data.started_at);
         | 
| 37 37 | 
             
                  panelCurrentDate().text(data.updated_at);
         | 
| 38 38 | 
             
                  panelCompleted().text(data.completed);
         | 
| 39 39 | 
             
                  updatePanelTotals(data);
         | 
| @@ -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 | 
            -
                                  | 
| 9 | 
            +
                                 Spotlight::Resource.none
         | 
| 10 10 | 
             
                               end
         | 
| 11 11 | 
             
                end
         | 
| 12 12 |  | 
| 13 | 
            -
                def  | 
| 14 | 
            -
                   | 
| 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  | 
| 19 | 
            -
                   | 
| 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 | 
            -
                   | 
| 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 | 
            -
                     | 
| 41 | 
            -
                     | 
| 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  | 
| 59 | 
            -
                  I18n.l( | 
| 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  | 
| 64 | 
            -
                  I18n.l( | 
| 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  | 
| 76 | 
            -
                   | 
| 78 | 
            +
                def localized_updated_time
         | 
| 79 | 
            +
                  return unless updated_at
         | 
| 80 | 
            +
                  I18n.l(updated_at, format: :short)
         | 
| 77 81 | 
             
                end
         | 
| 78 82 |  | 
| 79 | 
            -
                 | 
| 80 | 
            -
             | 
| 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
         | 
    
        data/lib/spotlight/version.rb
    CHANGED
    
    
| @@ -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(: | 
| 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:  | 
| 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:  | 
| 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( | 
| 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 '# | 
| 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  | 
| 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  | 
| 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( | 
| 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  | 
| 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[' | 
| 63 | 
            +
                  expect(json['recently_in_progress']).to be true
         | 
| 60 64 | 
             
                end
         | 
| 61 65 | 
             
              end
         | 
| 62 66 |  | 
| 63 | 
            -
              describe '# | 
| 67 | 
            +
              describe '#started_at' do
         | 
| 64 68 | 
             
                it 'returns the indexed_at attribute of the first resource' do
         | 
| 65 | 
            -
                  expect(subject. | 
| 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[' | 
| 73 | 
            +
                  expect(json['started_at']).to eq I18n.l(start_time, format: :short)
         | 
| 70 74 | 
             
                end
         | 
| 71 75 | 
             
              end
         | 
| 72 76 |  | 
| 73 | 
            -
              describe '# | 
| 77 | 
            +
              describe '#updated_at' do
         | 
| 74 78 | 
             
                it 'returns the updated_at attribute of the last resource' do
         | 
| 75 | 
            -
                  expect(subject. | 
| 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( | 
| 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 |  |