Class: AdLint::Cc1::ValueVersionController
- Inherits:
-
Object
- Object
- AdLint::Cc1::ValueVersionController
- Defined in:
- lib/adlint/cc1/value.rb
Instance Method Summary collapse
- #begin_forking ⇒ Object
- #copy_current_version ⇒ Object
- #current_values ⇒ Object
- #end_forking ⇒ Object
- #enter_new_versioning_group ⇒ Object
- #fork_current_version ⇒ Object
-
#initialize(orig_val) ⇒ ValueVersionController
constructor
A new instance of ValueVersionController.
- #leave_current_versioning_group ⇒ Object
- #mark_current_versioning_group_as_sticky ⇒ Object
- #merge_forked_versions ⇒ Object
- #original_value ⇒ Object
- #thin_current_version(with_rollback) ⇒ Object
Constructor Details
#initialize(orig_val) ⇒ ValueVersionController
Returns a new instance of ValueVersionController.
2631 2632 2633 |
# File 'lib/adlint/cc1/value.rb', line 2631 def initialize(orig_val) @versioning_group_stack = [RootVersioningGroup.new(orig_val)] end |
Instance Method Details
#begin_forking ⇒ Object
2652 2653 2654 |
# File 'lib/adlint/cc1/value.rb', line 2652 def begin_forking current_versioning_group.begin_new_version end |
#copy_current_version ⇒ Object
2698 2699 2700 2701 2702 2703 2704 |
# File 'lib/adlint/cc1/value.rb', line 2698 def copy_current_version # NOTE: This method must be called between ending of the forking section # and ending of the versioning group. if current_versioning_group.sticky? current_values.each { |mval| mval.fork } end end |
#current_values ⇒ Object
2639 2640 2641 |
# File 'lib/adlint/cc1/value.rb', line 2639 def current_values current_versioning_group.current_values end |
#end_forking ⇒ Object
2656 2657 2658 |
# File 'lib/adlint/cc1/value.rb', line 2656 def end_forking current_versioning_group.end_current_version end |
#enter_new_versioning_group ⇒ Object
2643 2644 2645 2646 |
# File 'lib/adlint/cc1/value.rb', line 2643 def enter_new_versioning_group new_group = VersioningGroup.new(current_versioning_group.current_version) @versioning_group_stack.push(new_group) end |
#fork_current_version ⇒ Object
2660 2661 2662 |
# File 'lib/adlint/cc1/value.rb', line 2660 def fork_current_version fork_all_versions end |
#leave_current_versioning_group ⇒ Object
2648 2649 2650 |
# File 'lib/adlint/cc1/value.rb', line 2648 def leave_current_versioning_group @versioning_group_stack.pop end |
#mark_current_versioning_group_as_sticky ⇒ Object
2688 2689 2690 2691 2692 2693 2694 2695 2696 |
# File 'lib/adlint/cc1/value.rb', line 2688 def mark_current_versioning_group_as_sticky @versioning_group_stack.reverse_each do |group| if group.sticky? break else group.sticky = true end end end |
#merge_forked_versions ⇒ Object
2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 |
# File 'lib/adlint/cc1/value.rb', line 2706 def merge_forked_versions # NOTE: This method must be called between ending of the forking section # and ending of the versioning group. base_ver = current_versioning_group.base_version case when current_versioning_group.sticky? fork_all_versions base_vals = base_ver.values.map { |mval| mval.descendants }.flatten base_ver.values = base_vals.each_with_object({}) { |mval, hash| if eql_mval = hash[mval] eql_mval._base.tag.by = mval._base.tag.by + eql_mval._base.tag.by eql_mval._base.tag.at = mval._base.tag.at + eql_mval._base.tag.at else hash[mval] = mval end }.keys when current_versioning_group.versions_forked? # NOTE: When versions in the current versioning group have been forked, # base_version of the current versioning group has already been # forked. So, it is safe to overwrite the base_version's values # with the current versioning group's initial snapshot values. init_vals = current_versioning_group.initial_values vals = base_ver.values.zip(init_vals) vals.each do |base_mval, init_sval| base_mval.delete_descendants! if base_mval.kind_of?(VersionedValue) base_mval._orig_overwrite!(init_sval, TransitionTag.new) else base_mval.overwrite!(init_sval, TransitionTag.new) end end else # NOTE: Nothing to be done when base_version of the current versioning # group has not been forked. end end |
#original_value ⇒ Object
2635 2636 2637 |
# File 'lib/adlint/cc1/value.rb', line 2635 def original_value root_versioning_group.initial_values.first end |
#thin_current_version(with_rollback) ⇒ Object
2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 |
# File 'lib/adlint/cc1/value.rb', line 2664 def thin_current_version(with_rollback) # NOTE: This method must be called in the forking section. forked = current_version.forked? if with_rollback initial_vals = current_version.initial_values current_versioning_group.delete_current_version_completely base_vals = current_versioning_group.base_values base_vals.zip(initial_vals).each do |mval, init_val| mval.rollback! if forked mval.overwrite!(init_val, TransitionTag.new) if init_val end begin_forking else current_versioning_group.delete_current_version if forked current_versioning_group.base_values.each { |mval| mval.rollback! } end end mark_current_versioning_group_as_sticky end |