rxraw-lineparser 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/rxraw-lineparser.rb +25 -14
  2. metadata +2 -2
@@ -23,6 +23,7 @@ module Enumerable
23
23
  end
24
24
 
25
25
  class RXRawLineParser
26
+
26
27
 
27
28
  def initialize(format_mask)
28
29
  @format_mask = format_mask
@@ -33,9 +34,10 @@ class RXRawLineParser
33
34
  field_names = @format_mask.to_s.scan(/\[!(\w+)\]/).flatten.map(&:to_sym)
34
35
 
35
36
  patterns = possible_patterns(@format_mask)
36
-
37
+ #patterns.each{|x| puts x.inspect}
38
+
37
39
  pattern = patterns.detect {|x| line.match(/#{x.join}/)}.join
38
- field_values = line.match(/#{pattern}/).captures
40
+ field_values = line.match(/#{pattern}/).captures.map(&:strip)
39
41
 
40
42
  found_quotes = find_qpattern(pattern)
41
43
 
@@ -51,9 +53,11 @@ class RXRawLineParser
51
53
  private
52
54
 
53
55
  def possible_patterns(format_mask)
54
-
56
+
57
+ part1 = format_mask[/^[^\[]+/].to_s
58
+
55
59
  tot_fields = format_mask.scan(/\[!\w+\]/).length
56
- return [['(.*)']] if tot_fields <= 1
60
+ return [[part1 + '(.*)']] if tot_fields <= 1
57
61
  main_fields = tot_fields - 1
58
62
  qpattern = %q{(["'][^"']+["'])}
59
63
 
@@ -74,25 +78,31 @@ class RXRawLineParser
74
78
  d = a[i]
75
79
  case item
76
80
  when 1
77
- qpattern
81
+ qpattern
78
82
  when 0
79
83
  if d.length == 1 then
80
- s = "([^%s]+)" % d
84
+ if i < x.length - 1 then
85
+ s = "([^%s]+)%s" % ([d]*2)
86
+ else
87
+ s = "([^%s]+)" % d
88
+ end
81
89
  else
82
- s = "(.*)(?=#{d})"
90
+ s = i < x.length - 1 ? "(.*)(?=#{d})#{d}" : "(.*)"
83
91
  end
84
- i > 0 ? a[i-1] + s : s
92
+ s
85
93
  end
86
94
 
87
95
  end
88
- x2.unshift '^' + x2.shift
96
+
97
+ r = x2.unshift '^' + part1 + x2.shift
89
98
 
90
99
  end
91
100
 
92
- rr.each{|x| puts x.inspect}
101
+ #rr.each{|x| puts x.inspect}
93
102
 
94
103
  count = 2**main_fields
95
- rr2 = rr.take(count+1).map {|x| x + [a[-1] + '(.*)']}
104
+
105
+ rr2 = rr.take(count+1).map {|x| x + ['(.*)']}
96
106
 
97
107
  if rr.length > 2 then
98
108
  wild_r = rr2.slice!(-1)
@@ -100,7 +110,7 @@ class RXRawLineParser
100
110
  else
101
111
  rrr = rr2 + rr[0..count-1] + rr[count..-1]
102
112
  end
103
- rrr + [['(.*)']]
113
+ rrr + [[part1 + '(.*)']]
104
114
  end
105
115
 
106
116
  def diminishing_permutation(max_fields)
@@ -110,12 +120,13 @@ class RXRawLineParser
110
120
  end
111
121
 
112
122
  def find_qpattern(s)
113
- s.split(/(?=\([^\)]+\))/).map.with_index\
123
+ s.split(/(?=\(\?=)|(?=\(\[")/).map.with_index\
114
124
  .select{|x,i| x[/\["'\]\[\^"'\]\+\["'\]/] }.map(&:last)
115
125
  end
116
126
 
117
127
  def fmask_delimiters(f)
118
- a = f.split(/(?=\[!\w+\])/)[0..-2].map {|x| x[/\](.*)/,1] }
128
+ a = f.split(/(?=\[!\w+\])/)[0..-2].map {|x| x[/\](.*)/,1] }.compact
119
129
  end
120
130
 
131
+
121
132
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: rxraw-lineparser
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.4
5
+ version: 0.1.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - James Robertson
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-05-03 00:00:00 +01:00
13
+ date: 2012-05-06 00:00:00 +01:00
14
14
  default_executable:
15
15
  dependencies: []
16
16