sieve-parser 0.0.4 → 0.0.5
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/lib/sieve-parser/filter.rb +27 -20
- data/lib/sieve-parser/filterset.rb +28 -4
- data/sieve-parser.gemspec +1 -1
- metadata +2 -2
data/lib/sieve-parser/filter.rb
CHANGED
@@ -19,6 +19,7 @@ module Sieve
|
|
19
19
|
@type = (params[:type]) ? params[:name] : "if"
|
20
20
|
@name = params[:name]
|
21
21
|
@join = params[:join]
|
22
|
+
@disabled = params[:disabled]
|
22
23
|
@conditions = (params[:conditions]) ? params[:conditions] : []
|
23
24
|
@actions = (params[:actions]) ? params[:actions] : []
|
24
25
|
parse unless @text.nil?
|
@@ -61,15 +62,17 @@ module Sieve
|
|
61
62
|
#@return [string] text of filter
|
62
63
|
def to_s
|
63
64
|
text = "# #{name}\n"
|
64
|
-
text += ((disabled?) ? "false #" : "")
|
65
|
+
text += "#{@type}" + ((disabled?) ? " false #" : "")
|
65
66
|
if conditions.count > 1
|
66
67
|
text += " #{@join} (" + conditions.join(", ") + ")"
|
67
68
|
else
|
68
69
|
text += " " + conditions[0].to_s
|
69
70
|
end
|
70
|
-
text += "\n{\n
|
71
|
-
text += actions.join("\n\t")
|
71
|
+
text += "\n{\n"
|
72
|
+
text += "\t" + actions.join("\n\t") if actions.count > 0
|
72
73
|
text += "\n}\n"
|
74
|
+
rescue => e
|
75
|
+
puts e.to_s
|
73
76
|
end
|
74
77
|
|
75
78
|
# Is disabled or not? Return the status of filter
|
@@ -85,24 +88,28 @@ module Sieve
|
|
85
88
|
private
|
86
89
|
# Parse conditions, call the parse_common or parse_vacation
|
87
90
|
def parse
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
91
|
+
begin
|
92
|
+
#regex_rules_params = "(^#.*)\nif([\s\w\:\"\.\;\(\)\,\-]+)\{([\@\<>=a-zA-Z0-9\s\[\]\_\:\"\.\;\(\)\,\-\/]+)\}$"
|
93
|
+
#regex_rules_params2 = "(^#.*)\n(\S+)(.+)\n\{\n([\s\S]*)\}"
|
94
|
+
parts = @text.scan(/(^#.*)\n(\S+)\s(.+)\n\{\n([\s\S]*)\n\}/)[0]
|
95
|
+
parse_name(parts[0])
|
96
|
+
@type = parts[1]
|
97
|
+
|
98
|
+
self.disable! if parts[2] =~ /.*false #/
|
99
|
+
#if the join is true, dont have conditions...
|
100
|
+
if parts[2] =~ /true/
|
101
|
+
@conditions << Condition.new(type:"true")
|
102
|
+
elsif parts[2] =~ /(anyof|allof)/
|
103
|
+
@join = parts[2][/^\S+/]
|
104
|
+
@conditions.concat(Condition.parse_all( parts[2].scan(/\(([\S\s]+)\)/)[0][0] ))
|
105
|
+
else
|
106
|
+
@conditions << Condition.new(text:parts[2])
|
107
|
+
end
|
108
|
+
|
109
|
+
@actions.concat(Action.parse_all(parts[3]))
|
110
|
+
rescue => e
|
111
|
+
puts e.to_s + " - text: #{@text}"
|
103
112
|
end
|
104
|
-
|
105
|
-
@actions.concat(Action.parse_all(parts[3]))
|
106
113
|
end
|
107
114
|
|
108
115
|
|
@@ -11,7 +11,13 @@
|
|
11
11
|
# @author Thiago Coutinho<thiago.coutinho@locaweb.com.br>
|
12
12
|
# @note This code folow de "THE BEER-WARE LICENSE"
|
13
13
|
|
14
|
+
class SieveErrors
|
15
|
+
class FilterNotFound < StandardError;end
|
16
|
+
class InvalidParam < StandardError;end
|
17
|
+
end
|
18
|
+
|
14
19
|
module Sieve
|
20
|
+
|
15
21
|
class FilterSet
|
16
22
|
attr_accessor :text_sieve, :auto_require
|
17
23
|
|
@@ -22,7 +28,7 @@ module Sieve
|
|
22
28
|
@text_sieve = text_sieve
|
23
29
|
@requires = []
|
24
30
|
@filters = []
|
25
|
-
@auto_require = true
|
31
|
+
@auto_require = true
|
26
32
|
parse unless @text_sieve.nil?
|
27
33
|
end
|
28
34
|
|
@@ -44,7 +50,7 @@ module Sieve
|
|
44
50
|
# @return [Sieve::Filter]
|
45
51
|
def filter_index_by_name(name)
|
46
52
|
key = @filters.index{|f| f.name==name}
|
47
|
-
raise
|
53
|
+
raise SieveErrors::FilterNotFound unless key
|
48
54
|
key
|
49
55
|
end
|
50
56
|
|
@@ -83,8 +89,26 @@ module Sieve
|
|
83
89
|
# Return a text of filterset
|
84
90
|
#@return [string] text of filterset
|
85
91
|
def to_s
|
92
|
+
text = ""
|
86
93
|
text = "require [\"#{requires.join('","')}\"];\n" if @requires.count > 0
|
87
|
-
text += filters.join("")
|
94
|
+
text += filters.join("") if filters.count > 0
|
95
|
+
text
|
96
|
+
end
|
97
|
+
|
98
|
+
# Return a array of filters by select with all given params
|
99
|
+
#@param [{:name=>String, :disabled => Boolean, :text => String}]
|
100
|
+
#@note The :text only have text to search
|
101
|
+
#@return [Array<Sieve::Filter>]
|
102
|
+
def where
|
103
|
+
entries =[]
|
104
|
+
@filters.each do |filter|
|
105
|
+
cond = false
|
106
|
+
cond = filter.name == args[:name] unless args[:name].nil?
|
107
|
+
cond = filter.disabled? == args[:disabled] unless args[:disabled].nil?
|
108
|
+
cond = filter.to_s =~ /#{args[:text]}/ unless args[:text].nil?
|
109
|
+
entries << filter if cond
|
110
|
+
end
|
111
|
+
entries
|
88
112
|
end
|
89
113
|
|
90
114
|
private
|
@@ -95,7 +119,7 @@ module Sieve
|
|
95
119
|
@requires.concat(r[0].split('","'))
|
96
120
|
end
|
97
121
|
|
98
|
-
@text_sieve.scan(/(^#.*\nif[\s\w\:\"\.\;\(\)\,\-]*\n\{[a-zA-Z0-9\s\@\<>=\:\[\]\_\"\.\;\(\)
|
122
|
+
@text_sieve.scan(/(^#.*\nif[\s\w\:\"\.\;\(\)\,\-]*\n\{[a-zA-Z0-9\s\@\<>=\:\[\]\_\"\.\;\(\)\&\,\-\/]*\n\}$)/).each do |f|
|
99
123
|
@filters << Sieve::Filter.new(text:f[0])
|
100
124
|
end
|
101
125
|
|
data/sieve-parser.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sieve-parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-09 00:00:00.000000000Z
|
13
13
|
dependencies: []
|
14
14
|
description: ! " sieve-parser is a pure-ruby implementation for parsing and \n
|
15
15
|
\ manipulate the sieve scripts.\n"
|