Module: Mongoid::History::Trackable::SingletonMethods

Defined in:
lib/mongoid/history/trackable.rb

Instance Method Summary collapse

Instance Method Details

#clear_trackable_memoizationObject



572
573
574
575
576
577
578
579
# File 'lib/mongoid/history/trackable.rb', line 572

def clear_trackable_memoization
  @reserved_tracked_fields = nil
  @history_trackable_options = nil
  @trackable_settings = nil
  @tracked_fields = nil
  @tracked_embeds_one = nil
  @tracked_embeds_many = nil
end

#dynamic_field?(field) ⇒ Boolean

Checks if field is dynamic.



462
463
464
465
466
# File 'lib/mongoid/history/trackable.rb', line 462

def dynamic_field?(field)
  dynamic_enabled? &&
    !fields.keys.include?(database_field_name(field)) &&
    !embedded_relations.map { |_, v| v.key }.include?(database_field_name(field))
end

#field_format(field) ⇒ Object



468
469
470
# File 'lib/mongoid/history/trackable.rb', line 468

def field_format(field)
  field_formats[database_field_name(field)]
end

#field_formatsObject



503
504
505
# File 'lib/mongoid/history/trackable.rb', line 503

def field_formats
  @field_formats ||= history_trackable_options[:format]
end

#history_trackable_optionsObject



568
569
570
# File 'lib/mongoid/history/trackable.rb', line 568

def history_trackable_options
  @history_trackable_options ||= mongoid_history_options.prepared
end

#inherited(subclass) ⇒ Object



581
582
583
584
# File 'lib/mongoid/history/trackable.rb', line 581

def inherited(subclass)
  super
  subclass.mongoid_history_options = Mongoid::History::Options.new(subclass, mongoid_history_options.options)
end

#reserved_tracked_fieldsArray < String >

Retrieves the memoized list of reserved tracked fields, which are only included for certain actions.



494
495
496
497
498
499
500
501
# File 'lib/mongoid/history/trackable.rb', line 494

def reserved_tracked_fields
  @reserved_tracked_fields ||= begin
                                 fields = ['_id', history_trackable_options[:version_field].to_s]
                                 modifier_field = history_trackable_options[:modifier_field]
                                 fields << "#{modifier_field}_id" if modifier_field
                                 fields
                               end
end

#trackable_scopeObject



564
565
566
# File 'lib/mongoid/history/trackable.rb', line 564

def trackable_scope
  collection_name.to_s.singularize.to_sym
end

#tracked?(field_or_relation, action = :update) ⇒ Boolean

Whether or not the field or embedded relation should be tracked.



443
444
445
# File 'lib/mongoid/history/trackable.rb', line 443

def tracked?(field_or_relation, action = :update)
  tracked_field?(field_or_relation, action) || tracked_relation?(field_or_relation)
end

#tracked_embeds_manyArray < String >

Retrieves the memoized list of tracked embeds_many relations



552
553
554
555
556
557
558
# File 'lib/mongoid/history/trackable.rb', line 552

def tracked_embeds_many
  @tracked_embeds_many ||= begin
    reflect_on_all_associations(:embeds_many)
      .map(&:key)
      .select { |rel| history_trackable_options[:relations][:embeds_many].include? rel }
  end
end

#tracked_embeds_many?(relation) ⇒ Boolean

Whether or not the embeds_many relation should be tracked.



545
546
547
# File 'lib/mongoid/history/trackable.rb', line 545

def tracked_embeds_many?(relation)
  tracked_embeds_many.include?(database_field_name(relation))
end

#tracked_embeds_many_attributes(relation) ⇒ Object



560
561
562
# File 'lib/mongoid/history/trackable.rb', line 560

def tracked_embeds_many_attributes(relation)
  history_trackable_options[:relations][:embeds_many][database_field_name(relation)]
end

#tracked_embeds_oneArray < String >

Retrieves the memoized list of tracked embeds_one relations



528
529
530
531
532
533
534
# File 'lib/mongoid/history/trackable.rb', line 528

def tracked_embeds_one
  @tracked_embeds_one ||= begin
    reflect_on_all_associations(:embeds_one)
      .map(&:key)
      .select { |rel| history_trackable_options[:relations][:embeds_one].include? rel }
  end
end

#tracked_embeds_one?(relation) ⇒ Boolean

Whether or not the embeds_one relation should be tracked.



521
522
523
# File 'lib/mongoid/history/trackable.rb', line 521

def tracked_embeds_one?(relation)
  tracked_embeds_one.include?(database_field_name(relation))
end

#tracked_embeds_one_attributes(relation) ⇒ Object



536
537
538
# File 'lib/mongoid/history/trackable.rb', line 536

def tracked_embeds_one_attributes(relation)
  history_trackable_options[:relations][:embeds_one][database_field_name(relation)]
end

#tracked_field?(field, action = :update) ⇒ Boolean

Whether or not the field should be tracked.



453
454
455
# File 'lib/mongoid/history/trackable.rb', line 453

def tracked_field?(field, action = :update)
  dynamic_field?(field) || tracked_fields_for_action(action).include?(database_field_name(field))
end

#tracked_fieldsArray < String >

Retrieves the memoized base list of tracked fields, excluding reserved fields.



487
488
489
# File 'lib/mongoid/history/trackable.rb', line 487

def tracked_fields
  @tracked_fields ||= history_trackable_options[:fields] + history_trackable_options[:dynamic]
end

#tracked_fields_for_action(action) ⇒ Array < String >

Retrieves the list of tracked fields for a given action.



477
478
479
480
481
482
# File 'lib/mongoid/history/trackable.rb', line 477

def tracked_fields_for_action(action)
  case action.to_sym
  when :destroy then tracked_fields + reserved_tracked_fields
  else tracked_fields
  end
end

#tracked_relation?(relation) ⇒ Boolean

Whether or not the relation should be tracked.



512
513
514
# File 'lib/mongoid/history/trackable.rb', line 512

def tracked_relation?(relation)
  tracked_embeds_one?(relation) || tracked_embeds_many?(relation)
end