Class: Appium::Lint
- Inherits:
-
Object
- Object
- Appium::Lint
- Defined in:
- lib/appium_doc_lint/lint.rb,
lib/appium_doc_lint/version.rb,
lib/appium_doc_lint/lint/base.rb,
lib/appium_doc_lint/lint/h2_invalid.rb,
lib/appium_doc_lint/lint/h2_missing.rb,
lib/appium_doc_lint/lint/ext_missing.rb,
lib/appium_doc_lint/lint/h2_multiple.rb,
lib/appium_doc_lint/lint/h156_invalid.rb,
lib/appium_doc_lint/lint/line_break_invalid.rb
Defined Under Namespace
Classes: Base, ExtMissing, H156Invalid, H2Invalid, H2Missing, H2Multiple, LineBreakInvalid
Constant Summary collapse
- VERSION =
'0.0.11'- DATE =
'2014-07-03'
Instance Attribute Summary collapse
-
#input ⇒ Object
readonly
OpenStruct.new data: ”, lines: ”, file: ”.
Class Method Summary collapse
Instance Method Summary collapse
- #call(opts = {}) ⇒ Object
- #glob(dir_glob) ⇒ Object
-
#initialize ⇒ Lint
constructor
A new instance of Lint.
-
#report(data) ⇒ Object
Format data into a report.
Constructor Details
#initialize ⇒ Lint
Returns a new instance of Lint.
16 17 18 |
# File 'lib/appium_doc_lint/lint.rb', line 16 def initialize @rules = [ExtMissing, H2Missing, H2Multiple, H2Invalid, H156Invalid, LineBreakInvalid] end |
Instance Attribute Details
#input ⇒ Object (readonly)
OpenStruct.new data: ”, lines: ”, file: ”
14 15 16 |
# File 'lib/appium_doc_lint/lint.rb', line 14 def input @input end |
Class Method Details
.init_data(opts = {}, input) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/appium_doc_lint/lint.rb', line 20 def self.init_data opts={}, input raise 'Input must exist' unless input data = opts[:data] if data input.data = data.freeze input.lines = data.split(/\r?\n/).freeze input.file = nil else file = opts[:file] raise 'File path must be provided' unless file raise "File must exist and be readable #{file}" unless File.exist?(file) && File.readable?(file) raise 'File must not be a dir' if File.directory?(file) file = File.(file) input.data = File.read(file).freeze input.lines = input.data.split(/\r?\n/).freeze input.file = file.freeze end input end |
.new_input(opts) ⇒ Object
42 43 44 45 |
# File 'lib/appium_doc_lint/lint.rb', line 42 def self.new_input opts input = OpenStruct.new(data: '', lines: '', file: '') self.init_data opts, input end |
Instance Method Details
#call(opts = {}) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/appium_doc_lint/lint.rb', line 47 def call opts={} @input = self.class.new_input opts all_warnings = {} @rules.each do |rule| warnings = rule.new(@input).call unless warnings.empty? all_warnings.merge!(warnings) do |key, old_val, new_val| # flatten to prevent { :a => [[1, 2], 2]} [old_val, new_val].flatten end end end return {} if all_warnings.empty? # sort by line number all_warnings = all_warnings.sort.to_h # wrap with file path if available input.file ? { input.file => all_warnings } : all_warnings end |
#glob(dir_glob) ⇒ Object
70 71 72 73 74 75 76 77 78 79 |
# File 'lib/appium_doc_lint/lint.rb', line 70 def glob dir_glob results = {} Dir.glob dir_glob do |markdown| next if File.directory?(markdown) markdown = File. markdown results.merge!(self.call(file: markdown)) end # glob order is system dependent so sort the results. results.sort.to_h end |
#report(data) ⇒ Object
Format data into a report
82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/appium_doc_lint/lint.rb', line 82 def report data return nil if data.nil? || data.empty? result = '' data.each do |file_name, analysis| rel_path = File.join('.', File.(file_name).sub(Dir.pwd, '')) result += "\n#{rel_path}\n" analysis.each do |line_number, warning| result += " #{line_number}: #{warning.join(',')}\n" end end result.strip! result.empty? ? nil : result end |