Class: Adopter::ProjectAnalyzer

Inherits:
Object
  • Object
show all
Defined in:
lib/adopter/project_analyzer.rb

Overview

:reek:TooManyMethods { enabled: false }

Constant Summary collapse

KNOWN_FRAMEWORK_GEMS =
%w[
  activesupport allure-cucumber allure-rspec allure-minitest allure-ruby-commons
  appium_lib appium_console axe-core-rspec axe-core-selenium capybara
  cucumber eyes_selenium eyes_universal minitest minitest-reporters
  parallel_split_test parallel_tests rake reek rspec rubocop rubocop-rspec
  rubocop-minitest ruby_raider selenium-webdriver site_prism watir
].freeze
PAGE_DSL_PATTERNS =
{
  site_prism: /class\s+\w+\s*<\s*SitePrism::Page/,
  capybara: /include\s+Capybara::DSL|\.fill_in\b|\.click_on\b|\.click_button\b/,
  selenium: /\.find_element\s*\(|driver\.navigate/,
  watir: /browser\.text_field|browser\.button|browser\.element/
}.freeze
PAGE_CLASS_PATTERNS =
[
  /class\s+\w+\s*<\s*SitePrism::Page/,
  /class\s+\w+\s*<\s*(?:Page|BasePage|AbstractPage)/,
  /include\s+Capybara::DSL/,
  /\.find_element\s*\(/,
  /browser\.text_field|browser\.button/,
  /def\s+(?:visit|login|click_|fill_|select_|navigate)/
].freeze
TEST_FILE_PATTERNS =
{
  rspec: { glob: '**/*_spec.rb', marker: /\b(?:describe|context|it)\b/ },
  cucumber_feature: { glob: '**/*.feature', marker: /\b(?:Feature|Scenario)\b/ },
  cucumber_step: { glob: '**/*_steps.rb', marker: /\b(?:Given|When|Then)\b/ },
  minitest: { glob: '**/test_*.rb', marker: /class\s+\w+\s*<\s*Minitest::Test/ },
  minitest_alt: { glob: '**/*_test.rb', marker: /class\s+\w+\s*<\s*Minitest::Test/ }
}.freeze
HELPER_ROLES =
{
  driver: /module\s+DriverHelper|def\s+(?:driver|create_driver)\b/,
  browser: /module\s+BrowserHelper|def\s+(?:browser|create_browser)\b/,
  capybara: /Capybara\.configure|Capybara\.register_driver/,
  env: /^(?:Before|After)\s+do\b/,
  factory: /FactoryBot|ModelFactory|def\s+self\.for\b/,
  spec_helper: /RSpec\.configure|Minitest::Test/
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(source_path, overrides = {}) ⇒ ProjectAnalyzer

Returns a new instance of ProjectAnalyzer.



51
52
53
54
# File 'lib/adopter/project_analyzer.rb', line 51

def initialize(source_path, overrides = {})
  @source_path = source_path
  @overrides = overrides
end

Instance Method Details

#analyzeObject



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/adopter/project_analyzer.rb', line 56

def analyze
  detection = ProjectDetector.detect(@source_path)
  validate_web_only!(detection)

  {
    **detection,
    **@overrides.compact,
    pages: discover_pages,
    tests: discover_tests,
    helpers: discover_helpers,
    features: discover_features,
    step_definitions: discover_step_definitions,
    custom_gems: discover_custom_gems,
    source_dsl: detect_page_dsl
  }
end