weskit 0.0.2 → 0.1.0
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.
- 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
|