Class: RubyEventStore::DeprecatedReadAPIRewriter

Inherits:
Parser::TreeRewriter
  • Object
show all
Defined in:
lib/ruby_event_store/deprecated_read_api_rewriter.rb

Instance Method Summary collapse

Instance Method Details

#on_send(node) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/ruby_event_store/deprecated_read_api_rewriter.rb', line 18

def on_send(node)
  node.each_descendant(:send) { |desc_node| on_send(desc_node) }

  _, method_name, *args = node.children
  return unless DEPRECATED_READER_METHODS.include?(method_name)
  replace_range = node.location.selector
  replace_range = replace_range.join(node.location.end) if node.location.end

  case method_name
  when :read_all_streams_backward, :read_events_backward
    rewrite_api("read.backward", replace_range, **parse_args(args))
  when :read_stream_events_backward
    rewrite_api("read.backward", replace_range, count: nil, **parse_args(args))
  when :read_all_streams_forward, :read_events_forward
    rewrite_api("read", replace_range, **parse_args(args))
  when :read_stream_events_forward
    rewrite_api("read", replace_range, count: nil, **parse_args(args))
  end
end

#parse_args(args) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/ruby_event_store/deprecated_read_api_rewriter.rb', line 46

def parse_args(args)
  return {} if args.empty?

  case args.size
  when 1
    case args[0].type
    when :hash
      stream_name, kwargs = nil, args[0]
    else
      stream_name, kwargs = parse_value(args[0]), AST::Node.new(:hash)
    end
  else
    stream_name, kwargs = parse_value(args[0]), args[1]
  end

  kwargs
    .children
    .reduce({stream: stream_name}) do |memo, pair|
    keyword, value = pair.children
    memo[parse_keyword(keyword)] = parse_value(value)
    memo
  end
end

#parse_keyword(node) ⇒ Object



74
75
76
# File 'lib/ruby_event_store/deprecated_read_api_rewriter.rb', line 74

def parse_keyword(node)
  node.children[0].to_sym
end

#parse_value(node) ⇒ Object



70
71
72
# File 'lib/ruby_event_store/deprecated_read_api_rewriter.rb', line 70

def parse_value(node)
  Unparser.unparse(node)
end

#rewrite_api(query, range, start: nil, count: PAGE_SIZE, stream: nil) ⇒ Object



38
39
40
41
42
43
44
# File 'lib/ruby_event_store/deprecated_read_api_rewriter.rb', line 38

def rewrite_api(query, range, start: nil, count: PAGE_SIZE, stream: nil)
  query << ".stream(#{stream})" if stream
  query << ".from(#{start})" if start
  query << ".limit(#{count})" if count

  replace(range, "#{query}.to_a")
end