wcc 1.2.0 → 1.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.
- data/README.md +3 -3
- data/assets/conf.yml +2 -0
- data/assets/filter.d/and.rb +11 -0
- data/assets/filter.d/changes_of.rb +1 -0
- data/assets/filter.d/matches.rb +27 -0
- data/assets/filter.d/not.rb +5 -0
- data/assets/filter.d/or.rb +11 -0
- data/assets/filter.d/rel_changes_of.rb +2 -0
- data/assets/template.d/mail-body.html.erb +3 -3
- data/lib/wcc/diff.rb +3 -4
- data/lib/wcc/filter.rb +38 -0
- data/lib/wcc.rb +1 -1
- metadata +8 -4
data/README.md
CHANGED
@@ -27,13 +27,13 @@ and then
|
|
27
27
|
|
28
28
|
wcc-init
|
29
29
|
|
30
|
-
At this time you should run the
|
30
|
+
At this time you should run the `wcc` command only in this directory since wcc reads it's
|
31
31
|
configuration by default from './conf.yml'.
|
32
32
|
|
33
33
|
Usage
|
34
34
|
-----
|
35
35
|
|
36
|
-
The installed 'wcc' gem provides a
|
36
|
+
The installed 'wcc' gem provides a `wcc` binary on the command line.
|
37
37
|
It can invoked by hand or automatically via *cron* on a server environment.
|
38
38
|
|
39
39
|
For using wcc you need to specify some options:
|
@@ -71,7 +71,7 @@ Then don't forget to run
|
|
71
71
|
|
72
72
|
in your '/my/conf' directory which interactively asks to overwrite local 'assets'
|
73
73
|
like mail templates and filters with the original ones out of the gem (which you copied
|
74
|
-
there using
|
74
|
+
there using `wcc-init` at the beginning).
|
75
75
|
|
76
76
|
NOTE: You should **make a backup** (especially of your **conf.yml**) of the '/my/conf'
|
77
77
|
directory **before upgrading**.
|
data/assets/conf.yml
CHANGED
@@ -25,6 +25,8 @@ sites:
|
|
25
25
|
- test
|
26
26
|
- arg-test: {number: 5, hello: world}
|
27
27
|
- only_changes_of: {at_least: 4, t: lines}
|
28
|
+
# Regex filter that performs matching against <scope> (one of full or diff)
|
29
|
+
- matches: {regex: '(normal|regex)[!]+', flags: i, scope: diff}
|
28
30
|
# readable, isn't it?
|
29
31
|
- url: https://my.secret.place/
|
30
32
|
emails:
|
@@ -12,6 +12,7 @@ WCC::Filters.add 'changes_of' do |data,args|
|
|
12
12
|
when 'hunk','hunks'
|
13
13
|
cmp_val = data.diff.nhunks
|
14
14
|
end
|
15
|
+
WCC::Filters.debug "changes_of #{cmp_val} #{args['t'] || args['type']}"
|
15
16
|
next (cmp_val >= args['at_least']) if args.key?('at_least')
|
16
17
|
next (cmp_val > args['more_than']) if args.key?('more_than')
|
17
18
|
next (cmp_val <= args['at_most']) if args.key?('at_most')
|
@@ -0,0 +1,27 @@
|
|
1
|
+
|
2
|
+
WCC::Filters.add 'matches' do |data,args|
|
3
|
+
WCC::Filters.debug "regex: #{args['regex']}"
|
4
|
+
# args['flags'] is assumed to be a string that might be empty or
|
5
|
+
# contains any of the characters 'i','e','m' in any order.
|
6
|
+
ropts = []
|
7
|
+
if not args['flags'].nil?
|
8
|
+
WCC::Filters.debug "flags: #{args['flags']}"
|
9
|
+
ropts << Regexp::IGNORECASE if args['options'].include?('i')
|
10
|
+
ropts << Regexp::EXTENDED if args['options'].include?('e')
|
11
|
+
ropts << Regexp::MULTILINE if args['options'].include?('m')
|
12
|
+
end
|
13
|
+
WCC::Filters.debug "ropts: #{ropts.inspect}"
|
14
|
+
if ropts.empty?
|
15
|
+
r = Regexp.new(args['regex'])
|
16
|
+
else
|
17
|
+
r = Regexp.new(args['regex'], ropts.inject {|acc,x| acc |= x})
|
18
|
+
end
|
19
|
+
case args['scope']
|
20
|
+
when 'diff','change',nil
|
21
|
+
md = r.match(data.diff.to_s)
|
22
|
+
when 'site','full'
|
23
|
+
md = r.match(data.site.content)
|
24
|
+
end
|
25
|
+
WCC::Filters.debug "match: #{md.inspect}"
|
26
|
+
(not md.nil?)
|
27
|
+
end
|
@@ -6,11 +6,13 @@ WCC::Filters.add 'rel_changes_of' do |data,args|
|
|
6
6
|
case args['percent_of']
|
7
7
|
when 'all_lines',nil
|
8
8
|
percent = data.diff.nlinesc.to_f / data.site.content.count("\n").+(1).to_f * 100
|
9
|
+
# TODO: extend rel_changes_of filter
|
9
10
|
# when 'all_chars','all_characters'
|
10
11
|
# percent = ...
|
11
12
|
# when 'nonblank_lines'
|
12
13
|
# percent = ...
|
13
14
|
end
|
15
|
+
WCC::Filters.debug "rel_changes_of #{percent} of #{args['percent_of']}"
|
14
16
|
next (percent >= args['at_least']) if args.key?('at_least')
|
15
17
|
next (percent > args['more_than']) if args.key?('more_than')
|
16
18
|
next (percent <= args['at_most']) if args.key?('at_most')
|
@@ -78,11 +78,11 @@
|
|
78
78
|
<% elsif o.status == :range %>
|
79
79
|
<li class="range">@@<%= o.text %></li>
|
80
80
|
<% elsif o.status == :ins %>
|
81
|
-
<li class="ins"
|
81
|
+
<li class="ins">+ <%= o.html_hilite_text('x').lstrip %></li>
|
82
82
|
<% elsif o.status == :del %>
|
83
|
-
<li class="del"
|
83
|
+
<li class="del">- <%= o.html_hilite_text('x').lstrip %></li>
|
84
84
|
<% else %>
|
85
|
-
<li class="other"
|
85
|
+
<li class="other"> <%= o.text.substring(1).lstrip %></li>
|
86
86
|
<% end %>
|
87
87
|
<% end %>
|
88
88
|
</ul>
|
data/lib/wcc/diff.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
|
2
2
|
module WCC
|
3
|
-
# TODO: Handle tabs/trailing whitespace in output
|
4
3
|
|
5
4
|
class DiffItem
|
6
5
|
attr_reader :status, :text
|
@@ -19,10 +18,10 @@ module WCC
|
|
19
18
|
@text = line.substring(2)
|
20
19
|
elsif line.start_with?('+')
|
21
20
|
@status = :ins
|
22
|
-
@text = line.substring(1)
|
21
|
+
@text = line.substring(1)
|
23
22
|
elsif line.start_with?('-')
|
24
23
|
@status = :del
|
25
|
-
@text = line.substring(1)
|
24
|
+
@text = line.substring(1)
|
26
25
|
else
|
27
26
|
@status = :other
|
28
27
|
@text = line.rstrip
|
@@ -92,7 +91,7 @@ module WCC
|
|
92
91
|
when :del
|
93
92
|
'-'+text
|
94
93
|
when :other
|
95
|
-
text
|
94
|
+
' '+text
|
96
95
|
end
|
97
96
|
end
|
98
97
|
end
|
data/lib/wcc/filter.rb
CHANGED
@@ -14,11 +14,49 @@ module WCC
|
|
14
14
|
class Filters
|
15
15
|
@@filters = {}
|
16
16
|
|
17
|
+
# API method - register a filters code block under given ID.
|
18
|
+
# Should be called by filters the following way:
|
19
|
+
#
|
20
|
+
# WCC::Filters.add 'filter-name' { block }
|
21
|
+
#
|
22
|
+
# @param [String] id the "name" of the filter
|
23
|
+
# @param [Proc] block a block of code returning true (Accept)
|
24
|
+
# or false (Decline) as the filters result
|
17
25
|
def self.add(id, &block)
|
18
26
|
WCC.logger.info "Adding filter '#{id}'"
|
19
27
|
@@filters[id] = block
|
20
28
|
end
|
21
29
|
|
30
|
+
# API method - invoke the specfied filter and give it's result.
|
31
|
+
#
|
32
|
+
# @param [Object] data arbitrary data the filter might use
|
33
|
+
# @param [String] id the "name" of the filter
|
34
|
+
# @param [Hash] args the arguments of the filter
|
35
|
+
# @return [Boolean] true if filter returned true, false otherwise
|
36
|
+
def self.call(data, id, args = {})
|
37
|
+
block = @@filters[id]
|
38
|
+
if block.nil?
|
39
|
+
raise "Call to requested filter '#{id}' failed - filter not found!"
|
40
|
+
end
|
41
|
+
block.call(data, args)
|
42
|
+
end
|
43
|
+
|
44
|
+
# API method - log msg as error
|
45
|
+
def self.error(msg); WCC.logger.error "filter: #{msg}" end
|
46
|
+
# API method - log msg as warn
|
47
|
+
def self.warn(msg); WCC.logger.warn "filter: #{msg}" end
|
48
|
+
# API method - log msg as info
|
49
|
+
def self.info(msg); WCC.logger.info "filter: #{msg}" end
|
50
|
+
# API method - log msg as debug
|
51
|
+
def self.debug(msg); WCC.logger.debug "filter: #{msg}" end
|
52
|
+
|
53
|
+
# Called by wcc check routine to evaluate all filters
|
54
|
+
# and produce and'ed result of their boolean returns.
|
55
|
+
#
|
56
|
+
# @param [Object] data arbitrary data the filters might use
|
57
|
+
# @param [Array] filters list of FilterRefs with the IDs of the
|
58
|
+
# filters to be executed
|
59
|
+
# @return [Boolean] true if all filters returned true, false otherwise
|
22
60
|
def self.accept(data, filters)
|
23
61
|
return true if filters.nil?
|
24
62
|
|
data/lib/wcc.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wcc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 0
|
10
|
-
version: 1.
|
10
|
+
version: 1.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Christian Nicolai
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-10-
|
18
|
+
date: 2011-10-15 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: htmlentities
|
@@ -58,8 +58,12 @@ extra_rdoc_files:
|
|
58
58
|
- README.md
|
59
59
|
files:
|
60
60
|
- assets/conf.yml
|
61
|
+
- assets/filter.d/and.rb
|
61
62
|
- assets/filter.d/arg-test.rb
|
62
63
|
- assets/filter.d/changes_of.rb
|
64
|
+
- assets/filter.d/matches.rb
|
65
|
+
- assets/filter.d/not.rb
|
66
|
+
- assets/filter.d/or.rb
|
63
67
|
- assets/filter.d/rel_changes_of.rb
|
64
68
|
- assets/filter.d/test.rb
|
65
69
|
- assets/template.d/mail.alt.erb
|