Module: Engine2::MetaApproveSupport

Includes:
MetaModelSupport
Included in:
LoginMeta, SaveMeta
Defined in:
lib/engine2/meta.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from MetaModelSupport

#action_defined, #get_type_info, #hide_pk, #pre_run, #show_pk, #unsupported_association

Instance Attribute Details

#validationsObject (readonly)

Returns the value of attribute validations.



680
681
682
# File 'lib/engine2/meta.rb', line 680

def validations
  @validations
end

Class Method Details

.included(meta) ⇒ Object



682
683
684
# File 'lib/engine2/meta.rb', line 682

def self.included meta
    meta.http_method :post
end

Instance Method Details

#after_approve(handler, record) ⇒ Object



697
698
# File 'lib/engine2/meta.rb', line 697

def after_approve handler, record
end

#allocate_record(handler, json) ⇒ Object



712
713
714
715
716
717
718
719
720
721
722
# File 'lib/engine2/meta.rb', line 712

def allocate_record handler, json
    model = assets[:model]
    json_rec = json[:record]
    handler.permit json_rec.is_a?(Hash)
    val_fields = (dynamic? ? static.validate_fields : @validate_fields) || model.type_info.keys
    handler.permit (json_rec.keys - val_fields).empty?

    record = model.call(json_rec)
    record.validate_fields = val_fields
    record
end

#before_approve(handler, record) ⇒ Object



694
695
# File 'lib/engine2/meta.rb', line 694

def before_approve handler, record
end

#invoke(handler) ⇒ Object



728
729
730
731
732
# File 'lib/engine2/meta.rb', line 728

def invoke handler
    json = handler.post_to_json
    record = allocate_record(handler, json)
    validate_and_approve(handler, record, json) ? static.record(handler, record) : {record!: record.to_hash, errors!: record.errors}
end

#post_runObject



747
748
749
750
# File 'lib/engine2/meta.rb', line 747

def post_run
    super
    validate_fields *action.parent.*.get[:fields] unless validate_fields
end

#record(handler, record) ⇒ Object



724
725
726
# File 'lib/engine2/meta.rb', line 724

def record handler, record
    {errors: nil}
end

#validate(name, &blk) ⇒ Object



734
735
736
# File 'lib/engine2/meta.rb', line 734

def validate name, &blk
    (@validations ||= {})[name] = blk
end

#validate_and_approve(handler, record, json) ⇒ Object



700
701
702
703
704
705
706
707
708
709
710
# File 'lib/engine2/meta.rb', line 700

def validate_and_approve handler, record, json
    static.before_approve(handler, record)
    record.valid?
    validate_record(handler, record)
    if record.errors.empty?
        static.after_approve(handler, record)
        true
    else
        false
    end
end

#validate_fields(*fields) ⇒ Object



686
687
688
689
690
691
692
# File 'lib/engine2/meta.rb', line 686

def validate_fields *fields
    if fields.empty?
        @validate_fields
    else
        @validate_fields = assets[:model].type_info.keys & (fields + assets[:model].primary_keys).uniq
    end
end

#validate_record(handler, record) ⇒ Object



738
739
740
741
742
743
744
745
# File 'lib/engine2/meta.rb', line 738

def validate_record handler, record
    @validations.each do |name, val|
        unless record.errors[name]
            result = val.(record, handler)
            record.errors.add(name, result) if result
        end
    end if @validations
end