rubocop-cask 0.11.0 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bbaf42203ee69f23608c04ca5ea1716c1be38f99
4
- data.tar.gz: c77fa91c8897a7ee2c25bc8183a6d16d7a65edd1
3
+ metadata.gz: 442d35b763d9d298b87df4a292360fe9990a018a
4
+ data.tar.gz: 088e6c62903ded5b57296b29cbfe63b9dfc1bfd9
5
5
  SHA512:
6
- metadata.gz: d3e31e4f8ea44916bf8246715f1a0fe002a71b9c52985c181b1fea3f22c4fe5e2009080bd2bb5dda85c21f91162d8785ae74584de74d511bb3626afd1d8d5165
7
- data.tar.gz: 32cdd91d9c96411537cb117e7b5dc60cfe9ce687d02f728d22909a198cf3fa9b98660d28fa4291291205902d1adde499ea8d3669a23fb5d973b46c0119bcef3c
6
+ metadata.gz: 50bb469d68f72ea30723f96ad495717a714a78cbc1124dd0c6e1ec3427fa484f00936eb34cddb97a0eace82b87c09c976ebcc36619533315a44a2601609b3d19
7
+ data.tar.gz: ce1b8254d503ddc1e5bfe5b207dc953063a86055d2bb3af76a89daaa06fa0c6d26abab44f920068b93730dd028a40c3ee7d29bec93853f0462777ac28a2a5ef8
data/config/default.yml CHANGED
@@ -6,6 +6,10 @@ Cask/NoDslVersion:
6
6
  Description: 'Do not use the deprecated DSL version syntax in your cask header.'
7
7
  Enabled: true
8
8
 
9
+ Cask/HomepageUrlTrailingSlash:
10
+ Description: 'Ensure that the homepage url has a slash after the domain name.'
11
+ Enabled: true
12
+
9
13
  Cask/HomepageMatchesUrl:
10
14
  Description: 'Ensure that the homepage and url match, otherwise add a comment. More info at https://github.com/caskroom/homebrew-cask/blob/master/doc/cask_language_reference/stanzas/url.md#when-url-and-homepage-hostnames-differ-add-a-comment'
11
15
  Enabled: true
@@ -4,7 +4,7 @@ module RuboCop
4
4
  module Cask
5
5
  # Version information for the Cask RuboCop plugin.
6
6
  module Version
7
- STRING = '0.11.0'.freeze
7
+ STRING = '0.12.0'.freeze
8
8
 
9
9
  def self.gem_version
10
10
  Gem::Version.new(STRING)
@@ -0,0 +1,36 @@
1
+ require 'forwardable'
2
+ require 'uri'
3
+
4
+ module RuboCop
5
+ module Cop
6
+ module Cask
7
+ # This cop checks that a cask's homepage ends with a slash
8
+ # if it does not have a path component.
9
+ class HomepageUrlTrailingSlash < Cop
10
+ include OnHomepageStanza
11
+
12
+ MSG_NO_SLASH = "'%s' must have a slash after the domain.".freeze
13
+
14
+ def on_homepage_stanza(stanza)
15
+ url_node = stanza.stanza_node.method_args.first
16
+ url = url_node.str_content
17
+
18
+ return if url !~ %r{^.+://[^/]+$}
19
+ add_offense(url_node, :expression, format(MSG_NO_SLASH, url))
20
+ end
21
+
22
+ def autocorrect(node)
23
+ domain = URI(node.str_content).host
24
+
25
+ # This also takes URLs like 'https://example.org?path'
26
+ # and 'https://example.org#path' into account.
27
+ corrected_source = node.source.sub("://#{domain}", "://#{domain}/")
28
+
29
+ lambda do |corrector|
30
+ corrector.replace(node.source_range, corrected_source)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,25 @@
1
+ module RuboCop
2
+ module Cop
3
+ module Cask
4
+ # Common functionality for checking homepage stanzas.
5
+ module OnHomepageStanza
6
+ extend Forwardable
7
+ include CaskHelp
8
+
9
+ def on_cask(cask_block)
10
+ @cask_block = cask_block
11
+
12
+ toplevel_stanzas.select(&:homepage?).each do |stanza|
13
+ on_homepage_stanza(stanza)
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ attr_reader :cask_block
20
+ def_delegators :cask_block,
21
+ :toplevel_stanzas
22
+ end
23
+ end
24
+ end
25
+ end
data/lib/rubocop-cask.rb CHANGED
@@ -12,7 +12,9 @@ require 'rubocop/cask/inject'
12
12
  RuboCop::Cask::Inject.defaults!
13
13
 
14
14
  require 'rubocop/cop/cask/mixin/cask_help'
15
+ require 'rubocop/cop/cask/mixin/on_homepage_stanza'
15
16
  require 'rubocop/cop/cask/homepage_matches_url'
17
+ require 'rubocop/cop/cask/homepage_url_trailing_slash'
16
18
  require 'rubocop/cop/cask/no_dsl_version'
17
19
  require 'rubocop/cop/cask/stanza_order'
18
20
  require 'rubocop/cop/cask/stanza_grouping'
@@ -0,0 +1,53 @@
1
+ describe RuboCop::Cop::Cask::HomepageUrlTrailingSlash do
2
+ include CopSharedExamples
3
+
4
+ subject(:cop) { described_class.new }
5
+
6
+ context 'when the homepage url ends with a slash' do
7
+ let(:source) do
8
+ <<-CASK.undent
9
+ cask 'foo' do
10
+ homepage 'https://foo.example.com/'
11
+ end
12
+ CASK
13
+ end
14
+
15
+ include_examples 'does not report any offenses'
16
+ end
17
+
18
+ context 'when the homepage url does not end with a slash' do
19
+ context 'but has a path' do
20
+ let(:source) do
21
+ <<-CASK.undent
22
+ cask 'foo' do
23
+ homepage 'https://foo.example.com/path'
24
+ end
25
+ CASK
26
+ end
27
+
28
+ include_examples 'does not report any offenses'
29
+ end
30
+
31
+ context 'and has no path' do
32
+ let(:source) do
33
+ <<-CASK.undent
34
+ cask 'foo' do
35
+ homepage 'https://foo.example.com'
36
+ end
37
+ CASK
38
+ end
39
+ let(:expected_offenses) do
40
+ [{
41
+ message: "'https://foo.example.com' must have a slash "\
42
+ 'after the domain.',
43
+ severity: :convention,
44
+ line: 2,
45
+ column: 11,
46
+ source: "'https://foo.example.com'"
47
+ }]
48
+ end
49
+
50
+ include_examples 'reports offenses'
51
+ end
52
+ end
53
+ end
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-cask
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua Hagins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-12 00:00:00.000000000 Z
11
+ date: 2017-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: public_suffix
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '2.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rubocop
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.47.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.47.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
47
  version: '1.14'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.14'
55
55
  description: |2
@@ -63,10 +63,7 @@ extra_rdoc_files:
63
63
  - MIT-LICENSE.md
64
64
  - README.md
65
65
  files:
66
- - MIT-LICENSE.md
67
- - README.md
68
66
  - config/default.yml
69
- - lib/rubocop-cask.rb
70
67
  - lib/rubocop/cask/ast/cask_block.rb
71
68
  - lib/rubocop/cask/ast/cask_header.rb
72
69
  - lib/rubocop/cask/ast/stanza.rb
@@ -76,12 +73,18 @@ files:
76
73
  - lib/rubocop/cask/inject.rb
77
74
  - lib/rubocop/cask/version.rb
78
75
  - lib/rubocop/cop/cask/homepage_matches_url.rb
76
+ - lib/rubocop/cop/cask/homepage_url_trailing_slash.rb
79
77
  - lib/rubocop/cop/cask/mixin/cask_help.rb
78
+ - lib/rubocop/cop/cask/mixin/on_homepage_stanza.rb
80
79
  - lib/rubocop/cop/cask/no_dsl_version.rb
81
80
  - lib/rubocop/cop/cask/stanza_grouping.rb
82
81
  - lib/rubocop/cop/cask/stanza_order.rb
82
+ - lib/rubocop-cask.rb
83
+ - MIT-LICENSE.md
84
+ - README.md
83
85
  - spec/project_spec.rb
84
86
  - spec/rubocop/cop/cask/homepage_matches_url_spec.rb
87
+ - spec/rubocop/cop/cask/homepage_url_trailing_slash_spec.rb
85
88
  - spec/rubocop/cop/cask/no_dsl_version_spec.rb
86
89
  - spec/rubocop/cop/cask/stanza_grouping_spec.rb
87
90
  - spec/rubocop/cop/cask/stanza_order_spec.rb
@@ -97,23 +100,24 @@ require_paths:
97
100
  - lib
98
101
  required_ruby_version: !ruby/object:Gem::Requirement
99
102
  requirements:
100
- - - ">="
103
+ - - '>='
101
104
  - !ruby/object:Gem::Version
102
105
  version: 2.0.0
103
106
  required_rubygems_version: !ruby/object:Gem::Requirement
104
107
  requirements:
105
- - - ">="
108
+ - - '>='
106
109
  - !ruby/object:Gem::Version
107
110
  version: '0'
108
111
  requirements: []
109
112
  rubyforge_project:
110
- rubygems_version: 2.5.1
113
+ rubygems_version: 2.0.14.1
111
114
  signing_key:
112
115
  specification_version: 4
113
116
  summary: Code style checking for Homebrew-Cask files
114
117
  test_files:
115
118
  - spec/project_spec.rb
116
119
  - spec/rubocop/cop/cask/homepage_matches_url_spec.rb
120
+ - spec/rubocop/cop/cask/homepage_url_trailing_slash_spec.rb
117
121
  - spec/rubocop/cop/cask/no_dsl_version_spec.rb
118
122
  - spec/rubocop/cop/cask/stanza_grouping_spec.rb
119
123
  - spec/rubocop/cop/cask/stanza_order_spec.rb