Module: Docscribe::Infer::Behavior
- Defined in:
- lib/docscribe/infer/behavior.rb
Overview
Analyzes method behavior (predicates, side effects, mutating calls).
Constant Summary collapse
- MUTATING_METHODS =
%i[<< push pop delete merge update write save create destroy insert update_all delete_all].freeze
Class Method Summary collapse
- .analyze(body, method_name) ⇒ Hash<Symbol, Object>
- .default_result(method_name) ⇒ Hash<Symbol, Object>
- .infer_description(analysis, _method_name) ⇒ String?
Class Method Details
.analyze(body, method_name) ⇒ Hash<Symbol, Object>
14 15 16 17 18 19 20 21 |
# File 'lib/docscribe/infer/behavior.rb', line 14 def analyze(body, method_name) result = default_result(method_name) return result unless body.is_a?(Parser::AST::Node) analyze_body(body, result) result end |
.default_result(method_name) ⇒ Hash<Symbol, Object>
25 26 27 28 29 30 31 32 33 34 |
# File 'lib/docscribe/infer/behavior.rb', line 25 def default_result(method_name) { predicate: method_name&.to_s&.end_with?('?') || false, bang: method_name&.to_s&.end_with?('!') || false, has_side_effects: false, delegates: nil, returns_self: false, returns_boolean: false } end |
.infer_description(analysis, _method_name) ⇒ String?
39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/docscribe/infer/behavior.rb', line 39 def infer_description(analysis, _method_name) return nil unless analysis[:has_side_effects] || analysis[:predicate] if analysis[:predicate] 'Returns true if the condition is met, false otherwise' elsif analysis[:returns_self] 'Returns self to allow method chaining' elsif analysis[:has_side_effects] nil end end |