texttube 6.1.0 → 7.0.1
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +12 -1
- data/CHANGES.md +16 -0
- data/Gemfile +5 -7
- data/README.md +109 -0
- data/Rakefile +2 -2
- data/lib/texttube.rb +2 -0
- data/lib/texttube/base.rb +10 -7
- data/lib/texttube/filterable.rb +1 -5
- data/lib/texttube/version.rb +1 -1
- data/spec/base_spec.rb +20 -9
- data/spec/examples_spec.rb +205 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b2a5ba68a11010904a881a8aa8d05f96cbd4cb4
|
4
|
+
data.tar.gz: bb6e54ec1473035c6b0324ad51dc885edc04bea7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e4018b23e62df19927781d886e74b6666f5fd2756b05a9f69532fe2be9874f5beef2ca6b2c0760879f682a2731cfcc8a6b5a7eb20b365155330da3d4af528bb
|
7
|
+
data.tar.gz: 423f6494980562823c69298a183a1a30c583d41387935bc758cde142c493f6427aa2ca2be142bd1940160506771382bbebc9057f9169f2b51de9800d3b58f1d2
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,10 +1,21 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 1.9.3
|
4
3
|
- 2.0.0
|
4
|
+
- 2.1.0
|
5
|
+
- 2.2.2
|
6
|
+
- jruby-19mode # JRuby in 1.9 mode
|
7
|
+
- rbx
|
8
|
+
- ruby-head
|
9
|
+
- jruby-head
|
5
10
|
|
6
11
|
# whitelist
|
7
12
|
branches:
|
8
13
|
only:
|
9
14
|
- master
|
10
15
|
- develop
|
16
|
+
|
17
|
+
matrix:
|
18
|
+
allow_failures:
|
19
|
+
- rvm: jruby-head
|
20
|
+
- rvm: ruby-head
|
21
|
+
- rvm: rbx
|
data/CHANGES.md
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
# CH CH CH CHANGES! #
|
2
2
|
|
3
|
+
## Sunday the 14th of June 2015#
|
4
|
+
|
5
|
+
# v7.0.1 ##
|
6
|
+
|
7
|
+
* Added fences to code block in example.
|
8
|
+
|
9
|
+
----
|
10
|
+
|
11
|
+
# v7.0.0 #
|
12
|
+
|
13
|
+
* Added more examples of how to use options.
|
14
|
+
* Cleaned up the options a lot, clarified and better tested.
|
15
|
+
* Fixed the ever moving target of the Travis-CI settings.
|
16
|
+
|
17
|
+
----
|
18
|
+
|
3
19
|
|
4
20
|
## Friday the 12th of June 2015, v6.1.0 ##
|
5
21
|
|
data/Gemfile
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
RUBY_ENGINE = 'ruby' unless defined? RUBY_ENGINE
|
2
2
|
source "https://rubygems.org"
|
3
3
|
|
4
4
|
gemspec
|
@@ -7,19 +7,17 @@ gem "rake"
|
|
7
7
|
|
8
8
|
group :documentation do
|
9
9
|
gem "yard"
|
10
|
-
gem "
|
10
|
+
gem "kramdown"
|
11
11
|
end
|
12
12
|
|
13
13
|
group :development do
|
14
|
-
|
15
|
-
|
14
|
+
unless RUBY_ENGINE == 'jruby' || RUBY_ENGINE == "rbx"
|
15
|
+
gem "pry-byebug"
|
16
|
+
end
|
16
17
|
end
|
17
18
|
|
18
19
|
group :test do
|
19
20
|
gem "rspec"
|
20
21
|
gem "simplecov", :require => false
|
21
|
-
gem "maruku"
|
22
|
-
gem "rdiscount"
|
23
|
-
gem "kramdown"
|
24
22
|
gem "rspec-its"
|
25
23
|
end
|
data/README.md
CHANGED
@@ -139,6 +139,115 @@ s.filter
|
|
139
139
|
# => "Let me introduce <a href="iainbarnett.me.uk" title="My blog">Iain Barnett</a>. He writes Ruby code. ©2013. Let me introduce <a href="iainbarnett.me.uk" title="My blog">Iain Barnett</a>. He writes Ruby code. ©2013. "
|
140
140
|
```
|
141
141
|
|
142
|
+
### Options ###
|
143
|
+
|
144
|
+
There are 3 types of options available:
|
145
|
+
|
146
|
+
#### Class options ####
|
147
|
+
|
148
|
+
These options are available for all instances of that class. One was used in the previous example:
|
149
|
+
|
150
|
+
```ruby
|
151
|
+
MyString.options.merge! :number => {times: 2}
|
152
|
+
```
|
153
|
+
|
154
|
+
#### Instance options ####
|
155
|
+
|
156
|
+
Using this type of option will mean that option is used with this instance and no other. It will override class options:
|
157
|
+
|
158
|
+
```ruby
|
159
|
+
m = NeuS.new "abc", :order=>[:dashes, :double, :spacial]
|
160
|
+
m.filter # will use :dashes, :double, :spacial
|
161
|
+
```
|
162
|
+
|
163
|
+
#### Method options ####
|
164
|
+
|
165
|
+
These will affect only this call of the `filter` method:
|
166
|
+
|
167
|
+
```ruby
|
168
|
+
# this does :triple, :dashes, :spacial
|
169
|
+
m.filter :order=>[:triple, :dashes, :spacial]
|
170
|
+
# this does :dashes, :double, :spacial
|
171
|
+
m.filter
|
172
|
+
```
|
173
|
+
|
174
|
+
Of course, if you just want to effect the order in a one off call then `m.filter :triple, :dashes, :spacial` would work just as well.
|
175
|
+
|
176
|
+
If you have several filters and you want to pass some options then you need give the name of the filter along with the options. Here's an example:
|
177
|
+
|
178
|
+
```ruby
|
179
|
+
class FutureString < TextTube::Base
|
180
|
+
register do
|
181
|
+
filter_with :read_more do |text,options|
|
182
|
+
text + " " + options.fetch(:teaser, "READ MORE")
|
183
|
+
end
|
184
|
+
filter_with :add_title do |text,options|
|
185
|
+
title = "#{options.fetch(:title, 'My article')}\n\n"
|
186
|
+
title + text
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
future = FutureString.new "It's looking bright!"
|
192
|
+
future.filter :read_more =>{teaser: "carry on reading…"}, :add_title =>{title: "Feeling optimistic"}
|
193
|
+
```
|
194
|
+
|
195
|
+
Which would output:
|
196
|
+
|
197
|
+
> Feeling optimistic
|
198
|
+
>
|
199
|
+
> It's looking bright! carry on reading…
|
200
|
+
|
201
|
+
You can see from this example that you can register more than one filter on the fly within a register block.
|
202
|
+
|
203
|
+
|
204
|
+
#### Overrides ####
|
205
|
+
|
206
|
+
Keep in mind that class options are overriden by instance options, and instance options (and class options) are overriden by method options.
|
207
|
+
|
208
|
+
#### Note! ####
|
209
|
+
|
210
|
+
Options are only applied if you pass a block with the 2nd options argument available. For example, this will apply options:
|
211
|
+
|
212
|
+
```ruby
|
213
|
+
class Optional < TextTube::Base
|
214
|
+
register do
|
215
|
+
filter_with :something_with_options do |text,options|
|
216
|
+
extras = options.fetch :extra, " "
|
217
|
+
text + extras + "This should be ok."
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
This will not:
|
223
|
+
|
224
|
+
class Optional < TextTube::Base
|
225
|
+
register do
|
226
|
+
filter_with :something_without_options do |text|
|
227
|
+
text + options + "This will throw an error."
|
228
|
+
end
|
229
|
+
end
|
230
|
+
end
|
231
|
+
```
|
232
|
+
|
233
|
+
If you don't plan to use the options then don't provide them as an argument, but don't refer to them in the block, e.g.
|
234
|
+
|
235
|
+
```ruby
|
236
|
+
class NotBothered < TextTube::Base
|
237
|
+
register do
|
238
|
+
filter_with :something_without_options do |text|
|
239
|
+
text + "We're just not giving you the option."
|
240
|
+
end
|
241
|
+
end
|
242
|
+
end
|
243
|
+
```
|
244
|
+
|
245
|
+
|
246
|
+
### All of these examples have been used as specs ###
|
247
|
+
|
248
|
+
Take a look and run them.
|
249
|
+
|
250
|
+
|
142
251
|
### Ready made filters ###
|
143
252
|
|
144
253
|
They used to come with this library, but sometimes they caused problems with installation (things like Nokogiri can be painful to install at times) so I spun them off into their own library - [TextTubeBaby](https://github.com/yb66/TextTubeBaby)!
|
data/Rakefile
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
desc "(Re-) generate documentation and place it in the docs/ dir."
|
4
4
|
task :docs => :"docs:yard"
|
5
|
-
namespace :
|
5
|
+
namespace :doc do
|
6
6
|
require 'yard'
|
7
7
|
YARD::Rake::YardocTask.new do |t|
|
8
8
|
t.files = ['lib/**/*.rb']
|
9
|
-
t.options = ['-
|
9
|
+
t.options = ['-odoc/', '--no-private']
|
10
10
|
end
|
11
11
|
|
12
12
|
desc "Docs including private methods."
|
data/lib/texttube.rb
ADDED
data/lib/texttube/base.rb
CHANGED
@@ -58,11 +58,6 @@ module TextTube
|
|
58
58
|
|
59
59
|
class << self
|
60
60
|
|
61
|
-
# Global options. Every descendant will get these.
|
62
|
-
def options
|
63
|
-
@options ||= {}
|
64
|
-
end
|
65
|
-
|
66
61
|
# remove all filters
|
67
62
|
# @todo remove methods too.
|
68
63
|
def reset!
|
@@ -112,6 +107,13 @@ module TextTube
|
|
112
107
|
# @private
|
113
108
|
def inherited(subclass)
|
114
109
|
subclass.reset!
|
110
|
+
|
111
|
+
# Per class options
|
112
|
+
subclass.instance_eval do
|
113
|
+
def options
|
114
|
+
@options ||= {}
|
115
|
+
end
|
116
|
+
end
|
115
117
|
end
|
116
118
|
end
|
117
119
|
|
@@ -142,8 +144,9 @@ module TextTube
|
|
142
144
|
else
|
143
145
|
order,options = order_and_options, {}
|
144
146
|
end
|
145
|
-
|
146
|
-
order
|
147
|
+
options = self.class.options.merge(@options.merge(options))
|
148
|
+
order.flatten!
|
149
|
+
order = options.fetch :order, self.class.filters if order.empty?
|
147
150
|
order.inject(self){|current,filter|
|
148
151
|
send filter, current, options
|
149
152
|
}
|
data/lib/texttube/filterable.rb
CHANGED
@@ -35,17 +35,13 @@ module TextTube
|
|
35
35
|
name = name.to_sym
|
36
36
|
filters << name unless filters.include? name
|
37
37
|
define_method name do |current=self, options=nil|
|
38
|
-
if current.respond_to? :keys
|
39
|
-
options=current
|
40
|
-
current=self
|
41
|
-
end
|
42
38
|
options = [options, @options, self.class.options].find{|opts|
|
43
39
|
!opts.nil? &&
|
44
40
|
opts.respond_to?(:keys) &&
|
45
41
|
!opts.empty?
|
46
42
|
} || {}
|
47
43
|
|
48
|
-
block.call current, options[name]
|
44
|
+
block.call current, (options[name] || {})
|
49
45
|
end
|
50
46
|
end
|
51
47
|
|
data/lib/texttube/version.rb
CHANGED
data/spec/base_spec.rb
CHANGED
@@ -15,16 +15,27 @@ describe Base do
|
|
15
15
|
its(:options) { should be_empty }
|
16
16
|
end
|
17
17
|
context "Class methods and their defaults" do
|
18
|
+
shared_examples "any instance from a kind of Base" do
|
19
|
+
it { should respond_to :reset! }
|
20
|
+
it { should respond_to :filters }
|
21
|
+
its(:filters) { should respond_to :empty? }
|
22
|
+
its(:filters) { should be_empty }
|
23
|
+
it { should respond_to :register }
|
24
|
+
it { should respond_to :inherited }
|
25
|
+
end
|
18
26
|
subject { Base }
|
19
|
-
it {
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
27
|
+
it { should_not respond_to :options }
|
28
|
+
it_should_behave_like "any instance from a kind of Base"
|
29
|
+
context "when subclassed" do
|
30
|
+
before :all do
|
31
|
+
SubClassed = Class.new TextTube::Base
|
32
|
+
end
|
33
|
+
subject { SubClassed }
|
34
|
+
it { should respond_to :options }
|
35
|
+
its(:options) { should respond_to :empty? }
|
36
|
+
its(:options) { should be_empty }
|
37
|
+
it_should_behave_like "any instance from a kind of Base"
|
38
|
+
end
|
28
39
|
end
|
29
40
|
end
|
30
41
|
end
|
data/spec/examples_spec.rb
CHANGED
@@ -5,6 +5,8 @@ require_relative "../lib/texttube/filterable.rb"
|
|
5
5
|
|
6
6
|
module TextTube # for convenience
|
7
7
|
|
8
|
+
TimeNow = "2060" # According to Sir Isaac Newton's research of the Bible, the world will end in this year!
|
9
|
+
|
8
10
|
describe "Example usage" do
|
9
11
|
before :all do
|
10
12
|
module AFilter
|
@@ -27,6 +29,18 @@ describe "Example usage" do
|
|
27
29
|
end
|
28
30
|
end
|
29
31
|
|
32
|
+
module AnotherFilter
|
33
|
+
extend TextTube::Filterable
|
34
|
+
|
35
|
+
filter_with :copyright do |text|
|
36
|
+
text << " ©#{TimeNow}. "
|
37
|
+
end
|
38
|
+
|
39
|
+
filter_with :number do |text,options|
|
40
|
+
text * options[:times].to_i
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
30
44
|
class NeuS < TextTube::Base
|
31
45
|
register BFil
|
32
46
|
register AFilter
|
@@ -36,28 +50,217 @@ describe "Example usage" do
|
|
36
50
|
end
|
37
51
|
end
|
38
52
|
end
|
53
|
+
|
54
|
+
class NewerS < TextTube::Base
|
55
|
+
register BFil
|
56
|
+
register AFilter
|
57
|
+
register do
|
58
|
+
filter_with :dashes do |text|
|
59
|
+
"---#{text}---"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
class Optional < TextTube::Base
|
65
|
+
register do
|
66
|
+
filter_with :something_with_options do |text,options|
|
67
|
+
extras = options.fetch :extra, " "
|
68
|
+
text + extras + "This should be ok."
|
69
|
+
end
|
70
|
+
end
|
71
|
+
register do
|
72
|
+
filter_with :something_without_options do |text|
|
73
|
+
text + options + "This will throw an error."
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
class FutureString < TextTube::Base
|
79
|
+
register do
|
80
|
+
filter_with :read_more do |text,options|
|
81
|
+
text + " " + options.fetch(:teaser, "READ MORE")
|
82
|
+
end
|
83
|
+
filter_with :add_title do |text,options|
|
84
|
+
title = "#{options.fetch(:title, 'My article')}\n\n"
|
85
|
+
title + text
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
39
90
|
end # before
|
40
91
|
|
41
|
-
context "
|
92
|
+
context "Simple" do
|
42
93
|
let(:n) { NeuS.new "abc" }
|
94
|
+
let(:the_no_options_filtered_result){ "---a b ca b ca b ca b ca b ca b c---" }
|
43
95
|
subject { n }
|
44
96
|
it { should == "abc" }
|
45
97
|
|
46
98
|
context "filtering" do
|
47
99
|
context "With no arguments" do
|
48
100
|
subject { n.filter }
|
49
|
-
it { should ==
|
101
|
+
it { should == the_no_options_filtered_result }
|
50
102
|
end
|
51
103
|
context "Given a specific filter" do
|
52
104
|
subject { n.filter :spacial }
|
53
105
|
it { should == "a b c" }
|
106
|
+
it { should_not == the_no_options_filtered_result }
|
54
107
|
end
|
55
108
|
context "Given several specific filters" do
|
56
109
|
subject { n.filter :spacial, :dashes, :spacial }
|
57
110
|
it { should == "- - - a b c - - -" }
|
111
|
+
it { should_not == the_no_options_filtered_result }
|
58
112
|
end
|
59
113
|
end
|
60
114
|
end
|
115
|
+
context "with options passed to the instance" do
|
116
|
+
context "To set the order" do
|
117
|
+
let(:n) { NeuS.new "abc", :order=>[:spacial, :dashes, :spacial] }
|
118
|
+
let(:the_no_options_filtered_result){ "- - - a b c - - -" }
|
119
|
+
subject { n }
|
120
|
+
it { should == "abc" }
|
121
|
+
context "filtered" do
|
122
|
+
subject { n.filter }
|
123
|
+
it { should == the_no_options_filtered_result }
|
124
|
+
context "and then given method options" do
|
125
|
+
subject { n.filter :order=>[:triple, :dashes, :spacial] }
|
126
|
+
it { should == "- - - a b c a b c a b c - - -" }
|
127
|
+
it { should_not == the_no_options_filtered_result }
|
128
|
+
end
|
129
|
+
end
|
130
|
+
context "with a different instance" do
|
131
|
+
let(:m) { NeuS.new "def" }
|
132
|
+
subject { m }
|
133
|
+
it { should == "def" }
|
134
|
+
context "filtered" do
|
135
|
+
subject { m.filter }
|
136
|
+
it { should_not == "- - - d e f - - -" }
|
137
|
+
it { should_not == the_no_options_filtered_result }
|
138
|
+
end
|
139
|
+
context "and given instance options" do
|
140
|
+
let(:k) { NeuS.new "abc", :order=>[:dashes, :double, :spacial] }
|
141
|
+
subject { k }
|
142
|
+
it { should == "abc" }
|
143
|
+
context "filtered" do
|
144
|
+
subject { k.filter }
|
145
|
+
it { should == "- - - a b c - - - - - - a b c - - -" }
|
146
|
+
it { should_not == the_no_options_filtered_result }
|
147
|
+
|
148
|
+
context "and then given method options" do
|
149
|
+
subject { k.filter :order=>[:triple, :dashes, :spacial] }
|
150
|
+
it { should == "- - - a b c a b c a b c - - -" }
|
151
|
+
it { should_not == the_no_options_filtered_result }
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
context "with a different class" do
|
157
|
+
let(:n) { NewerS.new "abc" }
|
158
|
+
subject { n }
|
159
|
+
it { should == "abc" }
|
160
|
+
context "filtered" do
|
161
|
+
subject { n.filter }
|
162
|
+
it { should == "---a b ca b ca b ca b ca b ca b c---" }
|
163
|
+
it { should_not == the_no_options_filtered_result }
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
context "with class options" do
|
169
|
+
context "To set the order" do
|
170
|
+
before :all do
|
171
|
+
NeuS.options.merge! :order=>[:spacial, :dashes, :spacial]
|
172
|
+
end
|
173
|
+
let(:n) { NeuS.new "abc" }
|
174
|
+
let(:the_no_options_filtered_result){ "- - - a b c - - -" }
|
175
|
+
subject { n }
|
176
|
+
it { should == "abc" }
|
177
|
+
context "filtered" do
|
178
|
+
subject { n.filter }
|
179
|
+
it { should == the_no_options_filtered_result }
|
180
|
+
end
|
181
|
+
context "and given method options" do
|
182
|
+
subject { n.filter :order=>[:dashes, :double, :spacial] }
|
183
|
+
it { should == "- - - a b c - - - - - - a b c - - -" }
|
184
|
+
it { should_not == the_no_options_filtered_result }
|
185
|
+
end
|
186
|
+
context "with a different instance" do
|
187
|
+
let(:m) { NeuS.new "def" }
|
188
|
+
subject { m }
|
189
|
+
it { should == "def" }
|
190
|
+
context "filtered" do
|
191
|
+
subject { m.filter }
|
192
|
+
it { should == "- - - d e f - - -" }
|
193
|
+
end
|
194
|
+
end
|
195
|
+
context "with a different class" do
|
196
|
+
let(:n) { NewerS.new "abc" }
|
197
|
+
subject { n }
|
198
|
+
it { should == "abc" }
|
199
|
+
context "filtered" do
|
200
|
+
subject { n.filter }
|
201
|
+
it { should == "---a b ca b ca b ca b ca b ca b c---" }
|
202
|
+
it { should_not == the_no_options_filtered_result }
|
203
|
+
end
|
204
|
+
end
|
205
|
+
context "and given instance options" do
|
206
|
+
let(:m) { NeuS.new "abc", :order=>[:dashes, :double, :spacial] }
|
207
|
+
subject { m }
|
208
|
+
it { should == "abc" }
|
209
|
+
context "filtered" do
|
210
|
+
subject { m.filter }
|
211
|
+
it { should == "- - - a b c - - - - - - a b c - - -" }
|
212
|
+
it { should_not == the_no_options_filtered_result }
|
213
|
+
|
214
|
+
context "and then given method options" do
|
215
|
+
subject { m.filter :order=>[:triple, :dashes, :spacial] }
|
216
|
+
it { should == "- - - a b c a b c a b c - - -" }
|
217
|
+
it { should_not == the_no_options_filtered_result }
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
describe "Naming options" do
|
225
|
+
let(:future) { FutureString.new "It's looking bright!" }
|
226
|
+
subject{
|
227
|
+
future.filter :read_more =>{teaser: "carry on reading…"}, :add_title =>{title: "Feeling optimistic"}
|
228
|
+
}
|
229
|
+
it { should == "Feeling optimistic\n\nIt's looking bright! carry on reading…" }
|
230
|
+
end
|
231
|
+
|
232
|
+
describe "Block option arguments" do
|
233
|
+
let(:optional){ Optional.new "Does this block have an options argument?" }
|
234
|
+
context "Given a block" do
|
235
|
+
context "with an options argument *and* that uses the options" do
|
236
|
+
context "with method options" do
|
237
|
+
subject { optional.filter :something_with_options, :something_with_options => {extra: " Yes, I told you so. " } }
|
238
|
+
it { should == "Does this block have an options argument? Yes, I told you so. This should be ok." }
|
239
|
+
end
|
240
|
+
context "without method options" do
|
241
|
+
subject { optional.filter :something_with_options }
|
242
|
+
it { should == "Does this block have an options argument? This should be ok." }
|
243
|
+
end
|
244
|
+
end
|
245
|
+
context "without an options argument *and* a block that uses the options" do
|
246
|
+
context "with method options" do
|
247
|
+
it "should raise an error" do
|
248
|
+
expect{
|
249
|
+
optional.filter :something_without_options, :something_without_options => {extra: " Yes, I told you so. " }
|
250
|
+
}.to raise_error(NameError)
|
251
|
+
end
|
252
|
+
end
|
253
|
+
context "without method options" do
|
254
|
+
it "should raise an error" do
|
255
|
+
expect{
|
256
|
+
optional.filter :something_without_options
|
257
|
+
}.to raise_error(NameError)
|
258
|
+
end
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
end
|
61
264
|
end
|
62
265
|
|
63
266
|
end # inconvenient
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: texttube
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 7.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Iain Barnett
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-14 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Create chainable filters with ease.
|
14
14
|
email: iainspeed @nospam@ gmail.com
|
@@ -22,6 +22,7 @@ files:
|
|
22
22
|
- Gemfile
|
23
23
|
- README.md
|
24
24
|
- Rakefile
|
25
|
+
- lib/texttube.rb
|
25
26
|
- lib/texttube/base.rb
|
26
27
|
- lib/texttube/filterable.rb
|
27
28
|
- lib/texttube/version.rb
|