yast-rake 0.2.1 → 0.2.2

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
  SHA1:
3
- metadata.gz: 1bbb403c890ab6c775bd9a4e0c1fc520ab44a379
4
- data.tar.gz: 2fd864fc0b84fb7f789904a5207f4ee37967197b
3
+ metadata.gz: 6064a1a8380fe02784d5f7009d4c700aa8d7980c
4
+ data.tar.gz: 12db5b4793732221de0f81a7e94941e66d7d825d
5
5
  SHA512:
6
- metadata.gz: 6535a53fdd8007a0013f716937d71e6964beb7ffa129caad0ca0e128a8f960700696e3451d179d4aa33835b980d69527b09f111283f6b497d5a8fcf8ca697691
7
- data.tar.gz: db261d5f3eb90a4b7150a5fdfa278882aab810db42c3dad8634771bc2f91adc4ac82e0441114ab01ecb55e3c23580222c79c0696a87b8a4a42f6279118461a13
6
+ metadata.gz: aeb3e3082628dc89e9c39c794f2eaba7914ff167de09d33fbed35289beb22027a39b9f95f309d3f8163cd4018e1af431e0e35755804a12634aa44e3a09b56e3e
7
+ data.tar.gz: eba47c56dda60084cd00e3dc6e447c289250d0554a6f384176c1179a928bc7564243b0c9acfb4aa8f96860e0e19a9a160d969cfdff931c021a18988a6f4f5fa6
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.2.2
@@ -0,0 +1,50 @@
1
+ # This is the global spellcheck config shared by all YaST repositories.
2
+
3
+ ---
4
+ check:
5
+ - "**/*.html"
6
+ - "**/*.md"
7
+ ignore: []
8
+ dictionary:
9
+ #
10
+ # Notes: Write the words in alphabetical order, if an unknown word
11
+ # is not generic put it into the repository specific dictionary.
12
+ #
13
+ - API
14
+ - bnc
15
+ - boolean
16
+ - Bugzilla
17
+ - devel
18
+ - DHCP
19
+ - freenode
20
+ - gh
21
+ - GitHub
22
+ - GitHub's
23
+ - html
24
+ - IRC
25
+ - LDAP
26
+ - md
27
+ - NCurses
28
+ - NFS
29
+ - NIS
30
+ - openSUSE
31
+ - osc
32
+ - Rakefile
33
+ - rb
34
+ - refactorings
35
+ - RSpec
36
+ - runlevel
37
+ - SCR
38
+ - SLP
39
+ - sudo
40
+ - SUSE
41
+ - systemd
42
+ - testsuite
43
+ - UI
44
+ - WFM
45
+ - workflow
46
+ - yast
47
+ - YaST
48
+ - ycp
49
+ - YCP
50
+ - zypper
@@ -28,97 +28,5 @@
28
28
  # The lines starting with '#' character are ignored (used for comments),
29
29
  #
30
30
 
31
- GLOBAL_DICTIONARY_FILE = "spell.dict"
32
- CUSTOM_DICTIONARY_FILE = ".spell.dict"
33
-
34
- def read_dictionary_file(file)
35
- puts "Loading custom dictionary (#{file})..." if verbose == true
36
- words = File.read(file).split("\n")
37
-
38
- # remove comments
39
- words.reject! { |word| word.start_with?("#")}
40
- words.each(&:chomp!)
41
- end
42
-
43
- # read the global and the repository custom dictionary
44
- def read_custom_words
45
- # read the global default custom dictionary
46
- dict_path = File.expand_path("../#{GLOBAL_DICTIONARY_FILE}", __FILE__)
47
- custom_words = read_dictionary_file(dict_path)
48
-
49
- # read the custom dictionary from the project directory if present
50
- dict_path = CUSTOM_DICTIONARY_FILE
51
- if File.exist?(dict_path)
52
- local_dict = read_dictionary_file(dict_path)
53
- duplicates = custom_words & local_dict
54
-
55
- if !duplicates.empty?
56
- $stderr.puts "Warning: Found duplicates in the local dictionary (#{dict_path}):\n"
57
- duplicates.each {|duplicate| $stderr.puts " #{duplicate}" }
58
- $stderr.puts
59
- end
60
-
61
- custom_words += local_dict - duplicates
62
- end
63
-
64
- custom_words
65
- end
66
-
67
- def aspell_speller
68
- # raspell is an optional dependency, handle the missing case nicely
69
- begin
70
- require "raspell"
71
- rescue LoadError
72
- $stderr.puts "ERROR: Ruby gem \"raspell\" is not installed."
73
- exit 1
74
- end
75
-
76
- # initialize aspell
77
- speller = Aspell.new("en_US")
78
- speller.suggestion_mode = Aspell::NORMAL
79
- # ignore the HTML tags in the text
80
- speller.set_option("mode", "html")
81
-
82
- speller
83
- end
84
-
85
- namespace :check do
86
- desc "Run spell checker (by default for *.md and *.html files in Git)"
87
- task :spelling, :regexp do |t, args|
88
- regexp = args[:regexp] || /\.(md|html)\z/
89
- success = true
90
-
91
- files = `git ls-files . | grep -v \\.gitignore`.split("\n")
92
- files.select!{|file| file.match(regexp)}
93
-
94
- custom_words = read_custom_words
95
- speller = aspell_speller
96
-
97
- files.each do |file|
98
- puts "Checking #{file}..." if verbose == true
99
- # spell check each line separately so we can report error locations properly
100
- lines = File.read(file).split("\n")
101
-
102
- lines.each_with_index do |text, index|
103
- misspelled = speller.list_misspelled([text]) - custom_words
104
-
105
- if !misspelled.empty?
106
- success = false
107
- puts "#{file}:#{index + 1}: #{text.inspect}"
108
- misspelled.each do |word|
109
- puts " #{word.inspect} => #{speller.suggest(word)}"
110
- end
111
- puts
112
- end
113
- end
114
- end
115
-
116
- if success
117
- puts "Spelling OK."
118
- else
119
- $stderr.puts "Spellcheck failed! (Fix it or add the words to " \
120
- "'#{CUSTOM_DICTIONARY_FILE}' file if it is OK.)"
121
- exit 1
122
- end
123
- end
124
- end
31
+ require_relative "spellcheck_task"
32
+ Yast::SpellcheckTask.new
@@ -0,0 +1,170 @@
1
+ #--
2
+ # Yast rake
3
+ #
4
+ # Copyright (C) 2015 Novell, Inc.
5
+ # This library is free software; you can redistribute it and/or modify
6
+ # it only under the terms of version 2.1 of the GNU Lesser General Public
7
+ # License as published by the Free Software Foundation.
8
+ #
9
+ # This library is distributed in the hope that it will be useful, but WITHOUT
10
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11
+ # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12
+ # details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+ #++
18
+ #
19
+ # Rake task for checking spelling in the documentation files.
20
+ # By default checks all *.md and *.html files.
21
+ #
22
+ # Supports custom dictionaries:
23
+ #
24
+ # - global dictionary located in the tasks gem (lib/tasks/spell.yml)
25
+ # - repository specific dictionary (.spell.yml in the root directory)
26
+ #
27
+ # The custom dictionaries are defined at the "dictionary" key.
28
+ #
29
+
30
+ require 'rake'
31
+ require 'rake/tasklib'
32
+
33
+ module Yast
34
+ # Defines a spellcheck rake task
35
+ class SpellcheckTask < Rake::TaskLib
36
+ GLOBAL_SPELL_CONFIG_FILE = File.expand_path("../spell.yml", __FILE__)
37
+ CUSTOM_SPELL_CONFIG_FILE = ".spell.yml"
38
+
39
+ # define the Rake task in the constructor
40
+ def initialize
41
+ namespace :check do
42
+ desc "Run spell checker (by default for *.md and *.html files)"
43
+ task :spelling do
44
+ run_task
45
+ end
46
+ end
47
+
48
+ end
49
+
50
+ private
51
+
52
+ # optionally colorize the misspelled words if the rainbow gem is present
53
+ # @return [Boolean] true when the colorization support is present
54
+ def colorize?
55
+ return @colorize unless @colorize.nil?
56
+
57
+ begin
58
+ require "rainbow"
59
+ @colorize = true
60
+ rescue LoadError
61
+ @colorize = false
62
+ end
63
+ end
64
+
65
+ # create an Aspell speller object
66
+ # @return [Aspell] the speller object
67
+ def speller
68
+ return @speller if @speller
69
+ # raspell is an optional dependency, handle the missing case nicely
70
+ begin
71
+ require "raspell"
72
+ rescue LoadError
73
+ $stderr.puts "ERROR: Ruby gem \"raspell\" is not installed."
74
+ exit 1
75
+ end
76
+
77
+ # initialize aspell
78
+ @speller = Aspell.new("en_US")
79
+ @speller.suggestion_mode = Aspell::NORMAL
80
+ # ignore the HTML tags in the text
81
+ @speller.set_option("mode", "html")
82
+
83
+ @speller
84
+ end
85
+
86
+ # evaluate the files to check
87
+ # @return [Array<String>] list of files
88
+ def files_to_check
89
+ files = config["check"].reduce([]) {|acc, glob| acc + Dir[glob]}
90
+ config["ignore"].reduce(files) {|acc, glob| acc - Dir[glob]}
91
+ end
92
+
93
+ # read a Yaml config file
94
+ def read_spell_config(file)
95
+ return {} unless File.exist?(file)
96
+
97
+ puts "Loading config file (#{file})..." if verbose == true
98
+ require "yaml"
99
+ YAML.load_file(file)
100
+ end
101
+
102
+ # print the duplicate dictionary entries
103
+ # @param dict1 [Array<String>] the first dictionary
104
+ # @param dict2 [Array<String>] the second dictionary
105
+ def report_duplicates(dict1, dict2)
106
+ duplicates = dict1 & dict2
107
+ return if duplicates.empty?
108
+
109
+ $stderr.puts "Warning: Found dictionary duplicates in the local dictionary " \
110
+ "(#{CUSTOM_SPELL_CONFIG_FILE}):\n"
111
+ duplicates.each {|duplicate| $stderr.puts " #{duplicate}" }
112
+ $stderr.puts
113
+ end
114
+
115
+ # return the merged global and the custom spell configs
116
+ # @return [Hash] the merged configuration to use
117
+ def config
118
+ return @config if @config
119
+
120
+ @config = read_spell_config(GLOBAL_SPELL_CONFIG_FILE)
121
+ custom_config = read_spell_config(CUSTOM_SPELL_CONFIG_FILE)
122
+
123
+ report_duplicates(config["dictionary"], custom_config["dictionary"].to_a)
124
+
125
+ custom_config["dictionary"] = @config["dictionary"] + custom_config["dictionary"].to_a
126
+ custom_config["dictionary"].uniq!
127
+
128
+ # override the global values by the local if present
129
+ @config.merge!(custom_config)
130
+
131
+ @config
132
+ end
133
+
134
+ # check the file using the spellchecker
135
+ # @param file [String] file name
136
+ # @return [Boolean] true on success (no spelling error found)
137
+ def check_file(file)
138
+ puts "Checking #{file}..." if verbose == true
139
+ # spell check each line separately so we can report error locations properly
140
+ lines = File.read(file).split("\n")
141
+
142
+ success = true
143
+ lines.each_with_index do |text, index|
144
+ misspelled = speller.list_misspelled([text]) - config["dictionary"]
145
+ next if misspelled.empty?
146
+
147
+ success = false
148
+ misspelled.each {|word| text.gsub!(word, Rainbow(word).red)} if colorize?
149
+ puts "#{file}:#{index + 1}: \"#{text}\""
150
+
151
+ misspelled.each { |word| puts " #{word.inspect} => #{speller.suggest(word)}" }
152
+ puts
153
+ end
154
+
155
+ success
156
+ end
157
+
158
+ # run the task
159
+ def run_task
160
+ if files_to_check.all? { |file| check_file(file) }
161
+ puts "Spelling OK."
162
+ else
163
+ $stderr.puts "Spellcheck failed! (Fix it or add the words to " \
164
+ "'#{CUSTOM_SPELL_CONFIG_FILE}' file if it is OK.)"
165
+ exit 1
166
+ end
167
+ end
168
+
169
+ end
170
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yast-rake
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josef Reidinger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-26 00:00:00.000000000 Z
11
+ date: 2015-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -52,8 +52,9 @@ files:
52
52
  - lib/tasks/install.rake
53
53
  - lib/tasks/pot.rake
54
54
  - lib/tasks/run.rake
55
- - lib/tasks/spell.dict
55
+ - lib/tasks/spell.yml
56
56
  - lib/tasks/spellcheck.rake
57
+ - lib/tasks/spellcheck_task.rb
57
58
  - lib/tasks/test_unit.rake
58
59
  - lib/tasks/version.rake
59
60
  - lib/yast/rake.rb
data/lib/tasks/spell.dict DELETED
@@ -1,43 +0,0 @@
1
- # This is the global custom dictionary shared with all YaST repositories.
2
- #
3
- # Write the words in alphabetical order, one word per line.
4
- # If an unknown word is not generic put it into the repository specific dictionary.
5
- #
6
- API
7
- bnc
8
- boolean
9
- Bugzilla
10
- devel
11
- DHCP
12
- freenode
13
- gh
14
- GitHub
15
- GitHub's
16
- html
17
- IRC
18
- LDAP
19
- md
20
- NCurses
21
- NFS
22
- NIS
23
- openSUSE
24
- osc
25
- Rakefile
26
- rb
27
- refactorings
28
- RSpec
29
- runlevel
30
- SCR
31
- SLP
32
- sudo
33
- SUSE
34
- systemd
35
- testsuite
36
- UI
37
- WFM
38
- workflow
39
- yast
40
- YaST
41
- ycp
42
- YCP
43
- zypper