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
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
module Weskit::MP
|
4
|
+
class Worker
|
5
|
+
extend Forwardable
|
6
|
+
|
7
|
+
attr_reader :debug, :nickname
|
8
|
+
def_delegators :@connection, :message, :read, :write
|
9
|
+
|
10
|
+
def connect_and &operate
|
11
|
+
@connection.open do
|
12
|
+
instance_eval &operate
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize nickname
|
17
|
+
@connection = Connection.new self
|
18
|
+
@nickname = nickname
|
19
|
+
end
|
20
|
+
|
21
|
+
def login
|
22
|
+
message 'login', {:selective_ping => 1, :username => @nickname}
|
23
|
+
read ; verify_response :mustlogin
|
24
|
+
read ; verify_response :join_lobby
|
25
|
+
end
|
26
|
+
|
27
|
+
def verify_response element
|
28
|
+
element = @connection.buffer.find(element).first
|
29
|
+
|
30
|
+
unless element
|
31
|
+
raise Errors::ResponseError, "Server send node other than '#{element}'"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/weskit/mp.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'weskit/version'
|
2
|
+
require 'weskit/wml'
|
3
|
+
|
4
|
+
module Weskit
|
5
|
+
module MP
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
require 'weskit/mp/errors/error'
|
10
|
+
require 'weskit/mp/errors/response_error'
|
11
|
+
require 'weskit/mp/adapter'
|
12
|
+
require 'weskit/mp/connection'
|
13
|
+
require 'weskit/mp/worker'
|
data/lib/weskit/version.rb
CHANGED
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'observer'
|
2
|
+
|
3
|
+
module Weskit::WML
|
4
|
+
class Attribute < Item
|
5
|
+
include Observable
|
6
|
+
|
7
|
+
attachable_to :element
|
8
|
+
|
9
|
+
attr_reader :value
|
10
|
+
|
11
|
+
def code= bool
|
12
|
+
@code = bool ? (@translatable = false ; true) : false
|
13
|
+
end
|
14
|
+
|
15
|
+
def code?
|
16
|
+
@code
|
17
|
+
end
|
18
|
+
|
19
|
+
def multiline?
|
20
|
+
"#{value}".include? "\n"
|
21
|
+
end
|
22
|
+
|
23
|
+
def text?
|
24
|
+
code? or multiline? or translatable?
|
25
|
+
end
|
26
|
+
|
27
|
+
def translatable= bool
|
28
|
+
@translatable = bool ? (@code = false ; true) : false
|
29
|
+
end
|
30
|
+
|
31
|
+
def translatable?
|
32
|
+
@translatable
|
33
|
+
end
|
34
|
+
|
35
|
+
def initialize name, value, defaults = {}
|
36
|
+
@code = @translatable = false
|
37
|
+
|
38
|
+
self.name = name
|
39
|
+
self.value = value
|
40
|
+
|
41
|
+
merge defaults
|
42
|
+
end
|
43
|
+
|
44
|
+
def value= object
|
45
|
+
@value = convert object
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def convert object
|
51
|
+
string = object.to_s.strip
|
52
|
+
|
53
|
+
object = case string
|
54
|
+
when %r{^nil|null$} then nil
|
55
|
+
when %r{^true|yes$} then true
|
56
|
+
when %r{^false|no$} then false
|
57
|
+
when %r{^[0-9]*\.[0-9]+$} then Float string
|
58
|
+
when %r{^[0-9]+$} then Integer string
|
59
|
+
else string
|
60
|
+
end
|
61
|
+
|
62
|
+
object.attr = self ; object
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Weskit::WML
|
2
|
+
class Attributes < Items
|
3
|
+
undef_method :attrs, :attributes
|
4
|
+
undef_method :elems, :elements
|
5
|
+
|
6
|
+
def [] name
|
7
|
+
name = ::Weskit::WML::Item.identifier name
|
8
|
+
attribute(name).value
|
9
|
+
end
|
10
|
+
|
11
|
+
def << item
|
12
|
+
append_attribute item
|
13
|
+
self
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Weskit::WML
|
2
|
+
class Builder
|
3
|
+
private_class_method :new
|
4
|
+
|
5
|
+
def attribute name, value, defaults = nil
|
6
|
+
a = Attribute.new name, value, defaults || {}
|
7
|
+
@built << a ; a
|
8
|
+
end
|
9
|
+
|
10
|
+
def create &contents
|
11
|
+
instance_eval &contents ; @built
|
12
|
+
end
|
13
|
+
|
14
|
+
def element name, defaults = nil
|
15
|
+
e = Element.new name, defaults || {}
|
16
|
+
@built << e ; e
|
17
|
+
end
|
18
|
+
|
19
|
+
def id value
|
20
|
+
attribute :id, value
|
21
|
+
end
|
22
|
+
|
23
|
+
def initialize
|
24
|
+
@built = []
|
25
|
+
end
|
26
|
+
|
27
|
+
def method_missing *params
|
28
|
+
p = params
|
29
|
+
unless block_given?
|
30
|
+
raise_invalid_count if p.size < 2
|
31
|
+
attribute p[0], p[1], p[2]
|
32
|
+
else
|
33
|
+
raise_invalid_count if p.size < 1
|
34
|
+
element(p[0], p[1]).build &Proc.new
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def raise_invalid_count
|
41
|
+
raise Errors::InvalidParameters, "Invalid number of parameters"
|
42
|
+
end
|
43
|
+
|
44
|
+
class << self
|
45
|
+
def build &contents
|
46
|
+
new.create &contents
|
47
|
+
end
|
48
|
+
|
49
|
+
def convert hash
|
50
|
+
root = Root.new
|
51
|
+
|
52
|
+
hash.each do |k, v|
|
53
|
+
if v.is_a? Hash
|
54
|
+
e = Element.new k
|
55
|
+
e.push *Builder.convert(v)
|
56
|
+
root << e
|
57
|
+
else
|
58
|
+
root << Attribute.new(k, v)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
root
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Weskit::WML
|
2
|
+
class Element < Item
|
3
|
+
include Mixins::Container, Mixins::Searchable, Mixins::Validator
|
4
|
+
|
5
|
+
attachable_to :parent
|
6
|
+
|
7
|
+
attr_reader :contents
|
8
|
+
|
9
|
+
def << item
|
10
|
+
(append? item) ? append(item) : add(item)
|
11
|
+
item.attach_to self
|
12
|
+
self
|
13
|
+
end
|
14
|
+
|
15
|
+
def amendment= bool
|
16
|
+
@amendment = bool ? true : false
|
17
|
+
end
|
18
|
+
|
19
|
+
def amendment?
|
20
|
+
@amendment
|
21
|
+
end
|
22
|
+
|
23
|
+
def find name, nested = false
|
24
|
+
find_elements name, nested
|
25
|
+
end
|
26
|
+
|
27
|
+
alias_method :method_missing, :find
|
28
|
+
|
29
|
+
def initialize name, defaults = {}
|
30
|
+
@amendment, @contents = false, []
|
31
|
+
super
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Weskit::WML
|
2
|
+
class Elements < Items
|
3
|
+
include Mixins::Container, Mixins::Searchable
|
4
|
+
|
5
|
+
undef_method :attrs, :attributes
|
6
|
+
undef_method :elems, :elements
|
7
|
+
|
8
|
+
def [] key
|
9
|
+
case key
|
10
|
+
when Integer then contents[key]
|
11
|
+
else contents[0][key] rescue nil
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def << item
|
16
|
+
raise_unless Element, item
|
17
|
+
item.amendment? ? append(item) : add(item)
|
18
|
+
self
|
19
|
+
end
|
20
|
+
|
21
|
+
def find name, nested = true
|
22
|
+
find_elements name, nested
|
23
|
+
end
|
24
|
+
|
25
|
+
alias_method :method_missing, :find
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class Object
|
2
|
+
include ::Weskit::WML::Mixins::Validator
|
3
|
+
|
4
|
+
attr_reader :attribute
|
5
|
+
|
6
|
+
alias_method :attr, :attribute
|
7
|
+
|
8
|
+
def attribute= item
|
9
|
+
@attribute = item ? (raise_unless ::Weskit::WML::Attribute, item ; item) : nil
|
10
|
+
end
|
11
|
+
|
12
|
+
alias_method :attr=, :attribute=
|
13
|
+
|
14
|
+
def attribute?
|
15
|
+
@attribute ? true : false
|
16
|
+
end
|
17
|
+
|
18
|
+
alias_method :attr?, :attribute?
|
19
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module Weskit::WML
|
2
|
+
class Formatter
|
3
|
+
private_class_method :new
|
4
|
+
|
5
|
+
attr_reader :separator
|
6
|
+
|
7
|
+
def format item, indentation = 0
|
8
|
+
case item
|
9
|
+
when Attribute then @attr_formatter.format item, indentation
|
10
|
+
when Element then @elem_formatter.format item, indentation
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def format_detached item, formatter = nil
|
15
|
+
formatter ||= item.formatter
|
16
|
+
duplicate = item.dup.detach
|
17
|
+
|
18
|
+
duplicate.formatter = formatter
|
19
|
+
format item
|
20
|
+
end
|
21
|
+
|
22
|
+
def indent content, width = 0
|
23
|
+
@indent * width + "#{content}"
|
24
|
+
end
|
25
|
+
|
26
|
+
def initialize options = {}
|
27
|
+
options = options_default.merge options
|
28
|
+
|
29
|
+
@attr_formatter = options[:attr_formatter].new self
|
30
|
+
@elem_formatter = options[:elem_formatter].new self
|
31
|
+
|
32
|
+
@indent = options[:indent]
|
33
|
+
@separator = options[:separator]
|
34
|
+
|
35
|
+
self
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def options_default
|
41
|
+
{
|
42
|
+
:indent => ' ',
|
43
|
+
:separator => $/
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
class << self
|
48
|
+
def color
|
49
|
+
@color ||= new options_color
|
50
|
+
end
|
51
|
+
|
52
|
+
def default
|
53
|
+
@default or plain
|
54
|
+
end
|
55
|
+
|
56
|
+
def default= item
|
57
|
+
Mixins::Validator.raise_unless Formatter, item
|
58
|
+
@default = item
|
59
|
+
end
|
60
|
+
|
61
|
+
def plain
|
62
|
+
@plain ||= new options_plain
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def options_color
|
68
|
+
{
|
69
|
+
:attr_formatter => Formatters::AnsiColorAttribute,
|
70
|
+
:elem_formatter => Formatters::AnsiColorElement
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
def options_plain
|
75
|
+
{
|
76
|
+
:attr_formatter => Formatters::Attribute,
|
77
|
+
:elem_formatter => Formatters::Element
|
78
|
+
}
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'term/ansicolor'
|
2
|
+
|
3
|
+
module Weskit::WML::Formatters
|
4
|
+
module AnsiColor
|
5
|
+
module_function
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def ac
|
10
|
+
Term::ANSIColor
|
11
|
+
end
|
12
|
+
|
13
|
+
def reset
|
14
|
+
ac.reset
|
15
|
+
end
|
16
|
+
|
17
|
+
def attribute text
|
18
|
+
"#{attribute_color}#{text}#{reset}"
|
19
|
+
end
|
20
|
+
|
21
|
+
def attribute_color
|
22
|
+
ac.yellow
|
23
|
+
end
|
24
|
+
|
25
|
+
def val text
|
26
|
+
"#{value_color}#{text}#{reset}"
|
27
|
+
end
|
28
|
+
|
29
|
+
def val_color
|
30
|
+
ac.intense_cyan
|
31
|
+
end
|
32
|
+
|
33
|
+
def control text
|
34
|
+
"#{control_color}#{text}#{reset}"
|
35
|
+
end
|
36
|
+
|
37
|
+
def control_color
|
38
|
+
ac.intense_blue
|
39
|
+
end
|
40
|
+
|
41
|
+
def element text
|
42
|
+
"#{element_color}#{text}#{reset}"
|
43
|
+
end
|
44
|
+
|
45
|
+
def element_color
|
46
|
+
ac.intense_green
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Weskit::WML::Formatters
|
2
|
+
class AnsiColorAttribute < Attribute
|
3
|
+
include ::Weskit::WML::Formatters::AnsiColor
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
def defaults
|
8
|
+
hash = super
|
9
|
+
|
10
|
+
hash[:assignment] = control hash[:assignment]
|
11
|
+
hash[:code_start] = control hash[:code_start]
|
12
|
+
hash[:code_end] = control hash[:code_end]
|
13
|
+
hash[:quote] = control hash[:quote]
|
14
|
+
hash[:underscore] = control hash[:underscore]
|
15
|
+
|
16
|
+
hash
|
17
|
+
end
|
18
|
+
|
19
|
+
def escape_sequence
|
20
|
+
reset + "#{@quote * 2}" + val_color
|
21
|
+
end
|
22
|
+
|
23
|
+
def text attribute
|
24
|
+
val_color + "#{attribute.value}" + reset
|
25
|
+
end
|
26
|
+
|
27
|
+
def name attribute
|
28
|
+
attribute super
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Weskit::WML::Formatters
|
2
|
+
class AnsiColorElement < Element
|
3
|
+
include ::Weskit::WML::Formatters::AnsiColor
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
def defaults
|
8
|
+
hash = super
|
9
|
+
|
10
|
+
hash[:amend_char] = control hash[:amend_char]
|
11
|
+
hash[:closing_char] = control hash[:closing_char]
|
12
|
+
hash[:closing] = control hash[:closing]
|
13
|
+
hash[:opening] = control hash[:opening]
|
14
|
+
|
15
|
+
hash
|
16
|
+
end
|
17
|
+
|
18
|
+
def name element
|
19
|
+
element super
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Weskit::WML::Formatters
|
2
|
+
class Attribute < ItemFormatter
|
3
|
+
def format attribute, indent = 0
|
4
|
+
content = "#{name attribute}#@assignment#{value attribute}"
|
5
|
+
@formatter.indent content, indent
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def defaults
|
11
|
+
{
|
12
|
+
:assignment => '=',
|
13
|
+
:code_start => '<<',
|
14
|
+
:code_end => '>>',
|
15
|
+
:quote => '"',
|
16
|
+
:underscore => '_'
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
def escape value
|
21
|
+
value.gsub @quote, escape_sequence
|
22
|
+
end
|
23
|
+
|
24
|
+
def escape_sequence
|
25
|
+
@quote * 2
|
26
|
+
end
|
27
|
+
|
28
|
+
def text attribute
|
29
|
+
"#{attribute.value}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def name attribute
|
33
|
+
"#{attribute.name}"
|
34
|
+
end
|
35
|
+
|
36
|
+
def code_value attribute
|
37
|
+
"#@code_start#{text attribute}#@code_end"
|
38
|
+
end
|
39
|
+
|
40
|
+
def raw_value attribute
|
41
|
+
text attribute
|
42
|
+
end
|
43
|
+
|
44
|
+
def text_value attribute
|
45
|
+
string = escape text attribute
|
46
|
+
string = "#@quote#{string}#@quote"
|
47
|
+
string = "#@underscore#{string}" if attribute.translatable?
|
48
|
+
end
|
49
|
+
|
50
|
+
def value attribute
|
51
|
+
method = if attribute.code?
|
52
|
+
:code_value
|
53
|
+
elsif attribute.text?
|
54
|
+
:text_value
|
55
|
+
else
|
56
|
+
:raw_value
|
57
|
+
end
|
58
|
+
|
59
|
+
send method, attribute
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Weskit::WML::Formatters
|
2
|
+
class Element < ItemFormatter
|
3
|
+
def format element, indent = 0
|
4
|
+
contents = []
|
5
|
+
|
6
|
+
contents.push @formatter.indent(opening_tag(element), indent)
|
7
|
+
contents += element.contents.collect {|i| @formatter.format i, indent + 1}
|
8
|
+
contents.push @formatter.indent(closing_tag(element), indent)
|
9
|
+
|
10
|
+
contents.join @formatter.separator
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def defaults
|
16
|
+
{
|
17
|
+
:amend_char => '+',
|
18
|
+
:closing_char => '/',
|
19
|
+
:closing => ']',
|
20
|
+
:opening => '['
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
def closing_tag element
|
25
|
+
tag "#@closing_char#{name element}"
|
26
|
+
end
|
27
|
+
|
28
|
+
def name element
|
29
|
+
"#{element.name}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def opening_prefix element
|
33
|
+
element.amendment? ? "#@amend_char" : ''
|
34
|
+
end
|
35
|
+
|
36
|
+
def opening_tag element
|
37
|
+
tag "#{opening_prefix element}#{name element}"
|
38
|
+
end
|
39
|
+
|
40
|
+
def tag content
|
41
|
+
"#@opening#{content}#@closing"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Weskit::WML::Formatters
|
2
|
+
class ItemFormatter
|
3
|
+
include ::Weskit::WML::Mixins::Validator
|
4
|
+
|
5
|
+
def initialize item
|
6
|
+
raise_unless ::Weskit::WML::Formatter, item
|
7
|
+
set_instance_variables
|
8
|
+
@formatter = item
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def set_instance_variables
|
14
|
+
defaults.each {|var, value| instance_variable_set "@#{var}", value}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|