xail 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/TODO.md ADDED
@@ -0,0 +1,8 @@
1
+ # To-dos
2
+
3
+ * support explicitly listing streams, especially multiple streams
4
+ * curses UI to show rate for the stream and for groups
5
+ * support for sub-line filters (and, generally, for multi-part input and
6
+ output)
7
+
8
+
@@ -13,11 +13,10 @@ group('fatal') {
13
13
 
14
14
  group('error') {
15
15
  contains 'error', 'exception'
16
- red
17
16
  bold
18
17
  }
19
18
 
20
19
  group('warning') {
21
20
  contains 'warn'
22
21
  yellow
23
- }
22
+ }
@@ -16,17 +16,7 @@ A Ruby utility for performing basic stream processing, directly focused on incre
16
16
 
17
17
 
18
18
  def Xail.run(configuration)
19
-
20
- begin
21
- extend Xail::DSL
22
-
23
- eval(configuration)
24
- filter = filter_in_scope
25
-
26
- if !has_final
27
- filter << PassThroughFilter.new
28
- end
29
- end
19
+ filter = Xail.build_from_config(configuration)
30
20
 
31
21
  stream = $stdin
32
22
  stream.each() do |line|
@@ -2,18 +2,35 @@
2
2
  require 'xail/filter'
3
3
 
4
4
  module Xail
5
+ def self.build_from_config(configuration)
6
+ begin
7
+ extend Xail::DSL
8
+ eval(configuration)
9
+
10
+ filter = filter_in_scope
11
+
12
+ if !has_final
13
+ filter << PassThroughFilter.new
14
+ end
15
+ end
16
+
17
+ return filter
18
+ end
19
+
5
20
  module DSL
6
21
  def get_binding
7
22
  binding
8
23
  end
9
24
 
10
25
  def filter_scope(compound)
26
+ # add this compound filter to the filter currently in scope
11
27
  filter_in_scope << compound
12
- @filter_stack << compound
13
-
14
- yield
15
28
 
16
- @filter_stack.pop
29
+ if block_given?
30
+ @filter_stack << compound
31
+ yield
32
+ @filter_stack.pop
33
+ end
17
34
  end
18
35
 
19
36
  def filter(&block)
@@ -24,16 +41,9 @@ module Xail
24
41
  end
25
42
  end
26
43
 
27
- # TODO add support for explicitly listing sources
28
- #def stream(name, source = null)
29
- # source ||= name
30
- #end
31
-
32
44
  def group(name, &filters)
33
45
  # TODO intergrate with UX
34
- filter_scope(FilterComposition.new) {
35
- filters.yield
36
- }
46
+ filter_scope(FilterComposition.new, &filters)
37
47
  end
38
48
 
39
49
  attr :has_final
@@ -55,15 +65,13 @@ module Xail
55
65
 
56
66
  def method_missing(name, *args, &block)
57
67
  abort "internal error #{name} #{args} #{block}" unless name
68
+
58
69
  filterClass = FilterRegistry::get_filter(name.downcase)
59
- filter_scope(filterClass.new(*args)) do
60
- block.yield if block
61
- end
62
- filter_in_scope << filter
70
+ filter_scope(filterClass.new(*args), &block)
63
71
 
64
- # short circuit the stream line stop exception so we can catch it
65
- # in xail main
66
72
  rescue StreamLineStop => stop
73
+ # short circuit the stream line stop exception so we can catch it
74
+ # in xail main
67
75
  raise stop
68
76
 
69
77
  rescue UnknownFilter => error
@@ -73,4 +81,4 @@ module Xail
73
81
  abort "#{filter_in_scope} will not accept #{name} as subfilter: #{error}"
74
82
  end
75
83
  end
76
- end
84
+ end
@@ -70,6 +70,8 @@ module Xail
70
70
  #
71
71
 
72
72
  class AbstractCompoundFilter < AbstractFilter
73
+ attr_reader :filters
74
+
73
75
  def initialize
74
76
  @filters = []
75
77
  end
@@ -280,4 +282,4 @@ module Xail
280
282
  class Underscore < AbstractColorFilter; end
281
283
  class Negative < AbstractColorFilter; end
282
284
  class Dark < AbstractColorFilter; end
283
- end
285
+ end
@@ -1,12 +1,7 @@
1
1
  module Xail
2
2
  class UI
3
- def write_line()
4
-
5
- end
6
-
7
- def write_status_line()
8
-
9
- end
3
+ # TODO
4
+ # do I really have to use curses?
10
5
  end
11
6
  end
12
7
 
@@ -1,3 +1,3 @@
1
1
  module Xail
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -0,0 +1,17 @@
1
+ require 'xail/config'
2
+
3
+ include Xail
4
+
5
+ describe Config do
6
+ it "should support a trivial filter" do
7
+ filter = build_from_config <<-CONF
8
+ group('main') {
9
+ contains 'cat'
10
+ red
11
+ }
12
+ CONF
13
+
14
+ filter.streamLine('dog').should eq('dog')
15
+ filter.streamLine('cat').should eq("\e[31mcat\e[0m")
16
+ end
17
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xail
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-24 00:00:00.000000000Z
12
+ date: 2012-02-26 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70300575161740 !ruby/object:Gem::Requirement
16
+ requirement: &70282585842340 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70300575161740
24
+ version_requirements: *70282585842340
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: trollop
27
- requirement: &70300575161280 !ruby/object:Gem::Requirement
27
+ requirement: &70282585841900 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70300575161280
35
+ version_requirements: *70282585841900
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: term-ansicolor
38
- requirement: &70300575160760 !ruby/object:Gem::Requirement
38
+ requirement: &70282585841400 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70300575160760
46
+ version_requirements: *70282585841400
47
47
  description: A lightweight Ruby DSL for building text-stream filters
48
48
  email:
49
49
  - wiktor@tumblr.com
@@ -56,6 +56,7 @@ files:
56
56
  - Gemfile
57
57
  - README.md
58
58
  - Rakefile
59
+ - TODO.md
59
60
  - bin/xail
60
61
  - examples/customfilter.xail.rb
61
62
  - examples/logview.xail.rb
@@ -65,6 +66,7 @@ files:
65
66
  - lib/xail/filter.rb
66
67
  - lib/xail/ui.rb
67
68
  - lib/xail/version.rb
69
+ - spec/config_spec.rb
68
70
  - spec/filter_spec.rb
69
71
  - xail.gemspec
70
72
  homepage: ''
@@ -92,4 +94,5 @@ signing_key:
92
94
  specification_version: 3
93
95
  summary: tail for winners
94
96
  test_files:
97
+ - spec/config_spec.rb
95
98
  - spec/filter_spec.rb