rubomatic-html 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f93d8b1bd52c69097c04559276f39987693aca36f73cbd4f1d64f835426d0e33
4
- data.tar.gz: 276af7014cc5aafcbdc1e98df823850eb1516ab128421b6490b1c71084d331f6
3
+ metadata.gz: de42c63dd8d7c9614c542c944569dc5605ec8203ecdeabafe10e1830968f6430
4
+ data.tar.gz: 8f145a25cde91e5b60e173f9d14ace922bfb0a88ccc6200b925afc4397afd95b
5
5
  SHA512:
6
- metadata.gz: e1b07226346996ebb43ee9ae0be08175eb70dccb2725271c19cd628431039cb4ede751866b45c9f8799278082498cdc08c8d57df91d7f2e508892de3247d4702
7
- data.tar.gz: ceae777ae5ad633569dab21ad02427738fab8cfaae146514837dce86c090f239e803dfafecdd5bf0bb63074e11e14547f891c661d6dd684d5f22869f4fe285c7
6
+ metadata.gz: cf883c5d6f31d92b2a16809f0a2fa7c34ce364e5bf98dd9bcb7977a3404ba21422e74f5282652d87766c38783fe6e4f54cbdfe4dfd7257a8308d53c81ea45681
7
+ data.tar.gz: 8aa6620bed7ef566f79d8d0053ceed56ee9b60a84307c9653b3a43bbdbc0988fbdbe38dceb420063ff4269d0082af225d0647657015e2de3fb2f38e7e2f35ccd
data/README.adoc CHANGED
@@ -1,6 +1,8 @@
1
1
  = RubomaticHtml
2
2
 
3
- Gem for shared html linting for BrandsInsurance
3
+ Gem for shared html linting for BrandsInsurance.
4
+
5
+ Make sure ran from project root
4
6
 
5
7
  == Installation
6
8
 
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubomatic-html'
4
+ require 'optparse'
5
+
6
+ options = {}
7
+ parser = OptionParser.new do |parser|
8
+ parser.on(
9
+ '-l',
10
+ '--linting-files comma,separated,list,of,files',
11
+ Array,
12
+ 'List of files to lint. Defaults to check everything in app/views'
13
+ )
14
+
15
+ parser.on(
16
+ '-i',
17
+ '--ignored-files comma,separated,list,of,files',
18
+ Array,
19
+ 'List of files to ignore. Additionally ignores contents of .lint_html_ignore'
20
+ )
21
+ end
22
+ parser.parse!(into: options)
23
+
24
+ RubomaticHtml::Runner.new(options[:'linting-files'], options.fetch(:'ignored-files', [])).run
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubomaticHtml
4
+ module Cop
5
+ class Base
6
+ # @return [String]
7
+ attr_accessor :file
8
+
9
+ # :nodoc:
10
+ def initialize(file)
11
+ @file = file
12
+ end
13
+
14
+ private
15
+
16
+ # Outputs filename:line_number locations of HTML files that trigger the cop
17
+ #
18
+ # @param line [String] the line in the html
19
+ # @param index [Integer] the 1-index of the line
20
+ #
21
+ # @return [void]
22
+ #
23
+ def run_for_line(line, index)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+ require_relative 'layout/line_length'
5
+ require_relative 'layout/trailing_whitespace'
6
+ require_relative 'style/partial_instance_variable'
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubomaticHtml
4
+ module Cop
5
+ module Layout
6
+ class LineLength < RubomaticHtml::Cop::Base
7
+ # @see super
8
+ def run_for_line(line, index)
9
+ return if line.size <= 120
10
+
11
+ puts("#{file}:#{index}: is over 120 characters")
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubomaticHtml
4
+ module Cop
5
+ module Layout
6
+ class MultipleLineBreaks < RubomaticHtml::Cop::Base
7
+ # @return [Boolean]
8
+ attr_accessor :prev_break
9
+
10
+ def initialize(file)
11
+ super
12
+
13
+ @prev_break = false
14
+ end
15
+
16
+ # @see super
17
+ def run_for_line(line, index)
18
+ if prev_break && line.size.zero?
19
+ puts("#{file}:#{index}: has multiple line breaks")
20
+ elsif line.size.zero?
21
+ @prev_break = true
22
+ else
23
+ @prev_break = false
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubomaticHtml
4
+ module Cop
5
+ module Layout
6
+ class TrailingWhitespace < RubomaticHtml::Cop::Base
7
+ # @see super
8
+ def run_for_line(line, index)
9
+ return unless line.match?(/\s\z/i)
10
+
11
+ puts("#{file}:#{index}: has trailing whitespace")
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubomaticHtml
4
+ module Cop
5
+ module Style
6
+ class PartialInstanceVariable < RubomaticHtml::Cop::Base
7
+ # @see super
8
+ def run_for_line(line, index)
9
+ return unless File.basename(file).match?(/^_/i)
10
+ return unless line.match?(/@/i)
11
+
12
+ puts("#{file}:#{index}: might use an instance variable")
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubomaticHtml
4
- VERSION = '0.1.0'
4
+ VERSION = '0.3.0'
5
5
  end
@@ -1,6 +1,69 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'rubomatic-html/version'
4
+ require_relative 'rubomatic-html/cop/cops'
4
5
 
5
6
  module RubomaticHtml
7
+ class Runner
8
+ # @return [Array<String>]
9
+ attr_accessor :files_to_lint
10
+ # @return [Array<String>]
11
+ attr_accessor :files_to_ignore
12
+
13
+ # @param linted_files [Array<String>]
14
+ # @param ignored_files [Array<String>]
15
+ #
16
+ def initialize(linted_files, ignored_files)
17
+ files_to_ignore = Array(ignored_files)
18
+ ignore_file = '.lint_html_ignore'
19
+
20
+ if File.exist?(ignore_file)
21
+ files_to_ignore += File.readlines(ignore_file, chomp: true)
22
+ end
23
+
24
+ files_to_lint = Array(linted_files)
25
+
26
+ if files_to_lint.empty?
27
+ files_to_lint = Dir[File.join('app', 'views', '**', '*')]
28
+ end
29
+
30
+ @files_to_lint = files_to_lint
31
+ @files_to_ignore = files_to_ignore
32
+ end
33
+
34
+ def run
35
+ files_to_lint.each do |file|
36
+ next if files_to_ignore.any? { |ignored| file.end_with?(ignored) }
37
+
38
+ ext = File.extname(file)
39
+ next if ext.match?(/haml/i)
40
+
41
+ check_it = ext.match?(/html/i)
42
+ check_it ||= ext.match?(/erb\z/i)
43
+
44
+ next unless check_it
45
+
46
+ run_file(file)
47
+ end
48
+ end
49
+
50
+ private
51
+
52
+ def all_cops
53
+ @all_cops ||= [
54
+ RubomaticHtml::Cop::Layout::LineLength,
55
+ RubomaticHtml::Cop::Layout::MultipleLineBreaks,
56
+ RubomaticHtml::Cop::Layout::TrailingWhitespace,
57
+ RubomaticHtml::Cop::Style::PartialInstanceVariable
58
+ ]
59
+ end
60
+
61
+ def run_file(file)
62
+ cops = all_cops.map { |cop| cop.new(file) }
63
+
64
+ File.open(file).each_line(chomp: true).with_index(1) do |line, index|
65
+ cops.each { |cop| cop.run_for_line(line, index) }
66
+ end
67
+ end
68
+ end
6
69
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubomatic-html
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brands Insurance
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-02 00:00:00.000000000 Z
11
+ date: 2023-05-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubomatic
@@ -24,30 +24,24 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 2.2.0
27
- - !ruby/object:Gem::Dependency
28
- name: rubocop-brands_insurance
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 1.3.0
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 1.3.0
41
27
  description:
42
28
  email:
43
29
  - documents@brandsinsurance.com
44
- executables: []
30
+ executables:
31
+ - rubomatic-html
45
32
  extensions: []
46
33
  extra_rdoc_files: []
47
34
  files:
48
35
  - CHANGELOG.adoc
49
36
  - LICENSE.txt
50
37
  - README.adoc
38
+ - exe/rubomatic-html
39
+ - lib/rubomatic-html/cop/base.rb
40
+ - lib/rubomatic-html/cop/cops.rb
41
+ - lib/rubomatic-html/cop/layout/line_length.rb
42
+ - lib/rubomatic-html/cop/layout/multiple_line_breaks.rb
43
+ - lib/rubomatic-html/cop/layout/trailing_whitespace.rb
44
+ - lib/rubomatic-html/cop/style/partial_instance_variable.rb
51
45
  - lib/rubomatic-html/version.rb
52
46
  - lib/rubomatic_html.rb
53
47
  homepage: https://github.com/BrandsInsurance/expert-chainsaw/