Class: Ast::Crispr::OperationProfile
- Inherits:
-
Object
- Object
- Ast::Crispr::OperationProfile
- Includes:
- ProfileReportCompatibility
- Defined in:
- lib/ast/crispr.rb,
lib/ast/crispr.rb
Constant Summary collapse
- KNOWN_OPERATION_KINDS =
{ replace: { family: :rewrite, description: 'Replace selected content with explicit replacement text' }, merge_replace: { family: :rewrite, description: 'Replace selected content with the result of a merge-gem slice merge' }, delete: { family: :removal, description: 'Delete selected content without inserting replacement text' }, delete_batch: { family: :removal, description: 'Delete content selected by multiple structural selectors in one source pass' }, insert: { family: :insertion, description: 'Insert explicit text at a destination anchor or append fallback' }, move: { family: :relocation, description: 'Relocate selected content or explicit replacement text to a destination anchor' } }.freeze
- KNOWN_REQUIREMENTS =
%i[none optional required].freeze
- KNOWN_REPLACEMENT_SOURCES =
%i[none explicit_text captured_text_or_explicit merge_template_text].freeze
Instance Attribute Summary collapse
-
#destination_requirement ⇒ Object
readonly
Returns the value of attribute destination_requirement.
-
#metadata ⇒ Object
readonly
Returns the value of attribute metadata.
-
#operation_kind ⇒ Object
readonly
Returns the value of attribute operation_kind.
-
#replacement_source ⇒ Object
readonly
Returns the value of attribute replacement_source.
-
#source_requirement ⇒ Object
readonly
Returns the value of attribute source_requirement.
Instance Method Summary collapse
- #captures_source_text? ⇒ Boolean
- #explicit_replacement? ⇒ Boolean
-
#initialize(operation_kind:, source_requirement:, destination_requirement:, replacement_source:, captures_source_text: false, supports_if_missing: false, metadata: {}, **options) ⇒ OperationProfile
constructor
A new instance of OperationProfile.
- #known_operation_kind? ⇒ Boolean
- #may_reuse_captured_text? ⇒ Boolean
- #operation_family ⇒ Object
- #operation_kind_metadata ⇒ Object
- #report ⇒ Object
- #requires_destination? ⇒ Boolean
- #requires_source? ⇒ Boolean
- #selects_source? ⇒ Boolean
- #supports_destination? ⇒ Boolean
- #supports_if_missing? ⇒ Boolean
- #to_h ⇒ Object
Constructor Details
#initialize(operation_kind:, source_requirement:, destination_requirement:, replacement_source:, captures_source_text: false, supports_if_missing: false, metadata: {}, **options) ⇒ OperationProfile
Returns a new instance of OperationProfile.
600 601 602 603 604 605 606 607 608 609 |
# File 'lib/ast/crispr.rb', line 600 def initialize(operation_kind:, source_requirement:, destination_requirement:, replacement_source:, captures_source_text: false, supports_if_missing: false, metadata: {}, **) @operation_kind = operation_kind&.to_sym @source_requirement = normalize_requirement(source_requirement, :source_requirement) @destination_requirement = normalize_requirement(destination_requirement, :destination_requirement) @replacement_source = normalize_replacement_source(replacement_source) @captures_source_text = captures_source_text ? true : false @supports_if_missing = supports_if_missing ? true : false @metadata = .merge().freeze end |
Instance Attribute Details
#destination_requirement ⇒ Object (readonly)
Returns the value of attribute destination_requirement.
598 599 600 |
# File 'lib/ast/crispr.rb', line 598 def destination_requirement @destination_requirement end |
#metadata ⇒ Object (readonly)
Returns the value of attribute metadata.
598 599 600 |
# File 'lib/ast/crispr.rb', line 598 def @metadata end |
#operation_kind ⇒ Object (readonly)
Returns the value of attribute operation_kind.
598 599 600 |
# File 'lib/ast/crispr.rb', line 598 def operation_kind @operation_kind end |
#replacement_source ⇒ Object (readonly)
Returns the value of attribute replacement_source.
598 599 600 |
# File 'lib/ast/crispr.rb', line 598 def replacement_source @replacement_source end |
#source_requirement ⇒ Object (readonly)
Returns the value of attribute source_requirement.
598 599 600 |
# File 'lib/ast/crispr.rb', line 598 def source_requirement @source_requirement end |
Instance Method Details
#captures_source_text? ⇒ Boolean
639 640 641 |
# File 'lib/ast/crispr.rb', line 639 def captures_source_text? @captures_source_text end |
#explicit_replacement? ⇒ Boolean
647 648 649 |
# File 'lib/ast/crispr.rb', line 647 def explicit_replacement? replacement_source == :explicit_text end |
#known_operation_kind? ⇒ Boolean
619 620 621 |
# File 'lib/ast/crispr.rb', line 619 def known_operation_kind? KNOWN_OPERATION_KINDS.key?(operation_kind) end |
#may_reuse_captured_text? ⇒ Boolean
651 652 653 |
# File 'lib/ast/crispr.rb', line 651 def may_reuse_captured_text? replacement_source == :captured_text_or_explicit end |
#operation_family ⇒ Object
615 616 617 |
# File 'lib/ast/crispr.rb', line 615 def operation_family &.fetch(:family, nil) end |
#operation_kind_metadata ⇒ Object
611 612 613 |
# File 'lib/ast/crispr.rb', line 611 def KNOWN_OPERATION_KINDS[operation_kind]&.dup&.freeze end |
#report ⇒ Object
1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 |
# File 'lib/ast/crispr.rb', line 1660 def report data = to_h.merge( operation_family: operation_family || :unknown, known_source_requirement: KNOWN_REQUIREMENTS.include?(source_requirement), known_destination_requirement: KNOWN_REQUIREMENTS.include?(destination_requirement), known_replacement_source: KNOWN_REPLACEMENT_SOURCES.include?(replacement_source), selects_source: selects_source?, requires_source: requires_source?, supports_destination: supports_destination?, requires_destination: requires_destination?, explicit_replacement: explicit_replacement?, may_reuse_captured_text: may_reuse_captured_text? ) stringified_report(data) end |
#requires_destination? ⇒ Boolean
635 636 637 |
# File 'lib/ast/crispr.rb', line 635 def requires_destination? destination_requirement == :required end |
#requires_source? ⇒ Boolean
627 628 629 |
# File 'lib/ast/crispr.rb', line 627 def requires_source? source_requirement == :required end |
#selects_source? ⇒ Boolean
623 624 625 |
# File 'lib/ast/crispr.rb', line 623 def selects_source? source_requirement != :none end |
#supports_destination? ⇒ Boolean
631 632 633 |
# File 'lib/ast/crispr.rb', line 631 def supports_destination? destination_requirement != :none end |
#supports_if_missing? ⇒ Boolean
643 644 645 |
# File 'lib/ast/crispr.rb', line 643 def supports_if_missing? @supports_if_missing end |
#to_h ⇒ Object
655 656 657 658 659 660 661 662 663 664 665 666 667 |
# File 'lib/ast/crispr.rb', line 655 def to_h { operation_kind: operation_kind, operation_family: operation_family, known_operation_kind: known_operation_kind?, source_requirement: source_requirement, destination_requirement: destination_requirement, replacement_source: replacement_source, captures_source_text: captures_source_text?, supports_if_missing: supports_if_missing?, metadata: } end |