taksi 0.2.2 → 0.2.3
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/README.md +6 -5
- data/lib/taksi/component.rb +0 -1
- data/lib/taksi/components/field.rb +18 -13
- data/lib/taksi/registry.rb +7 -0
- data/lib/taksi/values/dynamic.rb +2 -9
- data/lib/taksi/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2bf8909dd9e8de12aa8fe7a7f93fcf3a414f8c8bc850bea7ff032bfcfd150d3e
|
|
4
|
+
data.tar.gz: 02ac2b0dccafc25969a9fc861a88bbaba468b932c014fe898c14e31f42db177d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 38cc7864f7dc6435e1b48d21f9f1d65b5f4d8ebb06c509d1101742d79e494f8b164fe0c133e873fd52f38570da9c21fd20c2e9ee632330a4f6e39777d70d3350
|
|
7
|
+
data.tar.gz: c9c0521ad137a949a57686e773eb04aedce5cefcf95e0bf79fe4fa05b89c4ef5f921c6596ec25ce6687bdaf7897b4e82372af84378139bbe5f224a14f51767f0
|
data/README.md
CHANGED
|
@@ -22,12 +22,13 @@ class Components::Users::ProfileResume
|
|
|
22
22
|
include Taksi::Component.new('users/profile_resume')
|
|
23
23
|
|
|
24
24
|
content do
|
|
25
|
-
|
|
26
|
-
profile_kind Taksi::Static, 'resume'
|
|
25
|
+
static :profile_kind, 'resume' # same as `field :profile_kind, Taksi::Static`
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
dynamic :name
|
|
28
|
+
|
|
29
|
+
field :details do
|
|
30
|
+
field :age Taksi::Dynamic # same as `dynamic :age`
|
|
31
|
+
field :email Taksi::Dynamic
|
|
31
32
|
end
|
|
32
33
|
end
|
|
33
34
|
end
|
data/lib/taksi/component.rb
CHANGED
|
@@ -73,7 +73,6 @@ module Taksi
|
|
|
73
73
|
def load_data_from_key_to_object(data, field, obj)
|
|
74
74
|
splitted_full_path = field.key.to_s.split('.')
|
|
75
75
|
setter_key = splitted_full_path.pop
|
|
76
|
-
splitted_full_path.shift # remove content root key, as it makes no sense in data object
|
|
77
76
|
|
|
78
77
|
relative_object = splitted_full_path.reduce(obj) do |memo, path_part|
|
|
79
78
|
memo[path_part.to_sym] ||= {}
|
|
@@ -18,25 +18,24 @@ module Taksi
|
|
|
18
18
|
@nested_fields = []
|
|
19
19
|
|
|
20
20
|
instance_exec(&block) if block_given?
|
|
21
|
-
@defined = true
|
|
22
21
|
end
|
|
23
22
|
|
|
24
23
|
def key
|
|
25
24
|
return name if parent.nil? || parent.root?
|
|
26
25
|
|
|
27
|
-
"#{parent.
|
|
26
|
+
"#{parent.key}.#{name}"
|
|
28
27
|
end
|
|
29
28
|
|
|
30
29
|
# Fetches the data for in `data` for the current field
|
|
31
30
|
# @return any
|
|
32
31
|
def fetch_from(data)
|
|
33
|
-
return value.as_json if value
|
|
32
|
+
return value.as_json if value&.static?
|
|
34
33
|
|
|
35
|
-
return data
|
|
34
|
+
return data.fetch(name) if parent.nil? || parent.root?
|
|
36
35
|
|
|
37
|
-
parent.fetch_from(data)
|
|
38
|
-
rescue
|
|
39
|
-
raise
|
|
36
|
+
parent.fetch_from(data).fetch(name)
|
|
37
|
+
rescue ::KeyError
|
|
38
|
+
raise ::KeyError, "Couldn't fetch #{key.inspect} from data: #{data.inspect}"
|
|
40
39
|
end
|
|
41
40
|
|
|
42
41
|
# Turns the field into his json representation
|
|
@@ -76,16 +75,22 @@ module Taksi
|
|
|
76
75
|
@value.dynamic?
|
|
77
76
|
end
|
|
78
77
|
|
|
79
|
-
def
|
|
80
|
-
|
|
78
|
+
def field(name, *args, &block)
|
|
79
|
+
self.class.new(skeleton, name, *args, parent: self, &block).tap do |new_field|
|
|
80
|
+
@nested_fields << new_field
|
|
81
|
+
end
|
|
82
|
+
end
|
|
81
83
|
|
|
82
|
-
|
|
84
|
+
def nested(name, &block)
|
|
85
|
+
field(name, &block)
|
|
83
86
|
end
|
|
84
87
|
|
|
85
|
-
def
|
|
86
|
-
|
|
88
|
+
def static(name, value)
|
|
89
|
+
field(name, ::Taksi::Values::Static, value)
|
|
90
|
+
end
|
|
87
91
|
|
|
88
|
-
|
|
92
|
+
def dynamic(name)
|
|
93
|
+
field(name, ::Taksi::Values::Dynamic)
|
|
89
94
|
end
|
|
90
95
|
end
|
|
91
96
|
end
|
data/lib/taksi/registry.rb
CHANGED
|
@@ -4,6 +4,8 @@ module Taksi
|
|
|
4
4
|
class Registry
|
|
5
5
|
include ::Singleton
|
|
6
6
|
|
|
7
|
+
NAME_REGEX = %r{^[a-z\-_/]{1,80}$}i
|
|
8
|
+
|
|
7
9
|
class << self
|
|
8
10
|
extend ::Forwardable
|
|
9
11
|
|
|
@@ -18,6 +20,11 @@ module Taksi
|
|
|
18
20
|
end
|
|
19
21
|
|
|
20
22
|
def add(klass, name)
|
|
23
|
+
unless name.to_s.match?(NAME_REGEX)
|
|
24
|
+
raise StandardError,
|
|
25
|
+
"Invalid interface name '#{name}', it must to match regex '#{NAME_REGEX.inspect}'"
|
|
26
|
+
end
|
|
27
|
+
|
|
21
28
|
sym_name = name.to_sym
|
|
22
29
|
|
|
23
30
|
@interfaces[sym_name] ||= []
|
data/lib/taksi/values/dynamic.rb
CHANGED
|
@@ -3,18 +3,11 @@
|
|
|
3
3
|
module Taksi
|
|
4
4
|
module Values
|
|
5
5
|
class Dynamic
|
|
6
|
-
attr_reader :component, :name
|
|
6
|
+
attr_reader :component, :name
|
|
7
7
|
|
|
8
|
-
def initialize(component, name
|
|
8
|
+
def initialize(component, name)
|
|
9
9
|
@component = component
|
|
10
10
|
@name = name
|
|
11
|
-
@field = field
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def path
|
|
15
|
-
return field if field
|
|
16
|
-
|
|
17
|
-
"#{component.id}.#{name}"
|
|
18
11
|
end
|
|
19
12
|
|
|
20
13
|
def as_json
|
data/lib/taksi/version.rb
CHANGED