chewy icon indicating copy to clipboard operation
chewy copied to clipboard

Rake chewy:sync should work for complex "outdated_sync_field" values

Open lfv89 opened this issue 10 months ago • 2 comments

Expected behavior

If an outdated_sync_field do not have a simple value, it should still be possible to use chewy:sync on that index.

Actual behavior

If one defines an index with an updated_at similar to this one:

    field :updated_at, type: :date, value: ->(obj) do
      [obj.updated_at, obj.obj2.updated_at].compact.max
    end

Then chewy:sync will fail because inside supports_outdated_sync?:

        def supports_outdated_sync?
          updated_at_field = root.child_hash[outdated_sync_field] if outdated_sync_field
          !!updated_at_field && updated_at_field.value.nil?
        end

The condition updated_at_field.value.nil? will always be false since a proc is being used.

Steps to reproduce the problem

Run rake chewy:sync on a index that defines the value of updated_at as a proc.

Version Information

Share here essential version information such as:

  • Chewy version 7.3.4
  • Elasticsearch version
  • Ruby version 3.3
  • Rails version 7.0

lfv89 avatar Apr 01 '24 21:04 lfv89

I would gladly jump on this if a maintainer could give me a few pointers to start with.

lfv89 avatar Apr 01 '24 21:04 lfv89

@sasha370 @AlexDavidoiu

lfv89 avatar Apr 05 '24 13:04 lfv89