Class: VCR::UnusedCassettes::CassetteUsageFinder
- Inherits:
-
Object
- Object
- VCR::UnusedCassettes::CassetteUsageFinder
- Defined in:
- lib/vcr/unused_cassettes/cassette_usage_finder.rb
Instance Attribute Summary collapse
-
#call_context ⇒ Object
Returns the value of attribute call_context.
-
#filename ⇒ Object
Returns the value of attribute filename.
-
#used_cassettes ⇒ Object
Returns the value of attribute used_cassettes.
-
#warnings ⇒ Object
Returns the value of attribute warnings.
Instance Method Summary collapse
- #build_warning(node, error) ⇒ Object
- #extract_options(node) ⇒ Object
- #find_cassette_name(node) ⇒ Object
- #find_cassette_usages ⇒ Object
- #find_cassette_usages_in(node) ⇒ Object
-
#initialize(filename) ⇒ CassetteUsageFinder
constructor
A new instance of CassetteUsageFinder.
- #node_contains_call?(node) ⇒ Boolean
Constructor Details
#initialize(filename) ⇒ CassetteUsageFinder
9 10 11 12 13 14 |
# File 'lib/vcr/unused_cassettes/cassette_usage_finder.rb', line 9 def initialize(filename) self.filename = filename self.used_cassettes = [] self.warnings = [] self.call_context = CallContext.new end |
Instance Attribute Details
#call_context ⇒ Object
Returns the value of attribute call_context.
7 8 9 |
# File 'lib/vcr/unused_cassettes/cassette_usage_finder.rb', line 7 def call_context @call_context end |
#filename ⇒ Object
Returns the value of attribute filename.
7 8 9 |
# File 'lib/vcr/unused_cassettes/cassette_usage_finder.rb', line 7 def filename @filename end |
#used_cassettes ⇒ Object
Returns the value of attribute used_cassettes.
7 8 9 |
# File 'lib/vcr/unused_cassettes/cassette_usage_finder.rb', line 7 def used_cassettes @used_cassettes end |
#warnings ⇒ Object
Returns the value of attribute warnings.
7 8 9 |
# File 'lib/vcr/unused_cassettes/cassette_usage_finder.rb', line 7 def warnings @warnings end |
Instance Method Details
#build_warning(node, error) ⇒ Object
77 78 79 80 81 82 83 |
# File 'lib/vcr/unused_cassettes/cassette_usage_finder.rb', line 77 def build_warning(node, error) Warning.new.tap do |warning| warning. = "Could not determine cassette name for #{filename}:#{node.line}" warning.details = error. warning.backtrace = error.backtrace end end |
#extract_options(node) ⇒ Object
48 49 50 51 52 53 54 55 56 57 |
# File 'lib/vcr/unused_cassettes/cassette_usage_finder.rb', line 48 def (node) return nil if node.arguments.arguments.size <= 1 node.arguments.arguments.each do |argument_node| next unless argument_node.is_a?(Prism::KeywordHashNode) return call_context.extract_value(argument_node, string_interpolation_error: :raise) end nil rescue CallContext::ValueUnresolveable => error warnings << build_warning(node, error) end |
#find_cassette_name(node) ⇒ Object
68 69 70 71 72 73 74 75 |
# File 'lib/vcr/unused_cassettes/cassette_usage_finder.rb', line 68 def find_cassette_name(node) # cassette is the first argument of the use_cassette call cassette_argument = node.arguments.arguments.first call_context.extract_value(cassette_argument, string_interpolation_error: :wildcard) rescue CallContext::ValueUnresolveable => error warnings << build_warning(node, error) nil end |
#find_cassette_usages ⇒ Object
16 17 18 19 20 21 22 23 |
# File 'lib/vcr/unused_cassettes/cassette_usage_finder.rb', line 16 def find_cassette_usages parse_result = Prism.parse_file(filename) return [[], []] unless parse_result find_cassette_usages_in(parse_result.value) [used_cassettes, warnings] end |
#find_cassette_usages_in(node) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/vcr/unused_cassettes/cassette_usage_finder.rb', line 25 def find_cassette_usages_in(node) return if node.nil? call_context.track(node) if node_contains_call?(node) found_name = find_cassette_name(node) if !found_name.nil? && /[a-zA-Z0-9]/.match?(found_name) cassette_use = {pattern: found_name} = (node) cassette_use[:persister] = [:persist_with] if &.has_key?(:persist_with) cassette_use[:serializer] = [:serialize_with] if &.has_key?(:serialize_with) used_cassettes << cassette_use end end return if node.child_nodes.nil? node.child_nodes.each do |child_node| find_cassette_usages_in(child_node) end end |
#node_contains_call?(node) ⇒ Boolean
59 60 61 62 63 64 65 66 |
# File 'lib/vcr/unused_cassettes/cassette_usage_finder.rb', line 59 def node_contains_call?(node) return false unless node.is_a?(Prism::CallNode) receiver = node.receiver return false unless receiver.is_a?(Prism::ConstantReadNode) && receiver.name == :VCR node.name == :use_cassette end |