structure 3.2.0 → 3.3.0

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: c798ddd0dce500c2053077d3964ffe907c1f13fa0b1b9f9394c18a1cc9829b31
4
- data.tar.gz: 2c82c99faa38aeb774415121d793ff2205a628aecab194fe60a36746efcb983f
3
+ metadata.gz: 69bf1e759bbf993b28fb70235866a6c36774b92a57ee47764458d24bb062a55b
4
+ data.tar.gz: 3e9a55913e14fb630ece6c4fff62df1d8bfff69d61efd1034a406cf404423f96
5
5
  SHA512:
6
- metadata.gz: f3ec870b530f010c1356ee2ecadb6ca6e2880e29b4f15b80e395812aad8d342737a547811c442c737c50ff1b4b6dc98a2496ae2aa7df6e657d76198bb964b82a
7
- data.tar.gz: 30bafd22ee1ed82b7e5e5d702617200a31689fccad006df1e884d66d99b43c8b85ad9ae99004ca2b9a271f8b721a86c200553a289adc24496abf691b6f63573f
6
+ metadata.gz: c8b75ee56372f7af3ffd9398474ce25bcffed641314a77293a735cc5e5269f68ee7ba645ed44456eea5c84d1c2b551d0181be35519a61b553466ceda85287f8a
7
+ data.tar.gz: 3f736db422a6abe5dae0b59d37194d8f2242c2970a506f40efe04b379f00b7cbc14dd2a3437023d0a33bd0d80376f6418c1421659d446c546d56ccbb1352abf5
@@ -65,7 +65,7 @@ module Structure
65
65
 
66
66
  def predicate_methods
67
67
  @types.filter_map do |name, type_lambda|
68
- if type_lambda == Types.boolean && !name.to_s.end_with?("?")
68
+ if Types.boolean?(type_lambda) && !name.to_s.end_with?("?")
69
69
  predicate_name = "#{name}?"
70
70
  [predicate_name.to_sym, name]
71
71
  end
@@ -10,8 +10,8 @@ module Structure
10
10
  BOOLEAN_TRUTHY = [true, 1, "1", "t", "T", "true", "TRUE", "on", "ON"].freeze
11
11
  private_constant :BOOLEAN_TRUTHY
12
12
 
13
- def boolean
14
- @boolean ||= ->(val) { BOOLEAN_TRUTHY.include?(val) }
13
+ def boolean?(type)
14
+ type == boolean
15
15
  end
16
16
 
17
17
  # Main factory method for creating type coercers
@@ -56,6 +56,10 @@ module Structure
56
56
 
57
57
  private
58
58
 
59
+ def boolean
60
+ @boolean ||= ->(val) { BOOLEAN_TRUTHY.include?(val) }
61
+ end
62
+
59
63
  def self_referential
60
64
  proc { |val| parse(val) }
61
65
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Structure
4
- VERSION = "3.2.0"
4
+ VERSION = "3.3.0"
5
5
  end
data/lib/structure.rb CHANGED
@@ -39,6 +39,25 @@ module Structure
39
39
  attributes = builder.attributes
40
40
  after_parse_callback = builder.after_parse_callback
41
41
 
42
+ # Override to_h to recursively convert nested objects with to_h
43
+ data_class.define_method(:to_h) do
44
+ result = {}
45
+ self.class.members.each do |member|
46
+ value = send(member)
47
+ result[member] = case value
48
+ when Array
49
+ value.map { |item| item.respond_to?(:to_h) && item ? item.to_h : item }
50
+ when Hash
51
+ value
52
+ when ->(v) { v.respond_to?(:to_h) && v }
53
+ value.to_h
54
+ else
55
+ value
56
+ end
57
+ end
58
+ result
59
+ end
60
+
42
61
  data_class.define_singleton_method(:parse) do |data = {}, **kwargs|
43
62
  # Merge kwargs into data - kwargs take priority as overrides
44
63
  # Convert kwargs symbol keys to strings to match source_key lookups
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: structure
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 3.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hakan Ensari