Class: Gitingest::ExclusionFilter
- Inherits:
-
Object
- Object
- Gitingest::ExclusionFilter
- Defined in:
- lib/gitingest/exclusion_filter.rb
Constant Summary collapse
- DEFAULT_EXCLUDES =
Default exclusion patterns for common files and directories
[ # Version control '\.git/', '\.github/', '\.gitignore', '\.gitattributes', '\.gitmodules', '\.svn', '\.hg', # System files '\.DS_Store', 'Thumbs\.db', 'desktop\.ini', # Log files '.*\.log$', '.*\.bak$', '.*\.swp$', '.*\.tmp$', '.*\.temp$', # Images and media '.*\.png$', '.*\.jpg$', '.*\.jpeg$', '.*\.gif$', '.*\.svg$', '.*\.ico$', '.*\.pdf$', '.*\.mov$', '.*\.mp4$', '.*\.mp3$', '.*\.wav$', # Archives '.*\.zip$', '.*\.tar\.gz$', # Dependency directories "node_modules/", "vendor/", "bower_components/", "\.npm/", "\.yarn/", "\.pnpm-store/", "\.bundle/", "vendor/bundle", "packages/", "site-packages/", # Virtual environments "venv/", "\.venv/", "env/", "\.env", "virtualenv/", # IDE and editor files "\.idea/", "\.vscode/", "\.vs/", "\.settings/", ".*\.sublime-.*", "\.project", "\.classpath", "xcuserdata/", ".*\.xcodeproj/", ".*\.xcworkspace/", # Lock files "package-lock\.json", "yarn\.lock", "poetry\.lock", "Pipfile\.lock", "Gemfile\.lock", "Cargo\.lock", "bun\.lock", "bun\.lockb", # Build directories and artifacts "build/", "dist/", "target/", "out/", "\.gradle/", "\.settings/", ".*\.egg-info", ".*\.egg", ".*\.whl", ".*\.so", "bin/", "obj/", "pkg/", # Cache directories "\.cache/", "\.sass-cache/", "\.eslintcache/", "\.pytest_cache/", "\.coverage", "\.tox/", "\.nox/", "\.mypy_cache/", "\.ruff_cache/", "\.hypothesis/", "\.terraform/", "\.docusaurus/", "\.next/", "\.nuxt/", # Compiled code ".*\.pyc$", ".*\.pyo$", ".*\.pyd$", "__pycache__/", ".*\.class$", ".*\.jar$", ".*\.war$", ".*\.ear$", ".*\.nar$", ".*\.o$", ".*\.obj$", ".*\.dll$", ".*\.dylib$", ".*\.exe$", ".*\.lib$", ".*\.out$", ".*\.a$", ".*\.pdb$", ".*\.nupkg$", # Language-specific files ".*\.min\.js$", ".*\.min\.css$", ".*\.map$", ".*\.tfstate.*", ".*\.gem$", ".*\.ruby-version", ".*\.ruby-gemset", ".*\.rvmrc", ".*\.rs\.bk$", ".*\.gradle", ".*\.suo", ".*\.user", ".*\.userosscache", ".*\.sln\.docstates", "gradle-app\.setting", ".*\.pbxuser", ".*\.mode1v3", ".*\.mode2v3", ".*\.perspectivev3", ".*\.xcuserstate", "\.swiftpm/", "\.build/" ].freeze
- DOT_FILE_PATTERN =
Pattern for dot files/directories
%r{(?-mix:(^\.|/\.))}
Instance Method Summary collapse
- #excluded?(path) ⇒ Boolean
-
#initialize(custom_excludes = []) ⇒ ExclusionFilter
constructor
A new instance of ExclusionFilter.
Constructor Details
#initialize(custom_excludes = []) ⇒ ExclusionFilter
Returns a new instance of ExclusionFilter.
65 66 67 68 |
# File 'lib/gitingest/exclusion_filter.rb', line 65 def initialize(custom_excludes = []) @custom_excludes = custom_excludes || [] compile_excluded_patterns end |
Instance Method Details
#excluded?(path) ⇒ Boolean
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/gitingest/exclusion_filter.rb', line 70 def excluded?(path) return true if path.match?(DOT_FILE_PATTERN) # Check for directory exclusion patterns (ending with '/') matched_dir_pattern = @directory_patterns.find { |dir_pattern| path.start_with?(dir_pattern) } return true if matched_dir_pattern # Check default regex patterns matched_default_pattern = @default_patterns.find { |pattern| path.match?(pattern) } return true if matched_default_pattern # Check custom glob patterns using File.fnmatch matched_glob_pattern = @custom_glob_patterns.find do |glob_pattern| File.fnmatch(glob_pattern, path, File::FNM_PATHNAME | File::FNM_DOTMATCH) end return true if matched_glob_pattern false end |