Class: Ellipses::Client::Lines
- Inherits:
-
SimpleDelegator
- Object
- SimpleDelegator
- Ellipses::Client::Lines
- Defined in:
- lib/ellipses/client/lines.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(array_of_lines) ⇒ Lines
constructor
A new instance of Lines.
- #insertion_by_entropy ⇒ Object
- #insertion_by_surround(i, before: 0, after: 0) ⇒ Object
- #likes(insertion) ⇒ Object
- #substitute_uniq_like_chunk!(insertion, *lines) ⇒ Object
- #surrounding_chunk(i, before: 0, after: 0) ⇒ Object
- #uniq_like_chunk!(insertion) ⇒ Object
Constructor Details
#initialize(array_of_lines) ⇒ Lines
Returns a new instance of Lines.
67 68 69 70 71 |
# File 'lib/ellipses/client/lines.rb', line 67 def initialize(array_of_lines) super @delegate_sd_obj = array_of_lines end |
Class Method Details
.[](object = nil) ⇒ Object
142 143 144 145 146 147 148 149 150 |
# File 'lib/ellipses/client/lines.rb', line 142 def [](object = nil) case object when self then object when Array then new(object) when Enumerator then new(object.to_a) when NilClass then new([]) else new([*object]) end end |
Instance Method Details
#insertion_by_entropy ⇒ Object
89 90 91 92 93 94 95 96 97 98 |
# File 'lib/ellipses/client/lines.rb', line 89 def insertion_by_entropy return if empty? signature = self[center = index_of_maximum_entropy] before = center after = length - center - 1 digest = Support.digest(*self) Meta::Insertion.new before: before, after: after, signature: signature, digest: digest end |
#insertion_by_surround(i, before: 0, after: 0) ⇒ Object
80 81 82 83 84 85 86 87 |
# File 'lib/ellipses/client/lines.rb', line 80 def insertion_by_surround(i, before: 0, after: 0) return unless i < length signature = self[i] digest = Support.digest(*self[Surround.new(before: before, after: after).range(i)]) Meta::Insertion.new before: before, after: after, signature: signature, digest: digest end |
#likes(insertion) ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/ellipses/client/lines.rb', line 100 def likes(insertion) likes = [] each_with_index do |line, i| next unless line == insertion.signature next unless (chunk = surrounding_chunk(i, before: insertion.before, after: insertion.after)) next unless chunk.insertion == insertion likes << chunk end likes end |
#substitute_uniq_like_chunk!(insertion, *lines) ⇒ Object
121 122 123 124 125 |
# File 'lib/ellipses/client/lines.rb', line 121 def substitute_uniq_like_chunk!(insertion, *lines) uniq_like_chunk!(insertion).tap do |chunk| substitute_within(chunk.origin_range, *lines) end end |
#surrounding_chunk(i, before: 0, after: 0) ⇒ Object
73 74 75 76 77 78 |
# File 'lib/ellipses/client/lines.rb', line 73 def surrounding_chunk(i, before: 0, after: 0) return unless i < length range = (surround = Surround.new(before: before, after: after)).range(i) Chunk.new self[range], center: surround.center, origin: range.begin end |
#uniq_like_chunk!(insertion) ⇒ Object
114 115 116 117 118 119 |
# File 'lib/ellipses/client/lines.rb', line 114 def uniq_like_chunk!(insertion) raise UnfoundError, "No chunks found like: #{insertion}" if likes(insertion).empty? raise AmbiguousError, "Multiple chunks found like: #{insertion}" unless (likes = likes(insertion)).size == 1 likes.first end |