weskit 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -3
- data/.rspec +1 -0
- data/.travis.yml +4 -0
- data/Gemfile +2 -2
- data/LICENSE +339 -0
- data/README.md +135 -0
- data/Rakefile +4 -0
- data/lib/weskit/mp/adapter.rb +81 -0
- data/lib/weskit/mp/connection.rb +74 -0
- data/lib/weskit/mp/errors/error.rb +3 -0
- data/lib/weskit/mp/errors/response_error.rb +3 -0
- data/lib/weskit/mp/worker.rb +35 -0
- data/lib/weskit/mp.rb +13 -0
- data/lib/weskit/version.rb +1 -1
- data/lib/weskit/wml/attribute.rb +65 -0
- data/lib/weskit/wml/attributes.rb +16 -0
- data/lib/weskit/wml/builder.rb +66 -0
- data/lib/weskit/wml/element.rb +34 -0
- data/lib/weskit/wml/elements.rb +27 -0
- data/lib/weskit/wml/errors/error.rb +3 -0
- data/lib/weskit/wml/errors/invalid_identifier.rb +3 -0
- data/lib/weskit/wml/errors/invalid_item.rb +3 -0
- data/lib/weskit/wml/errors/invalid_option.rb +3 -0
- data/lib/weskit/wml/errors/invalid_parameters.rb +3 -0
- data/lib/weskit/wml/errors/parse_error.rb +3 -0
- data/lib/weskit/wml/errors/read_error.rb +3 -0
- data/lib/weskit/wml/extensions/object.rb +19 -0
- data/lib/weskit/wml/formatter.rb +82 -0
- data/lib/weskit/wml/formatters/ansi_color.rb +49 -0
- data/lib/weskit/wml/formatters/ansi_color_attribute.rb +31 -0
- data/lib/weskit/wml/formatters/ansi_color_element.rb +22 -0
- data/lib/weskit/wml/formatters/attribute.rb +62 -0
- data/lib/weskit/wml/formatters/element.rb +44 -0
- data/lib/weskit/wml/formatters/item_formatter.rb +17 -0
- data/lib/weskit/wml/grammars/wml.treetop +195 -0
- data/lib/weskit/wml/item.rb +89 -0
- data/lib/weskit/wml/items.rb +29 -0
- data/lib/weskit/wml/mixins/container.rb +96 -0
- data/lib/weskit/wml/mixins/grammar.rb +17 -0
- data/lib/weskit/wml/mixins/searchable.rb +43 -0
- data/lib/weskit/wml/mixins/validator.rb +29 -0
- data/lib/weskit/wml/parser.rb +47 -0
- data/lib/weskit/wml/root.rb +17 -0
- data/lib/weskit/wml/wml.rb +1580 -0
- data/lib/weskit/wml.rb +12 -6
- data/lib/weskit.rb +2 -2
- data/spec/spec_helper.rb +1 -0
- data/spec/wml/attribute_spec.rb +51 -0
- data/spec/wml/attributes_spec.rb +19 -0
- data/spec/wml/builder_spec.rb +52 -0
- data/spec/wml/element_spec.rb +20 -0
- data/spec/wml/elements_spec.rb +25 -0
- data/spec/wml/formatter_spec.rb +42 -0
- data/spec/wml/item_spec.rb +25 -0
- data/spec/wml/items_spec.rb +15 -0
- data/spec/wml/parser_spec.rb +60 -0
- data/spec/wml/root_spec.rb +15 -0
- data/spec/wml_helpers.rb +40 -0
- data/spec/wml_matchers.rb +17 -0
- data/spec/wml_shared_examples.rb +68 -0
- data/spec/wml_spec_helper.rb +5 -0
- data/weskit.gemspec +8 -5
- metadata +192 -50
- data/README +0 -2
- data/lib/weskit/lobby/bot.rb +0 -85
- data/lib/weskit/lobby/bot_error.rb +0 -3
- data/lib/weskit/lobby.rb +0 -11
- data/lib/weskit/wml/node.rb +0 -76
- data/lib/weskit/wml/node_array.rb +0 -25
- data/lib/weskit/wml/node_error.rb +0 -3
- data/lib/weskit/wml/reader.rb +0 -67
- data/lib/weskit/wml/reader_error.rb +0 -3
- data/lib/weskit/wml/string_extensions.rb +0 -59
data/lib/weskit/wml.rb
CHANGED
@@ -1,11 +1,17 @@
|
|
1
|
+
require 'weskit/version'
|
2
|
+
|
1
3
|
module Weskit
|
2
4
|
module WML
|
5
|
+
def self.require_all files, folder = nil
|
6
|
+
folder = (folder.to_s || '') + '/'
|
7
|
+
files.collect {|file| require "weskit/wml/#{folder}#{file}"}
|
8
|
+
end
|
3
9
|
end
|
4
10
|
end
|
5
11
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
+
w = Weskit::WML
|
13
|
+
w.require_all %w{validator grammar searchable container}, :mixins
|
14
|
+
w.require_all %w{object}, :extensions
|
15
|
+
w.require_all %w{error invalid_identifier invalid_item invalid_option invalid_parameters parse_error read_error}, :errors
|
16
|
+
w.require_all %w{item_formatter attribute element ansi_color ansi_color_attribute ansi_color_element}, :formatters
|
17
|
+
w.require_all %w{item items attribute attributes builder element elements formatter wml parser root}
|
data/lib/weskit.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
require 'weskit/
|
1
|
+
require 'weskit/mp'
|
2
2
|
require 'weskit/version'
|
3
|
-
require 'weskit/wml'
|
3
|
+
require 'weskit/wml'
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'weskit'
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'wml_spec_helper'
|
2
|
+
|
3
|
+
describe Weskit::WML::Attribute do
|
4
|
+
include WMLHelpers
|
5
|
+
|
6
|
+
let(:attribute) { Weskit::WML::Attribute.new :foo, :bar }
|
7
|
+
|
8
|
+
it 'should change code to false when setting translatable to true' do
|
9
|
+
attribute.should_not be_code
|
10
|
+
attribute.should_not be_translatable
|
11
|
+
|
12
|
+
attribute.code = true
|
13
|
+
|
14
|
+
attribute.should be_code
|
15
|
+
attribute.should_not be_translatable
|
16
|
+
|
17
|
+
attribute.translatable = true
|
18
|
+
|
19
|
+
attribute.should_not be_code
|
20
|
+
attribute.should be_translatable
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should change translatable to false when setting code to true' do
|
24
|
+
attribute.should_not be_code
|
25
|
+
attribute.should_not be_translatable
|
26
|
+
|
27
|
+
attribute.translatable = true
|
28
|
+
|
29
|
+
attribute.should_not be_code
|
30
|
+
attribute.should be_translatable
|
31
|
+
|
32
|
+
attribute.code = true
|
33
|
+
|
34
|
+
attribute.should be_code
|
35
|
+
attribute.should_not be_translatable
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should respond to predicates' do
|
39
|
+
attr1 = attribute.dup.merge :code => true
|
40
|
+
attr2 = attribute.dup.merge :translatable => true
|
41
|
+
attr3 = Weskit::WML::Attribute.new :bar, "baz \n bat"
|
42
|
+
|
43
|
+
attr1.should be_code
|
44
|
+
attr2.should be_translatable
|
45
|
+
attr3.should be_multiline
|
46
|
+
|
47
|
+
attr1.should be_text
|
48
|
+
attr2.should be_text
|
49
|
+
attr3.should be_text
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'wml_spec_helper'
|
2
|
+
|
3
|
+
describe Weskit::WML::Attributes do
|
4
|
+
include WMLHelpers
|
5
|
+
|
6
|
+
let(:attribute) { Weskit::WML::Attribute.new :foo, :bar }
|
7
|
+
let(:attributes) { Weskit::WML::Attributes.new }
|
8
|
+
|
9
|
+
it 'has hash like access' do
|
10
|
+
attributes << attribute
|
11
|
+
attributes[:foo].should match_value_of(:bar)
|
12
|
+
attributes[:foo].attribute.should have_same_representation_as(attribute)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'store attributes only' do
|
16
|
+
expect { attributes.push attribute }.to change { attributes.size }.from(0).to(1)
|
17
|
+
expect { attributes.push :boo }.to raise_error(Weskit::WML::Errors::InvalidItem)
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'wml_spec_helper'
|
2
|
+
|
3
|
+
describe Weskit::WML::Builder do
|
4
|
+
include WMLHelpers
|
5
|
+
|
6
|
+
let(:element) { Weskit::WML::Element.new :foo }
|
7
|
+
|
8
|
+
specify 'builds attributes' do
|
9
|
+
reference = Weskit::WML::Element.new(:foo) \
|
10
|
+
<< Weskit::WML::Attribute.new(:bar, :foo) \
|
11
|
+
<< Weskit::WML::Attribute.new(:baz, :foo, :code => true) \
|
12
|
+
<< Weskit::WML::Attribute.new(:bat, :foo, :translatable => true)
|
13
|
+
|
14
|
+
element.build do
|
15
|
+
bar :foo
|
16
|
+
baz :foo, :code => true
|
17
|
+
bat :foo, :translatable => true
|
18
|
+
end
|
19
|
+
|
20
|
+
element.should have_same_representation_as(reference)
|
21
|
+
end
|
22
|
+
|
23
|
+
specify 'builds elements' do
|
24
|
+
reference = Weskit::WML::Element.new(:foo) \
|
25
|
+
<< Weskit::WML::Element.new(:baz) \
|
26
|
+
<< Weskit::WML::Element.new(:bar) \
|
27
|
+
<< sample_amendment
|
28
|
+
|
29
|
+
element.build do
|
30
|
+
baz {}
|
31
|
+
bar {}
|
32
|
+
bar :amendment => true do
|
33
|
+
bat :baz
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
element.should have_same_representation_as(reference)
|
38
|
+
end
|
39
|
+
|
40
|
+
specify 'convert hashes' do
|
41
|
+
hash = {
|
42
|
+
:a => :foo,
|
43
|
+
:b => {
|
44
|
+
:c => :bar
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
converted = Weskit::WML::Builder.convert hash
|
49
|
+
converted[:a].should match_value_of(:foo)
|
50
|
+
converted.elements[:c].should match_value_of(:bar)
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'wml_spec_helper'
|
2
|
+
|
3
|
+
describe Weskit::WML::Element do
|
4
|
+
include WMLHelpers
|
5
|
+
|
6
|
+
let(:element) { Weskit::WML::Element.new :foo }
|
7
|
+
|
8
|
+
it_should_behave_like 'a container' do
|
9
|
+
let(:container) { element }
|
10
|
+
end
|
11
|
+
|
12
|
+
it_should_behave_like 'a searchable' do
|
13
|
+
let(:searchable) { element }
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'can be amending element' do
|
17
|
+
element = Weskit::WML::Element.new :foo, :amendment => true
|
18
|
+
element.should be_amendment
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'wml_spec_helper'
|
2
|
+
|
3
|
+
describe Weskit::WML::Elements do
|
4
|
+
include WMLHelpers
|
5
|
+
|
6
|
+
let(:element) { Weskit::WML::Element.new :foo }
|
7
|
+
let(:elements) { Weskit::WML::Elements.new }
|
8
|
+
|
9
|
+
it_should_behave_like 'a searchable' do
|
10
|
+
let(:searchable) { elements }
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'has hash like access' do
|
14
|
+
element = Weskit::WML::Element.new(:foo).push Weskit::WML::Attribute.new(:bat, :baz)
|
15
|
+
elements.push element
|
16
|
+
|
17
|
+
elements[0].should be(element)
|
18
|
+
elements[:bat].should match_value_of(:baz)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'store elements only' do
|
22
|
+
expect { elements.push element }.to change { elements.size }.from(0).to(1)
|
23
|
+
expect { elements.push :boo }.to raise_error(Weskit::WML::Errors::InvalidItem)
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'wml_spec_helper'
|
2
|
+
|
3
|
+
describe Weskit::WML::Formatter do
|
4
|
+
include WMLHelpers
|
5
|
+
|
6
|
+
subject { Weskit::WML::Formatter.default }
|
7
|
+
|
8
|
+
let(:formatter) { subject }
|
9
|
+
|
10
|
+
specify 'can be initialized as color default or pain' do
|
11
|
+
Weskit::WML::Formatter.color.should be_kind_of(Weskit::WML::Formatter)
|
12
|
+
Weskit::WML::Formatter.default.should be_kind_of(Weskit::WML::Formatter)
|
13
|
+
Weskit::WML::Formatter.plain.should be_kind_of(Weskit::WML::Formatter)
|
14
|
+
end
|
15
|
+
|
16
|
+
specify 'default formatter can be replaced' do
|
17
|
+
default = Weskit::WML::Formatter.default
|
18
|
+
expect { Weskit::WML::Formatter.default = Weskit::WML::Formatter.color }.to change {
|
19
|
+
Weskit::WML::Formatter.default
|
20
|
+
}.from(Weskit::WML::Formatter.plain).to(Weskit::WML::Formatter.color)
|
21
|
+
Weskit::WML::Formatter.default = default
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'plain' do
|
25
|
+
it 'formatts attributes' do
|
26
|
+
formatted = formatter.format Weskit::WML::Attribute.new(:foo, 'bar')
|
27
|
+
formatted.should eq('foo=bar')
|
28
|
+
|
29
|
+
formatted = formatter.format Weskit::WML::Attribute.new(:foo, 'bar', :code => true)
|
30
|
+
formatted.should eq('foo=<<bar>>')
|
31
|
+
|
32
|
+
formatted = formatter.format Weskit::WML::Attribute.new(:foo, 'bar', :translatable => true)
|
33
|
+
formatted.should eq('foo=_"bar"')
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'formatts elements' do
|
37
|
+
element = Weskit::WML::Element.new :foo
|
38
|
+
formatted = formatter.format element
|
39
|
+
formatter.format(element).should have_same_representation_as(element)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'wml_spec_helper'
|
2
|
+
|
3
|
+
describe Weskit::WML::Item do
|
4
|
+
include WMLHelpers
|
5
|
+
|
6
|
+
let(:item) { Weskit::WML::Item.new :foo }
|
7
|
+
|
8
|
+
it 'should compare items by name or class' do
|
9
|
+
bat = Weskit::WML::Item.new :bat
|
10
|
+
|
11
|
+
(item <=> bat).should eq(1)
|
12
|
+
(bat <=> item).should eq(-1)
|
13
|
+
|
14
|
+
bat = Weskit::WML::Element.new :bat
|
15
|
+
|
16
|
+
(item <=> bat).should eq(1)
|
17
|
+
(bat <=> item).should eq(-1)
|
18
|
+
|
19
|
+
(item <=> :bat).should be_nil
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should have name that is identifier' do
|
23
|
+
item.should have_identifier_of(:foo)
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'wml_spec_helper'
|
2
|
+
|
3
|
+
describe Weskit::WML::Items do
|
4
|
+
include WMLHelpers
|
5
|
+
|
6
|
+
let(:items) { Weskit::WML::Items.new }
|
7
|
+
|
8
|
+
it_should_behave_like 'a container' do
|
9
|
+
let(:container) { items }
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'has contents formatter' do
|
13
|
+
expect { items.formatter = Weskit::WML::Formatter.color }.to change { items.formatter }.from(Weskit::WML::Formatter.default).to(Weskit::WML::Formatter.color)
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'wml_spec_helper'
|
2
|
+
require 'awesome_print'
|
3
|
+
|
4
|
+
describe Weskit::WML::Parser do
|
5
|
+
include WMLHelpers
|
6
|
+
|
7
|
+
describe 'parse' do
|
8
|
+
specify 'empty lines' do
|
9
|
+
Weskit::WML::Parser.string document_with_empty_lines
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'attribute' do
|
13
|
+
specify 'raw' do
|
14
|
+
parsed = Weskit::WML::Parser.string 'a=b'
|
15
|
+
parsed[:a].should match_value_of(:b)
|
16
|
+
end
|
17
|
+
|
18
|
+
specify 'code' do
|
19
|
+
parsed = Weskit::WML::Parser.string ' a= <<b>> '
|
20
|
+
parsed[:a].attribute.should be_code
|
21
|
+
parsed[:a].should match_value_of(:b)
|
22
|
+
end
|
23
|
+
|
24
|
+
specify 'multiline' do
|
25
|
+
parsed = Weskit::WML::Parser.string %Q{a= "b \n c"}
|
26
|
+
parsed[:a].attribute.should be_multiline
|
27
|
+
parsed[:a].should match_value_of("b \n c")
|
28
|
+
end
|
29
|
+
|
30
|
+
specify 'escape sequence' do
|
31
|
+
parsed = Weskit::WML::Parser.string %Q{ a= "b "" c" }
|
32
|
+
parsed[:a].should match_value_of('b " c')
|
33
|
+
end
|
34
|
+
|
35
|
+
specify 'translatable' do
|
36
|
+
parsed = Weskit::WML::Parser.string ' a= _ "b" '
|
37
|
+
parsed[:a].attribute.should be_translatable
|
38
|
+
parsed[:a].should match_value_of(:b)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context 'element' do
|
43
|
+
specify 'tags' do
|
44
|
+
expect {
|
45
|
+
Weskit::WML::Parser.string "[foo]\n[/bar]"
|
46
|
+
}.to raise_error Weskit::WML::Errors::ParseError
|
47
|
+
end
|
48
|
+
|
49
|
+
specify 'default' do
|
50
|
+
parsed = Weskit::WML::Parser.string "[foo]\n[/foo]"
|
51
|
+
parsed[0].should have_identifier_of(:foo)
|
52
|
+
end
|
53
|
+
|
54
|
+
specify 'amending' do
|
55
|
+
parsed = Weskit::WML::Parser.string document_with_amendment
|
56
|
+
parsed[0][:bat].should match_value_of(:baz)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'wml_spec_helper'
|
2
|
+
|
3
|
+
describe Weskit::WML::Root do
|
4
|
+
include WMLHelpers
|
5
|
+
|
6
|
+
let(:root) { Weskit::WML::Root.new }
|
7
|
+
|
8
|
+
it_should_behave_like 'a container' do
|
9
|
+
let(:container) { root }
|
10
|
+
end
|
11
|
+
|
12
|
+
it_should_behave_like 'a searchable' do
|
13
|
+
let(:searchable) { root }
|
14
|
+
end
|
15
|
+
end
|
data/spec/wml_helpers.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
module WMLHelpers
|
2
|
+
def sample_amendment
|
3
|
+
e = Weskit::WML::Element.new :bar, :amendment => true
|
4
|
+
e.push Weskit::WML::Attribute.new :bat, :baz
|
5
|
+
end
|
6
|
+
|
7
|
+
def document_with_amendment
|
8
|
+
<<-doc
|
9
|
+
[foo]
|
10
|
+
[/foo]
|
11
|
+
[+foo]
|
12
|
+
bat=baz
|
13
|
+
[/foo]
|
14
|
+
doc
|
15
|
+
end
|
16
|
+
|
17
|
+
def document_with_empty_lines
|
18
|
+
<<-doc
|
19
|
+
|
20
|
+
[a]
|
21
|
+
b=c
|
22
|
+
[/a]
|
23
|
+
|
24
|
+
[d]
|
25
|
+
|
26
|
+
e=f
|
27
|
+
|
28
|
+
[/d]
|
29
|
+
|
30
|
+
doc
|
31
|
+
end
|
32
|
+
|
33
|
+
def sample_elements
|
34
|
+
a = Weskit::WML::Element.new :a
|
35
|
+
b = Weskit::WML::Element.new :b
|
36
|
+
c = Weskit::WML::Element.new :c
|
37
|
+
d = Weskit::WML::Element.new :d
|
38
|
+
a << (b.push c, d)
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
RSpec::Matchers.define :have_identifier_of do |name|
|
2
|
+
match do |actual|
|
3
|
+
actual.name == Weskit::WML::Item.identifier(name)
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
RSpec::Matchers.define :have_same_representation_as do |other|
|
8
|
+
match do |actual|
|
9
|
+
actual.to_s == other.to_s
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
RSpec::Matchers.define :match_value_of do |value|
|
14
|
+
match do |actual|
|
15
|
+
actual.to_s == value.to_s
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
shared_examples_for 'a container' do
|
2
|
+
it 'can delete stored item' do
|
3
|
+
container << (element = Weskit::WML::Element.new :foo)
|
4
|
+
expect { container.delete element }.to change { container.contents.size }.by(-1)
|
5
|
+
end
|
6
|
+
|
7
|
+
it 'can determine if item exists' do
|
8
|
+
container << (element = Weskit::WML::Element.new :foo)
|
9
|
+
container.exists?(element).should be_true
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'expose attrs and elems' do
|
13
|
+
container << Weskit::WML::Attribute.new(:foo, :bar)
|
14
|
+
container << Weskit::WML::Element.new(:baz)
|
15
|
+
|
16
|
+
container.should have(2).contents
|
17
|
+
container.should have(1).attrs
|
18
|
+
container.should have(1).elems
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'expose contents methods' do
|
22
|
+
%w{each empty? first last size to_a}.each do |method|
|
23
|
+
container.should respond_to(method)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'has associated builder' do
|
28
|
+
container.build do
|
29
|
+
key :foo
|
30
|
+
name {}
|
31
|
+
end
|
32
|
+
|
33
|
+
container[:key].should match_value_of(:foo)
|
34
|
+
container[0].should have_same_identifier_as(:name)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'has hash like access' do
|
38
|
+
container << (attribute = Weskit::WML::Attribute.new :foo, :bar)
|
39
|
+
container << (element = Weskit::WML::Element.new :baz)
|
40
|
+
|
41
|
+
container[:foo].should match_value_of(:bar)
|
42
|
+
container[0].should have_same_representation_as(element)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
shared_examples_for 'a searchable' do
|
47
|
+
specify 'append amending elements' do
|
48
|
+
searchable << Weskit::WML::Element.new(:bar)
|
49
|
+
searchable << sample_amendment
|
50
|
+
|
51
|
+
searchable.should have(1).elems
|
52
|
+
searchable.find(:bar, false)[:bat].should match_value_of(:baz)
|
53
|
+
end
|
54
|
+
|
55
|
+
specify 'finds nested elements' do
|
56
|
+
searchable << sample_elements
|
57
|
+
searchable.find(:a, false).find(:b).find(:c).size.should eq(1)
|
58
|
+
end
|
59
|
+
|
60
|
+
specify 'finds elements recursively' do
|
61
|
+
searchable << sample_elements
|
62
|
+
searchable << Weskit::WML::Element.new(:b)
|
63
|
+
|
64
|
+
searchable.find_recursively do |item|
|
65
|
+
item.name == :b
|
66
|
+
end.size.should eq(2)
|
67
|
+
end
|
68
|
+
end
|
data/weskit.gemspec
CHANGED
@@ -9,16 +9,19 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.email = ['filip.pyda@gmail.com']
|
10
10
|
s.homepage = 'https://github.com/f6p/weskit'
|
11
11
|
s.summary = 'Ruby utilies for BfW'
|
12
|
-
s.description = '
|
12
|
+
s.description = 'Tools for interacting with Wesnoth Markup Language, MP Server and such.'
|
13
13
|
|
14
14
|
# s.rubyforge_project = 'weskit'
|
15
15
|
|
16
16
|
s.files = `git ls-files`.split("\n")
|
17
17
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename f }
|
19
19
|
s.require_paths = ['lib']
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
s.add_development_dependency 'awesome_print'
|
22
|
+
s.add_development_dependency 'rake'
|
23
|
+
s.add_development_dependency 'rspec'
|
24
|
+
s.add_runtime_dependency 'polyglot'
|
25
|
+
s.add_runtime_dependency 'term-ansicolor'
|
26
|
+
s.add_runtime_dependency 'treetop'
|
24
27
|
end
|