taksi 0.2.2 → 0.2.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e57c4a5876a120b859b3642f790bf13d7f45a691ca74e2a3967d094589b2605a
4
- data.tar.gz: da96e2c711489b11c4d24f88cb8e3ae738774c484772e3a9c5e0106ab13f5573
3
+ metadata.gz: 20627caa4d2ab8d8141b289db3db7ade11e8d6fb4cdf50d3b4998c099d05201f
4
+ data.tar.gz: 2aca0fcd11290bed1562b2b800ce881421d47923beaf8554b0c84dc7686ebbde
5
5
  SHA512:
6
- metadata.gz: 1f52db226be934f1c70c127f2c75b105c1cdc65efd8443a76e338cb62769c95f2511e3b282521d753d6e34cc8791282889b7ef8d05bc471e3ad6b0fc87f8c316
7
- data.tar.gz: 229d3fbd97e55eaa3e70a3dd735e2e3b6f4947d9b3b91a962d73a2680c8bccd0c9d04af2a63bff3fcd37810519e65af3c52adb37111c801b8098d2ebdec793e9
6
+ metadata.gz: dc6f6bdebe9e44d02b7a3c65396bd968ea5ceda58f0dd4caad98c63bf5cba6dbb2b707ebca12c4965b7fa837a652572ed3a6cb9fd6cdd79e1d41c40edc894380
7
+ data.tar.gz: f7b9da31cf65583b7ba0c239b3aed066a7d448941a35bba68a9392d2b1cdc8dfdc15ea031998d053b39106bb474cfb35c98b0c8d6743a3393ed1f7804bc2e501
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
- name Taksi::Dynamic
26
- profile_kind Taksi::Static, 'resume'
25
+ static :profile_kind, 'resume' # same as `field :profile_kind, Taksi::Static`
27
26
 
28
- details do
29
- age Taksi::Dynamic
30
- email Taksi::Dynamic
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
@@ -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.name}.#{name}"
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.static?
32
+ return value.as_json if value&.static?
34
33
 
35
- return data[name] if parent.nil? || parent.root?
34
+ return data.fetch(name) if parent.nil? || parent.root?
36
35
 
37
- parent.fetch_from(data)[name]
38
- rescue NoMethodError
39
- raise NameError, "Couldn't fetch #{key.inspect} from data: #{data.inspect}"
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 method_missing(name, *args, &block)
80
- return super if @defined
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
- @nested_fields << self.class.new(skeleton, name, *args, parent: self, &block)
84
+ def nested(name, &block)
85
+ field(name, &block)
83
86
  end
84
87
 
85
- def respond_to_missing?(name, *)
86
- return super if @defined
88
+ def static(name, value)
89
+ field(name, ::Taksi::Values::Static, value)
90
+ end
87
91
 
88
- true
92
+ def dynamic(name)
93
+ field(name, ::Taksi::Values::Dynamic)
89
94
  end
90
95
  end
91
96
  end
@@ -63,6 +63,13 @@ module Taksi
63
63
  end
64
64
 
65
65
  module InstanceMethods
66
+ attr_reader :options
67
+
68
+ def initialize(**options)
69
+ @options = options.freeze
70
+ super()
71
+ end
72
+
66
73
  def skeleton
67
74
  self.class.skeleton
68
75
  end
@@ -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] ||= []
@@ -3,18 +3,11 @@
3
3
  module Taksi
4
4
  module Values
5
5
  class Dynamic
6
- attr_reader :component, :name, :field
6
+ attr_reader :component, :name
7
7
 
8
- def initialize(component, name, field = nil)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Taksi
4
- VERSION = '0.2.2'
4
+ VERSION = '0.2.4'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: taksi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Israel Trindade
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-12 00:00:00.000000000 Z
11
+ date: 2023-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler