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
@@ -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
|