tardvig 0.2.0 → 0.2.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/lib/tardvig/data_identifier.rb +39 -0
- data/lib/tardvig/events/proxy.rb +56 -0
- data/lib/tardvig/version.rb +1 -1
- data/lib/tardvig.rb +2 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6d19399953954acf68f31e5a9fb17befd2599a4b
|
4
|
+
data.tar.gz: adeb97c978d563c469aee6490d317adf174569eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d219400808b22aad2ec4cb4c7d920af26b8b1227880b9b4f2292fa1c08a8df0434a8cdbf6b5e4a693f60987b12e1762389d74e3229443900a867b03b47bee594
|
7
|
+
data.tar.gz: 2cc8af78421f3b9877373b72993b10756703f5200c5f2aacb714e7398290d7502040a44f2a794bed415893baeb116420fed02f02911c5a859eca62f668a6307b
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Tardvig
|
2
|
+
# Mixin for containers which adds them ability to use "data identifier":
|
3
|
+
# universal selector of data which contains in a container. It is useful in
|
4
|
+
# situation when you need to access data, but you can not directly get
|
5
|
+
# them (e. g. in client-server games).
|
6
|
+
module DataIdentifier
|
7
|
+
# Gets an element from this container using data identifier.
|
8
|
+
# @param id [Symbol,String] key of the element.
|
9
|
+
# It supports attributes (id `:key` for `object.key`) and the `[]` method
|
10
|
+
# (`:key` for `object[:key]` or `object['key']`).
|
11
|
+
# You can also get elements from container which is contained in this
|
12
|
+
# container (etc) using the `/` symbol (`foo/bar` for `object.foo.bar`).
|
13
|
+
def get_this(id)
|
14
|
+
obj = self
|
15
|
+
id.to_s.split('/').each do |part|
|
16
|
+
obj = get_elem_from_id obj, part
|
17
|
+
end
|
18
|
+
obj
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def get_elem_from_id(container, id)
|
24
|
+
if id.respond_to?(:to_sym) && container.respond_to?(id.to_sym)
|
25
|
+
container.send id.to_sym
|
26
|
+
elsif container.respond_to?(:[])
|
27
|
+
if num?(id)
|
28
|
+
container[id.to_i]
|
29
|
+
elsif !container.class.ancestors.include?(Array)
|
30
|
+
container[id] || container[id.to_sym]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def num?(str)
|
36
|
+
str.to_i.to_s == str
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Tardvig
|
2
|
+
module Events
|
3
|
+
# It allows to listens events of object using another object.
|
4
|
+
# It is useful when you do not have a direct access to object which you
|
5
|
+
# are want to listen on, for example, when you have access only to GameIO
|
6
|
+
# from a display.
|
7
|
+
module Proxy
|
8
|
+
# Adds objects to tracked list so you can bind proxy listeners to them
|
9
|
+
# @param [Hash] name => object pairs.
|
10
|
+
def spy_on(objects)
|
11
|
+
tracked_list.merge! objects
|
12
|
+
end
|
13
|
+
|
14
|
+
# @return [Hash] objects (with their names as keys) which you can bind
|
15
|
+
# proxy listeners to.
|
16
|
+
def tracked_list
|
17
|
+
@tracked_list ||= ({}.extend DataIdentifier)
|
18
|
+
end
|
19
|
+
|
20
|
+
# It works like the original Events#on, but it also can bind listeners
|
21
|
+
# to objects from the {tracked_list}.
|
22
|
+
#
|
23
|
+
# To do it, you need to set event name using next syntax:
|
24
|
+
# `tracked_obj_name:event_name`.
|
25
|
+
#
|
26
|
+
# `tracked_obj_name` is
|
27
|
+
# {DataIdentifier} of an object (from {tracked_list}) which you want to
|
28
|
+
# bind listener to.
|
29
|
+
#
|
30
|
+
# `event_name` is the event of this object. The `listener` will be binded
|
31
|
+
# to this event. *Important!* When you will trigger this event, its name
|
32
|
+
# must be a Symbol.
|
33
|
+
#
|
34
|
+
# See spec if you did not understood.
|
35
|
+
def on(event, &listener)
|
36
|
+
event_id_parts = event.to_s.split ':'
|
37
|
+
if event_id_parts.size == 2
|
38
|
+
event_target = tracked_list.get_this event_id_parts[0]
|
39
|
+
if event_target
|
40
|
+
bind_proxy_listener event_target, event, event_id_parts[1]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
super event, &listener
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
|
49
|
+
def bind_proxy_listener(target, full_event_name, event_name)
|
50
|
+
target.on event_name.to_sym do |data|
|
51
|
+
happen full_event_name, data
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/lib/tardvig/version.rb
CHANGED
data/lib/tardvig.rb
CHANGED
@@ -7,6 +7,8 @@ require_relative 'tardvig/saved_hash.rb'
|
|
7
7
|
require_relative 'tardvig/toolkit.rb'
|
8
8
|
require_relative 'tardvig/gameio.rb'
|
9
9
|
require_relative 'tardvig/act.rb'
|
10
|
+
require_relative 'tardvig/data_identifier.rb'
|
11
|
+
require_relative 'tardvig/events/proxy.rb'
|
10
12
|
|
11
13
|
# The main namespace for the gem
|
12
14
|
module Tardvig
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tardvig
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vadim Saprykin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-09-
|
11
|
+
date: 2016-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -80,7 +80,9 @@ files:
|
|
80
80
|
- lib/tardvig.rb
|
81
81
|
- lib/tardvig/act.rb
|
82
82
|
- lib/tardvig/command.rb
|
83
|
+
- lib/tardvig/data_identifier.rb
|
83
84
|
- lib/tardvig/events.rb
|
85
|
+
- lib/tardvig/events/proxy.rb
|
84
86
|
- lib/tardvig/gameio.rb
|
85
87
|
- lib/tardvig/saved_hash.rb
|
86
88
|
- lib/tardvig/toolkit.rb
|