tkwrapper 1.0.2 → 1.1.2

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: adff2bad961cbadb878bb2abbe0a6fbc94ff538889b6460dedea974821743874
4
- data.tar.gz: f2ef0b44bc561ebe718e68197348974d6c85973dfe9a2f95f73a8b30229c7450
3
+ metadata.gz: 42d786c8eda480c18150ef9b6c3e67fc04c14d2c9ec70a037907dee5a9273264
4
+ data.tar.gz: b669a2881c794270a80da8332a55393c90a7bb3115273b5c28fc5681fb43faf5
5
5
  SHA512:
6
- metadata.gz: '0032648213c0a318b02756bf63dbef4e6375f3af1554c94cb369c858a0ed2be7c2f17456493429e5f32ed62b65ad1710f63599d3ae98f1a585596f52ecc612c7'
7
- data.tar.gz: 0c737c6ebe8f1d06ae6061f8666066663abb41ee4be1317be3e2701da815f892ede6fca30db77ddf17adff726e99f6ebdc765c6f33ceb57fdeb6d13e5dac7f34
6
+ metadata.gz: 1c583155569bc2adf08a5177c35e123e45a69c997ecb3aa70d78841ab4418406a7daa83277c7efe7654585c77932b58094a4bace040d5c9555de30e4e493c9b0
7
+ data.tar.gz: 63cb56447bc90a44a86251cfc5ef4507a5482063abb2f24a906610d6d23c3ba8cb341bf64a34ae027577ffbf6bb47ab4935e88a7ab56198e39b44e7f2d0cb890
@@ -19,12 +19,9 @@ module Util
19
19
  end
20
20
  end
21
21
 
22
- def self.recursive_transform_key_value!(hash, &block)
23
- hash.transform_keys! do |key|
24
- value = hash[key]
25
- next recursive_transform_key_value!(value, &block) if value.is_a?(Hash)
26
-
27
- block.call(key, value)
22
+ def self.clone_recursive(hash)
23
+ hash.transform_values do |value|
24
+ value.is_a?(Hash) ? clone_recursive(value) : value
28
25
  end
29
26
  end
30
27
  end
@@ -5,7 +5,7 @@ require "#{LIB_DIR}/util/hash_recursive.rb"
5
5
  require_relative 'base'
6
6
 
7
7
  class TkWrapper::Widgets::Base::Configuration
8
- attr_accessor :config
8
+ attr_reader :config
9
9
 
10
10
  GRID_SPECIAL_VALUES = {
11
11
  onecell: {
@@ -23,29 +23,19 @@ class TkWrapper::Widgets::Base::Configuration
23
23
  NON_TK_OPTIONS = %i[id tk_class tearoff weights menu].freeze
24
24
 
25
25
  def initialize(config)
26
- @config = parse!(config)
26
+ @config = parse_and_clone(config)
27
27
  end
28
28
 
29
- def merge!(*configurations)
29
+ def merge(*configurations)
30
30
  configurations = configurations.map do |configuration|
31
- next configuration.config if configuration.is_a?(self.class)
31
+ configuration = configuration.config if configuration.is_a?(self.class)
32
32
 
33
- parse!(configuration)
33
+ parse_and_clone(configuration)
34
34
  end
35
35
 
36
36
  Util.merge_recursive!(@config, *configurations)
37
37
  end
38
38
 
39
- def parse!(config)
40
- Util.each_recursive(config) do |hash, key, value|
41
- next if value.is_a?(Hash)
42
-
43
- hash[key] = parse_value(key, value)
44
- end
45
-
46
- config
47
- end
48
-
49
39
  def [](key)
50
40
  key = key.to_sym
51
41
  return self.class.new(@config[key]) if @config[key].is_a?(Hash)
@@ -55,7 +45,13 @@ class TkWrapper::Widgets::Base::Configuration
55
45
 
56
46
  def []=(key, value)
57
47
  key = key.to_sym
58
- @config[key] = parse_value(key, value)
48
+ @config[key] = parse_and_clone(value, key)
49
+ end
50
+
51
+ def parse_and_clone(value, key = nil)
52
+ return parse_value(key, value) unless value.is_a?(Hash)
53
+
54
+ value.each_with_object({}) { |(k, v), h| h[k] = parse_and_clone(v, k) }
59
55
  end
60
56
 
61
57
  def parse_value(key, value)
@@ -114,6 +110,6 @@ class TkWrapper::Widgets::Base::Configuration
114
110
  end
115
111
 
116
112
  def merge_global_configurations(manager, widget)
117
- merge!(*manager.configurations(widget))
113
+ merge(*manager.configurations(widget))
118
114
  end
119
115
  end
@@ -60,6 +60,11 @@ class TkWrapper::Widgets::Base::Widget
60
60
  @childs.each { |child| child.build(self) }
61
61
  end
62
62
 
63
+ def push(child)
64
+ @childs.push(child)
65
+ child.build(self)
66
+ end
67
+
63
68
  def configure
64
69
  @config.merge_global_configurations(manager, self)
65
70
  @config.configure_tk_widget(tk_widget)
data/lib/widgets/grid.rb CHANGED
@@ -22,7 +22,7 @@ class TkWrapper::Widgets::Grid < TkWrapper::Widgets::Base::Widget
22
22
  row.each_with_index do |cell, col_i|
23
23
  next unless cell.is_a?(Widget)
24
24
 
25
- (cell.config[:grid] ||= {}).merge!({ row: row_i, column: col_i })
25
+ cell.config.merge({ grid: { row: row_i, column: col_i } })
26
26
 
27
27
  configure_colspan(cell, row_i, col_i)
28
28
  configure_rowspan(cell, row_i, col_i)
@@ -35,7 +35,7 @@ class TkWrapper::Widgets::Grid < TkWrapper::Widgets::Base::Widget
35
35
  colspan = cols_after_cell.reduce(1) do |span, content|
36
36
  content == :right ? span + 1 : (break span)
37
37
  end
38
- (cell.config[:grid] ||= {}).merge!({ columnspan: colspan })
38
+ cell.config.merge({ grid: { columnspan: colspan } })
39
39
  end
40
40
 
41
41
  def configure_rowspan(cell, row_i, col_i)
@@ -43,6 +43,6 @@ class TkWrapper::Widgets::Grid < TkWrapper::Widgets::Base::Widget
43
43
  rowspan = rows_after_cell.reduce(1) do |span, row|
44
44
  row[col_i] == :bottom ? span + 1 : (break span)
45
45
  end
46
- (cell.config[:grid] ||= {}).merge!({ rowspan: rowspan })
46
+ cell.config.merge({ grid: { rowspan: rowspan } })
47
47
  end
48
48
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tkwrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Schnitzler