Class: Prosereflect::Transform::AddNodeMarkStep

Inherits:
Step
  • Object
show all
Defined in:
lib/prosereflect/transform/mark_step.rb

Overview

Add mark to a specific node (not range-based)

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Step

#merge, #to

Constructor Details

#initialize(pos, mark) ⇒ AddNodeMarkStep

Returns a new instance of AddNodeMarkStep.



149
150
151
152
153
# File 'lib/prosereflect/transform/mark_step.rb', line 149

def initialize(pos, mark)
  super()
  @pos = pos
  @mark = mark
end

Instance Attribute Details

#markObject (readonly)

Returns the value of attribute mark.



147
148
149
# File 'lib/prosereflect/transform/mark_step.rb', line 147

def mark
  @mark
end

#posObject (readonly)

Returns the value of attribute pos.



147
148
149
# File 'lib/prosereflect/transform/mark_step.rb', line 147

def pos
  @pos
end

Class Method Details

.from_json(_schema, json) ⇒ Object



185
186
187
188
# File 'lib/prosereflect/transform/mark_step.rb', line 185

def self.from_json(_schema, json)
  mark = Prosereflect::Mark.from_h(json["mark"])
  new(json["pos"], mark)
end

Instance Method Details

#apply(doc) ⇒ Object



155
156
157
158
159
160
161
162
163
164
# File 'lib/prosereflect/transform/mark_step.rb', line 155

def apply(doc)
  return Result.fail("Invalid position") if @pos.negative? || @pos > doc.node_size

  begin
    new_doc = add_mark_to_node(doc)
    Result.ok(new_doc)
  rescue StandardError => e
    Result.fail(e.message)
  end
end

#get_mapObject



166
167
168
# File 'lib/prosereflect/transform/mark_step.rb', line 166

def get_map
  StepMap.new
end

#invert(_doc) ⇒ Object



170
171
172
# File 'lib/prosereflect/transform/mark_step.rb', line 170

def invert(_doc)
  RemoveNodeMarkStep.new(@pos, @mark)
end

#step_typeObject



174
175
176
# File 'lib/prosereflect/transform/mark_step.rb', line 174

def step_type
  "addNodeMark"
end

#to_json(*_args) ⇒ Object



178
179
180
181
182
183
# File 'lib/prosereflect/transform/mark_step.rb', line 178

def to_json(*_args)
  json = super
  json["pos"] = @pos
  json["mark"] = @mark.to_h
  json
end