tarpaulin 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -12,6 +12,7 @@ source "http://rubygems.org"
12
12
 
13
13
  gem 'tilt', '~> 1.3.1' # https://github.com/rtomayko/tilt
14
14
  gem 'lazy', '~> 0.9.6' # http://moonbase.rydia.net/software/lazy.rb/
15
+ gem 'rack-flash' # https://github.com/nakajima/rack-flash
15
16
  # gem 'erubis', '~> 2.7.0' # http://www.kuwata-lab.com/erubis/
16
17
 
17
18
  # Add dependencies to develop your gem here.
data/README.rdoc CHANGED
@@ -1,8 +1,8 @@
1
- = kommons
1
+ = Tarpaulin
2
2
 
3
- Description goes here.
3
+ My small attempt to make the world a better place to live in.
4
4
 
5
- == Contributing to kommons
5
+ == Contributing to Tarpaulin
6
6
 
7
7
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
8
8
  * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.3
1
+ 0.3.0
data/lib/tarpaulin.rb CHANGED
@@ -16,17 +16,17 @@ require "bundler/setup"
16
16
  # it's got a long name, nothing will conflict
17
17
  # http://grosser.it/2009/07/01/getting-the-caller-method-in-ruby/
18
18
  # this is like parse_caller() in ActionMailer apparently
19
- module Kernel
19
+ module Context
20
20
 
21
21
  # return [n, dirname, filename or context, line num, self, function]
22
- def determine_context (skip=1, &block)
22
+ def self.determine(skip=1, &block)
23
23
  begin
24
24
  # cheat, just in case it is nil, rather than handling that special case for now
25
25
  # cuz it's always possible to call a func that takes a block without an actual block :(
26
26
  # i suppose i could raise an ExpectingBlock Error
27
27
  b = block.send(:binding)
28
28
  snarf = caller(0)[skip] # defaults to 1
29
- # [0] is us --- ["../y_ruby/c.rb:9:in `determine_context'",
29
+ # [0] is us --- ["../y_ruby/c.rb:9:in `determine'",
30
30
  #err "caller(): #{snarf.inspect}"
31
31
  matched = /^(.+?)[:](\d+)(.*)$/.match(snarf) # +? non-greedy
32
32
  #err "matched /^(.+?)[:](\d+)(.*)$/: #{matched}"
@@ -62,7 +62,7 @@ module Kernel
62
62
  #raise NameError.new("odd name found in backtrace -- " + context)
63
63
  end # case
64
64
  end # begin
65
- end # determine_context()
65
+ end # determine()
66
66
 
67
67
  end # module Kernel
68
68
 
@@ -82,7 +82,7 @@ end # module Kernel
82
82
  class File
83
83
 
84
84
  def File.here (string)
85
- return determine_context(2){}[:path] + '/' + string
85
+ return Context::determine(2){}[:path] + '/' + string
86
86
  end
87
87
 
88
88
  end
@@ -106,4 +106,6 @@ end
106
106
  require File.here "tarpaulin/logger"
107
107
  require File.here "tarpaulin/endless"
108
108
  require File.here "tarpaulin/camping"
109
+ require File.here "tarpaulin/camping/flash"
110
+ require File.here "tarpaulin/camping/filter"
109
111
  require File.here "tarpaulin/tilt/clearsilver_template"
@@ -16,10 +16,11 @@ module Tarpaulin
16
16
  @@link
17
17
  end
18
18
 
19
+ # check for Context, only show a.inspect in dev mode
19
20
  def r403(f=nil, &block)
20
21
  #$stderr.puts "in 403"
21
22
  h = {'Content-Type' => 'text/html; charset=utf-8'}
22
- a = eval("determine_context{}", block)
23
+ a = eval("Context::determine{}", block)
23
24
  if f.nil?
24
25
  f = block.call
25
26
  end
@@ -32,7 +33,7 @@ module Tarpaulin
32
33
  def r404(f=nil, &block) # compat with Camping
33
34
  #$stderr.puts "in 404"
34
35
  h = {'Content-Type' => 'text/html; charset=utf-8'}
35
- a = eval("determine_context{}", block)
36
+ a = eval("Context::determine{}", block)
36
37
  if f.nil?
37
38
  f = block.call
38
39
  end
@@ -76,8 +77,31 @@ module Tarpaulin
76
77
  end
77
78
 
78
79
  def stylesheet_link_tag(stylish)
79
- type = "text/css"
80
- href = stylish.start_with?("http") ? "#{stylish}" : R(Tarpaulin.link_controller, @root, Tarpaulin::Helpers::CSS, "#{stylish}.css")
80
+
81
+ href = if stylish.start_with?("http")
82
+ "#{stylish}"
83
+ else
84
+ type = "text/css"
85
+ # $stderr.puts @root.inspect
86
+ if @root.length > 0 and @root[0] == '/'
87
+ root = @root.reverse.chop!.reverse
88
+ else
89
+ root = @root
90
+ end
91
+ # $stderr.puts root
92
+ if root and root.length > 0
93
+ r = R(Tarpaulin.link_controller, root, Tarpaulin::Helpers::CSS, "#{stylish}.css")
94
+ r2 = R(Tarpaulin.link_controller, Tarpaulin::Helpers::CSS, "#{stylish}.css")
95
+ else
96
+ r = R(Tarpaulin.link_controller, Tarpaulin::Helpers::CSS, "#{stylish}.css")
97
+ r2 = nil
98
+ end
99
+ # $stderr.puts r.inspect
100
+ # $stderr.puts r2.inspect
101
+ r
102
+ end
103
+ # $stderr.puts href
104
+
81
105
  Markaby::Builder.new.capture {
82
106
  link :rel => "stylesheet",
83
107
  :type => type,
@@ -87,8 +111,31 @@ module Tarpaulin
87
111
  end
88
112
 
89
113
  def javascript_link_tag(scriptish)
90
- type = "text/javascript"
91
- src = scriptish.start_with?("http") ? "#{scriptish}" : R(Tarpaulin.link_controller, @root, Tarpaulin::Helpers::JS, "#{scriptish}.js")
114
+
115
+ src = if scriptish.start_with?("http")
116
+ "#{scriptish}"
117
+ else
118
+ type = "text/javascript"
119
+ # $stderr.puts @root.inspect
120
+ if @root.length > 0 and @root[0] == '/'
121
+ root = @root.reverse.chop!.reverse
122
+ else
123
+ root = @root
124
+ end
125
+ # $stderr.puts root
126
+ if root and root.length > 0
127
+ r = R(Tarpaulin.link_controller, root, Tarpaulin::Helpers::JS, "#{scriptish}.js")
128
+ r2 = R(Tarpaulin.link_controller, Tarpaulin::Helpers::JS, "#{scriptish}.js")
129
+ else
130
+ r = R(Tarpaulin.link_controller, Tarpaulin::Helpers::JS, "#{scriptish}.js")
131
+ r2 = nil
132
+ end
133
+ # $stderr.puts r.inspect
134
+ # $stderr.puts r2.inspect
135
+ r
136
+ end
137
+ # $stderr.puts src
138
+
92
139
  Markaby::Builder.new.capture {
93
140
  script(:type => type, :src => src) {}
94
141
  }
@@ -0,0 +1,49 @@
1
+ #
2
+ # include the CampingFilters module in TheApp
3
+ #
4
+ module CampingFilters
5
+ module ClassMethods
6
+ def filters
7
+ @filters ||= {:before => [], :after => []}
8
+ end
9
+
10
+ def before(actions, &blk)
11
+ actions = [actions] unless actions.is_a?(Array)
12
+ actions.each do |action|
13
+ filters[:before] << [action, blk]
14
+ end
15
+ end
16
+
17
+ def after(actions, &blk)
18
+ actions = [actions] unless actions.is_a?(Array)
19
+ actions.each do |action|
20
+ filters[:after] << [action, blk]
21
+ end
22
+ end
23
+ end # ClassMethods
24
+
25
+ def self.included(mod)
26
+ mod.extend(ClassMethods)
27
+ end
28
+
29
+ def run_filters(type)
30
+ o = self.class.to_s.split("::")
31
+ filters = Object.const_get(o.first).filters
32
+ filters[type].each do |filter|
33
+ if (filter[0].is_a?(Symbol) && (filter[0] == o.last.to_sym || filter[0] == :all)) ||
34
+ (filter[0].is_a?(String) && /^#{filter[0]}\/?$/ =~ @env.REQUEST_URI)
35
+ self.instance_eval(&filter[1])
36
+ end
37
+ end
38
+ end
39
+
40
+ def service(*a) # params to controllers, ids n stuff
41
+ override_self = catch(:halt) do
42
+ run_filters(:before)
43
+ override_self = super(*a)
44
+ run_filters(:after)
45
+ override_self
46
+ end
47
+ override_self
48
+ end
49
+ end
@@ -0,0 +1,54 @@
1
+ #
2
+ # monkey patch Camping to work with rack-flash
3
+ #
4
+ # include the CampingFlash module in TheApp
5
+ #
6
+ # => Use ClassName.instance_eval to define class methods.
7
+ # => Use ClassName.class_eval to define instance methods.
8
+ #
9
+ module CampingFlash
10
+
11
+ def self.included(base)
12
+ Camping::H.class_eval do
13
+ def diff(other)
14
+ self.keys.inject({}) do |memo, key|
15
+ unless self[key] == other[key]
16
+ memo[key] = [self[key], other[key]]
17
+ end
18
+ memo
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ def to_a #:nodoc:
25
+ if @state.respond_to? :diff
26
+ diff = @_state.diff(@state)
27
+ diff.each {|k,v| @env['rack.session'].delete(k) }
28
+ end
29
+ super
30
+ end
31
+
32
+ def to_a #:nodoc:
33
+ # overwrite the session with how @state is now
34
+ # depeding on whether diff is defined for H or not
35
+ if @state.respond_to? :diff
36
+ @env['rack.session'].merge! Hash[@state]
37
+ else
38
+ @env['rack.session'] = Hash[@state]
39
+ end
40
+ r = Rack::Response.new(@body, @status, @headers)
41
+ @cookies._n.each do |k, v|
42
+ r.set_cookie(k, v)
43
+ end
44
+ r.to_a
45
+ end
46
+
47
+ def initialize(env, m) #:nodoc:
48
+ super(env,m)
49
+ @_state = @state.clone
50
+ end
51
+
52
+ end
53
+
54
+ #Camping::Cookies[r.cookies], SimpleDelegator.new(Camping::H)[r.session.to_hash],
@@ -1,10 +1,15 @@
1
1
  require 'logger'
2
+ require 'singleton'
2
3
 
3
- class Logger
4
+ require 'pry'
5
+
6
+ class ContextLogger < Logger
7
+
8
+ include Singleton
4
9
 
5
10
  def self.format_block # implicit
6
11
  the_proc = Proc.new # capture it
7
- context = eval("determine_context{}", the_proc) # eval can take a Proc obj or a Binding
12
+ context = eval("Context::determine{}", the_proc) # eval can take a Proc obj or a Binding
8
13
  result = the_proc.call # invoke it
9
14
  klass = 'nil' # can it be??
10
15
  # puts context[:self].inspect
@@ -30,20 +35,27 @@ class Logger
30
35
  end
31
36
 
32
37
  %w(debug info warn error fatal).each do |sev|
33
- orig_method = ('orig_'+sev).to_sym
34
38
  method = sev.to_sym
35
- alias_method( orig_method, method)
36
- class_eval <<-"END"
37
- def #{method}
38
- output = Logger.format_block(&Proc.new)
39
- #{orig_method}(output)
39
+ class_eval <<-EOT, __FILE__, __LINE__
40
+ def #{method}(msg=nil, &block)
41
+ if block
42
+ output = ContextLogger.format_block(&block)
43
+ super(@progname){output}
44
+ else
45
+ super(msg)
46
+ end
47
+ rescue
48
+ $stderr.puts "Oh deary me. Error in ContextLogger: "+$!.inspect
40
49
  end
41
- END
50
+ EOT
51
+ end
52
+
53
+ def initialize(stream=STDOUT)
54
+ # DEBUG < INFO < WARN < ERROR < FATAL < UNKNOWN
55
+ level=Logger::DEBUG
56
+ super(stream)
42
57
  end
43
58
 
44
59
  end
45
60
 
46
- $logger = Logger.new(STDOUT)
47
- $logger.level = Logger::DEBUG
48
- # DEBUG < INFO < WARN < ERROR < FATAL < UNKNOWN
49
-
61
+ $L = ContextLogger.instance
@@ -8,6 +8,7 @@ require 'tilt/template'
8
8
  # Tilt.register :rhtml, Tilt[:erubis]
9
9
 
10
10
  require 'neo'
11
+ require 'pry'
11
12
 
12
13
  module Tilt
13
14
  # ClearSilver implementation. See:
@@ -15,7 +16,8 @@ module Tilt
15
16
  class ClearSilverTemplate < Tilt::Template
16
17
 
17
18
  def self.engine_initialized?
18
- defined? ::ClearSilver
19
+ # defined? ::ClearSilver
20
+ defined? ::Neo::Cs
19
21
  end
20
22
 
21
23
  def initialize_engine
@@ -34,8 +36,8 @@ module Tilt
34
36
  def additive_parsing? ; additive_parsing end
35
37
 
36
38
  def debug # implicit
37
- if $logger
38
- #$logger.debug(&Proc.new) # pass it along
39
+ if $L
40
+ #$L.debug(&Proc.new) # pass it along
39
41
  end
40
42
  end
41
43
 
@@ -51,7 +53,7 @@ module Tilt
51
53
  @additive_parsing = false
52
54
  end
53
55
  end
54
-
56
+
55
57
  def evaluate(scope, locals, &block)
56
58
 
57
59
  debug { scope }
@@ -59,8 +61,20 @@ module Tilt
59
61
  debug { block }
60
62
  if block
61
63
  hd = block.call
64
+ #obj = scope
65
+ #method = :fooish
66
+ debug { scope.methods.sort }
67
+ e = scope.instance_variable_get(:@env)
68
+ debug {e}
69
+ m = scope.instance_variable_get(:@method)
70
+ debug {m}
71
+ pack = [e, m]
72
+ obj = scope.class.parent
73
+ debug {obj}
74
+ method = :dispatch
62
75
  else
63
76
  hd = scope
77
+ obj = nil
64
78
  end
65
79
  if ClearSilverTemplate.old_api
66
80
  debug { "#2" }
@@ -76,7 +90,12 @@ module Tilt
76
90
  debug { "#3" }
77
91
  @engine = Neo::Cs.new # CS Ruby API, revamped
78
92
  @engine.use hd # CS Ruby/C API
93
+ if obj
94
+ @engine.register_fileload(obj, method, pack)
95
+ # @engine.register_fileload(obj, method, locals) # call before parse_x, should use splat
96
+ end
79
97
  @engine.parse_string @data # CS C API
98
+ #binding.pry
80
99
  end
81
100
  @output = @engine.render # it's actually called render in CS C API
82
101
  end
data/tarpaulin.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "tarpaulin"
8
- s.version = "0.2.3"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Anthony Durity"]
12
- s.date = "2011-10-13"
12
+ s.date = "2011-10-29"
13
13
  s.description = "So I don't have to copy and paste a million times."
14
14
  s.email = "github@jollyrotten.org"
15
15
  s.extra_rdoc_files = [
@@ -25,12 +25,14 @@ Gem::Specification.new do |s|
25
25
  "VERSION",
26
26
  "lib/tarpaulin.rb",
27
27
  "lib/tarpaulin/camping.rb",
28
+ "lib/tarpaulin/camping/filter.rb",
29
+ "lib/tarpaulin/camping/flash.rb",
28
30
  "lib/tarpaulin/endless.rb",
29
31
  "lib/tarpaulin/logger.rb",
30
32
  "lib/tarpaulin/tilt/clearsilver_template.rb",
31
33
  "tarpaulin.gemspec",
32
34
  "test/helper.rb",
33
- "test/test_kommons.rb"
35
+ "test/test_tarpaulin.rb"
34
36
  ]
35
37
  s.homepage = "http://github.com/igravious/tarpaulin"
36
38
  s.licenses = ["GPLv3"]
@@ -44,6 +46,7 @@ Gem::Specification.new do |s|
44
46
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
45
47
  s.add_runtime_dependency(%q<tilt>, ["~> 1.3.1"])
46
48
  s.add_runtime_dependency(%q<lazy>, ["~> 0.9.6"])
49
+ s.add_runtime_dependency(%q<rack-flash>, [">= 0"])
47
50
  s.add_development_dependency(%q<shoulda>, ["~> 2.11.1"])
48
51
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
49
52
  s.add_development_dependency(%q<jeweler>, ["~> 1.6.1"])
@@ -52,6 +55,7 @@ Gem::Specification.new do |s|
52
55
  else
53
56
  s.add_dependency(%q<tilt>, ["~> 1.3.1"])
54
57
  s.add_dependency(%q<lazy>, ["~> 0.9.6"])
58
+ s.add_dependency(%q<rack-flash>, [">= 0"])
55
59
  s.add_dependency(%q<shoulda>, ["~> 2.11.1"])
56
60
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
57
61
  s.add_dependency(%q<jeweler>, ["~> 1.6.1"])
@@ -61,6 +65,7 @@ Gem::Specification.new do |s|
61
65
  else
62
66
  s.add_dependency(%q<tilt>, ["~> 1.3.1"])
63
67
  s.add_dependency(%q<lazy>, ["~> 0.9.6"])
68
+ s.add_dependency(%q<rack-flash>, [">= 0"])
64
69
  s.add_dependency(%q<shoulda>, ["~> 2.11.1"])
65
70
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
66
71
  s.add_dependency(%q<jeweler>, ["~> 1.6.1"])
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- class TestKommons < Test::Unit::TestCase
3
+ class TestTarpaulin < Test::Unit::TestCase
4
4
  should "probably rename this file and start testing for real" do
5
5
  flunk "hey buddy, you should probably rename this file and start testing for real"
6
6
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tarpaulin
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
9
8
  - 3
10
- version: 0.2.3
9
+ - 0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Anthony Durity
@@ -15,12 +15,9 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-10-13 00:00:00 Z
18
+ date: 2011-10-29 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- prerelease: false
22
- name: tilt
23
- type: :runtime
24
21
  version_requirements: &id001 !ruby/object:Gem::Requirement
25
22
  none: false
26
23
  requirements:
@@ -32,11 +29,11 @@ dependencies:
32
29
  - 3
33
30
  - 1
34
31
  version: 1.3.1
35
- requirement: *id001
36
- - !ruby/object:Gem::Dependency
32
+ name: tilt
37
33
  prerelease: false
38
- name: lazy
39
34
  type: :runtime
35
+ requirement: *id001
36
+ - !ruby/object:Gem::Dependency
40
37
  version_requirements: &id002 !ruby/object:Gem::Requirement
41
38
  none: false
42
39
  requirements:
@@ -48,12 +45,26 @@ dependencies:
48
45
  - 9
49
46
  - 6
50
47
  version: 0.9.6
48
+ name: lazy
49
+ prerelease: false
50
+ type: :runtime
51
51
  requirement: *id002
52
52
  - !ruby/object:Gem::Dependency
53
- prerelease: false
54
- name: shoulda
55
- type: :development
56
53
  version_requirements: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ name: rack-flash
63
+ prerelease: false
64
+ type: :runtime
65
+ requirement: *id003
66
+ - !ruby/object:Gem::Dependency
67
+ version_requirements: &id004 !ruby/object:Gem::Requirement
57
68
  none: false
58
69
  requirements:
59
70
  - - ~>
@@ -64,12 +75,12 @@ dependencies:
64
75
  - 11
65
76
  - 1
66
77
  version: 2.11.1
67
- requirement: *id003
68
- - !ruby/object:Gem::Dependency
78
+ name: shoulda
69
79
  prerelease: false
70
- name: bundler
71
80
  type: :development
72
- version_requirements: &id004 !ruby/object:Gem::Requirement
81
+ requirement: *id004
82
+ - !ruby/object:Gem::Dependency
83
+ version_requirements: &id005 !ruby/object:Gem::Requirement
73
84
  none: false
74
85
  requirements:
75
86
  - - ~>
@@ -80,12 +91,12 @@ dependencies:
80
91
  - 0
81
92
  - 0
82
93
  version: 1.0.0
83
- requirement: *id004
84
- - !ruby/object:Gem::Dependency
94
+ name: bundler
85
95
  prerelease: false
86
- name: jeweler
87
96
  type: :development
88
- version_requirements: &id005 !ruby/object:Gem::Requirement
97
+ requirement: *id005
98
+ - !ruby/object:Gem::Dependency
99
+ version_requirements: &id006 !ruby/object:Gem::Requirement
89
100
  none: false
90
101
  requirements:
91
102
  - - ~>
@@ -96,12 +107,12 @@ dependencies:
96
107
  - 6
97
108
  - 1
98
109
  version: 1.6.1
99
- requirement: *id005
100
- - !ruby/object:Gem::Dependency
110
+ name: jeweler
101
111
  prerelease: false
102
- name: rcov
103
112
  type: :development
104
- version_requirements: &id006 !ruby/object:Gem::Requirement
113
+ requirement: *id006
114
+ - !ruby/object:Gem::Dependency
115
+ version_requirements: &id007 !ruby/object:Gem::Requirement
105
116
  none: false
106
117
  requirements:
107
118
  - - ~>
@@ -112,12 +123,12 @@ dependencies:
112
123
  - 9
113
124
  - 7
114
125
  version: 0.9.7
115
- requirement: *id006
116
- - !ruby/object:Gem::Dependency
126
+ name: rcov
117
127
  prerelease: false
118
- name: rdoc
119
128
  type: :development
120
- version_requirements: &id007 !ruby/object:Gem::Requirement
129
+ requirement: *id007
130
+ - !ruby/object:Gem::Dependency
131
+ version_requirements: &id008 !ruby/object:Gem::Requirement
121
132
  none: false
122
133
  requirements:
123
134
  - - ~>
@@ -128,7 +139,10 @@ dependencies:
128
139
  - 9
129
140
  - 1
130
141
  version: 3.9.1
131
- requirement: *id007
142
+ name: rdoc
143
+ prerelease: false
144
+ type: :development
145
+ requirement: *id008
132
146
  description: So I don't have to copy and paste a million times.
133
147
  email: github@jollyrotten.org
134
148
  executables: []
@@ -147,12 +161,14 @@ files:
147
161
  - VERSION
148
162
  - lib/tarpaulin.rb
149
163
  - lib/tarpaulin/camping.rb
164
+ - lib/tarpaulin/camping/filter.rb
165
+ - lib/tarpaulin/camping/flash.rb
150
166
  - lib/tarpaulin/endless.rb
151
167
  - lib/tarpaulin/logger.rb
152
168
  - lib/tarpaulin/tilt/clearsilver_template.rb
153
169
  - tarpaulin.gemspec
154
170
  - test/helper.rb
155
- - test/test_kommons.rb
171
+ - test/test_tarpaulin.rb
156
172
  homepage: http://github.com/igravious/tarpaulin
157
173
  licenses:
158
174
  - GPLv3