sorbet-schema 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +26 -0
  3. data/Gemfile.lock +27 -27
  4. data/lib/sorbet-schema/version.rb +1 -1
  5. data/lib/typed/coercion/coercer_registry.rb +3 -1
  6. data/lib/typed/coercion/struct_coercer.rb +9 -1
  7. data/lib/typed/coercion/symbol_coercer.rb +27 -0
  8. data/lib/typed/coercion/typed_hash_coercer.rb +50 -0
  9. data/lib/typed/field.rb +29 -4
  10. data/lib/typed/schema.rb +2 -2
  11. data/lib/typed/serializer.rb +26 -4
  12. data/lib/typed/validations/field_type_validator.rb +6 -2
  13. data/sorbet/rbi/gems/{builder@3.2.4.rbi → builder@3.3.0.rbi} +22 -25
  14. data/sorbet/rbi/gems/{erubi@1.12.0.rbi → erubi@1.13.0.rbi} +19 -15
  15. data/sorbet/rbi/gems/{minitest-reporters@1.6.1.rbi → minitest-reporters@1.7.1.rbi} +47 -40
  16. data/sorbet/rbi/gems/{minitest@5.23.1.rbi → minitest@5.24.0.rbi} +159 -151
  17. data/sorbet/rbi/gems/{parallel@1.24.0.rbi → parallel@1.25.1.rbi} +26 -20
  18. data/sorbet/rbi/gems/{prism@0.29.0.rbi → prism@0.30.0.rbi} +5670 -4445
  19. data/sorbet/rbi/gems/{rexml@3.2.8.rbi → rexml@3.3.0.rbi} +69 -62
  20. data/sorbet/rbi/gems/{rubocop@1.63.5.rbi → rubocop@1.64.1.rbi} +660 -344
  21. data/sorbet/rbi/gems/{standard@1.36.0.rbi → standard@1.39.0.rbi} +159 -90
  22. data/sorbet/rbi/gems/{tapioca@0.14.2.rbi → tapioca@0.14.4.rbi} +89 -76
  23. data/sorbet/rbi/gems/{zeitwerk@2.6.15.rbi → zeitwerk@2.6.16.rbi} +115 -78
  24. metadata +19 -17
  25. /data/sorbet/rbi/gems/{parser@3.3.1.0.rbi → parser@3.3.3.0.rbi} +0 -0
  26. /data/sorbet/rbi/gems/{reline@0.5.7.rbi → reline@0.5.9.rbi} +0 -0
  27. /data/sorbet/rbi/gems/{rubocop-performance@1.21.0.rbi → rubocop-performance@1.21.1.rbi} +0 -0
  28. /data/sorbet/rbi/gems/{stringio@3.1.0.rbi → stringio@3.1.1.rbi} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c06e03c3878ac6b3cf04305124e1d3786de57f0543ee320181565a8b59f8c4b3
4
- data.tar.gz: 97d11102e65875b5f77f06095fdacf1dea0fabdd1fd1a91b5428a509dd6bac4b
3
+ metadata.gz: 1b4040ccaa87f90e0d32acee9868fffb0f4d645e599fe29726738fdb54c4f1e6
4
+ data.tar.gz: b83d96b38d8b7d786a3e174e576053f531bf03e237d7c1f049e98b9c813dc117
5
5
  SHA512:
6
- metadata.gz: 84e7f4308162784ee84b063ff743293cd6c72487479f23de3cf1ed31089f13ff8a148c4aad85854394343aa97eafbbab15551d54fd17ce8e390db343db5083c9
7
- data.tar.gz: 37301dfecd29623d2f5be76220e70d0aa1a650dc2c792c3e01e15b4bce17abb2bf468f04dbfd5026686c11aa594590a91b369b49ef2a1de5393ff77af07d5d8b
6
+ metadata.gz: 248121230fc7a86b616259a89db47c210360034aad0ec70a23e2b25d73b350e16eff09c09ea87efd0aa859ef86b6f5c7f7700043b2e0d3e1f570555e98baac31
7
+ data.tar.gz: 6f0c35a33ff1e84ebe704c30a6d0ba4b3520030c8ca59c897c33cc96f736c48c16e8672e7f4efef6f81f4a9816326db41c1cc625f49addd520a437066a04db1c
data/CHANGELOG.md CHANGED
@@ -4,6 +4,32 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.6.0](https://github.com/maxveldink/sorbet-schema/compare/v0.5.1...v0.6.0) (2024-07-07)
8
+
9
+
10
+ ### ⚠ BREAKING CHANGES
11
+
12
+ * implement default handling for fields ([#105](https://github.com/maxveldink/sorbet-schema/issues/105))
13
+
14
+ ### Features
15
+
16
+ * implement default handling for fields ([#105](https://github.com/maxveldink/sorbet-schema/issues/105)) ([054d59f](https://github.com/maxveldink/sorbet-schema/commit/054d59ff92c68b272d495a0816370b9a890f0f50))
17
+ * implement SymbolCoercer ([#109](https://github.com/maxveldink/sorbet-schema/issues/109)) ([422a995](https://github.com/maxveldink/sorbet-schema/commit/422a9957177039a3dde5c4daa41d597fd44f2b48))
18
+ * implement TypedHashCoercer ([#110](https://github.com/maxveldink/sorbet-schema/issues/110)) ([6d64db7](https://github.com/maxveldink/sorbet-schema/commit/6d64db7fcef8af56cb96f1ee6c42ba1e3ce076c3))
19
+ * support T.any for deserialization ([#107](https://github.com/maxveldink/sorbet-schema/issues/107)) ([c0c2ca3](https://github.com/maxveldink/sorbet-schema/commit/c0c2ca369abef136943e633b7987decad7291d98))
20
+
21
+
22
+ ### Bug Fixes
23
+
24
+ * default value set to true causes undefined method [] error ([#108](https://github.com/maxveldink/sorbet-schema/issues/108)) ([6829bbf](https://github.com/maxveldink/sorbet-schema/commit/6829bbf8b6bf47db51209e9874608b7e10c38b8e))
25
+
26
+ ## [0.5.1](https://github.com/maxveldink/sorbet-schema/compare/v0.5.0...v0.5.1) (2024-06-26)
27
+
28
+
29
+ ### Features
30
+
31
+ * support nested structs ([#102](https://github.com/maxveldink/sorbet-schema/issues/102)) ([08428e1](https://github.com/maxveldink/sorbet-schema/commit/08428e18afdbb4121ef2f290e8a85651b2e13edf))
32
+
7
33
  ## [0.5.0](https://github.com/maxveldink/sorbet-schema/compare/v0.4.2...v0.5.0) (2024-04-19)
8
34
 
9
35
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sorbet-schema (0.5.0)
4
+ sorbet-schema (0.6.0)
5
5
  sorbet-result (~> 1.1)
6
6
  sorbet-runtime (~> 0.5)
7
7
  sorbet-struct-comparable (~> 1.3)
@@ -13,32 +13,32 @@ GEM
13
13
  ansi (1.5.0)
14
14
  ast (2.4.2)
15
15
  bigdecimal (3.1.8)
16
- builder (3.2.4)
16
+ builder (3.3.0)
17
17
  debug (1.9.2)
18
18
  irb (~> 1.10)
19
19
  reline (>= 0.3.8)
20
- erubi (1.12.0)
20
+ erubi (1.13.0)
21
21
  io-console (0.7.2)
22
- irb (1.13.1)
22
+ irb (1.13.2)
23
23
  rdoc (>= 4.0.0)
24
24
  reline (>= 0.4.2)
25
25
  json (2.7.2)
26
26
  language_server-protocol (3.17.0.3)
27
27
  lint_roller (1.1.0)
28
- minitest (5.23.1)
28
+ minitest (5.24.0)
29
29
  minitest-focus (1.4.0)
30
30
  minitest (>= 4, < 6)
31
- minitest-reporters (1.6.1)
31
+ minitest-reporters (1.7.1)
32
32
  ansi
33
33
  builder
34
34
  minitest (>= 5.0)
35
35
  ruby-progressbar
36
36
  netrc (0.11.0)
37
- parallel (1.24.0)
38
- parser (3.3.1.0)
37
+ parallel (1.25.1)
38
+ parser (3.3.3.0)
39
39
  ast (~> 2.4.1)
40
40
  racc
41
- prism (0.29.0)
41
+ prism (0.30.0)
42
42
  psych (5.1.2)
43
43
  stringio
44
44
  racc (1.8.0)
@@ -50,11 +50,11 @@ GEM
50
50
  rdoc (6.7.0)
51
51
  psych (>= 4.0.0)
52
52
  regexp_parser (2.9.2)
53
- reline (0.5.7)
53
+ reline (0.5.9)
54
54
  io-console (~> 0.5)
55
- rexml (3.2.8)
56
- strscan (>= 3.0.9)
57
- rubocop (1.63.5)
55
+ rexml (3.3.0)
56
+ strscan
57
+ rubocop (1.64.1)
58
58
  json (~> 2.3)
59
59
  language_server-protocol (>= 3.17.0)
60
60
  parallel (~> 1.10)
@@ -67,22 +67,22 @@ GEM
67
67
  unicode-display_width (>= 2.4.0, < 3.0)
68
68
  rubocop-ast (1.31.3)
69
69
  parser (>= 3.3.1.0)
70
- rubocop-performance (1.21.0)
70
+ rubocop-performance (1.21.1)
71
71
  rubocop (>= 1.48.1, < 2.0)
72
72
  rubocop-ast (>= 1.31.1, < 2.0)
73
73
  rubocop-sorbet (0.7.8)
74
74
  rubocop (>= 0.90.0)
75
75
  ruby-progressbar (1.13.0)
76
- sorbet (0.5.11391)
77
- sorbet-static (= 0.5.11391)
76
+ sorbet (0.5.11444)
77
+ sorbet-static (= 0.5.11444)
78
78
  sorbet-result (1.1.0)
79
79
  sorbet-runtime (~> 0.5)
80
- sorbet-runtime (0.5.11391)
81
- sorbet-static (0.5.11391-universal-darwin)
82
- sorbet-static (0.5.11391-x86_64-linux)
83
- sorbet-static-and-runtime (0.5.11391)
84
- sorbet (= 0.5.11391)
85
- sorbet-runtime (= 0.5.11391)
80
+ sorbet-runtime (0.5.11444)
81
+ sorbet-static (0.5.11444-universal-darwin)
82
+ sorbet-static (0.5.11444-x86_64-linux)
83
+ sorbet-static-and-runtime (0.5.11444)
84
+ sorbet (= 0.5.11444)
85
+ sorbet-runtime (= 0.5.11444)
86
86
  sorbet-struct-comparable (1.3.0)
87
87
  sorbet-runtime (>= 0.5)
88
88
  spoom (1.3.2)
@@ -90,10 +90,10 @@ GEM
90
90
  prism (>= 0.19.0)
91
91
  sorbet-static-and-runtime (>= 0.5.10187)
92
92
  thor (>= 0.19.2)
93
- standard (1.36.0)
93
+ standard (1.39.0)
94
94
  language_server-protocol (~> 3.17.0.2)
95
95
  lint_roller (~> 1.0)
96
- rubocop (~> 1.63.0)
96
+ rubocop (~> 1.64.0)
97
97
  standard-custom (~> 1.0.0)
98
98
  standard-performance (~> 1.4)
99
99
  standard-custom (1.0.2)
@@ -105,9 +105,9 @@ GEM
105
105
  standard-sorbet (0.0.2)
106
106
  lint_roller (~> 1.1)
107
107
  rubocop-sorbet (~> 0.7.0)
108
- stringio (3.1.0)
108
+ stringio (3.1.1)
109
109
  strscan (3.1.0)
110
- tapioca (0.14.2)
110
+ tapioca (0.14.4)
111
111
  bundler (>= 2.2.25)
112
112
  netrc (>= 0.11.0)
113
113
  parallel (>= 1.21.0)
@@ -122,7 +122,7 @@ GEM
122
122
  yard-sorbet (0.8.1)
123
123
  sorbet-runtime (>= 0.5)
124
124
  yard (>= 0.9)
125
- zeitwerk (2.6.15)
125
+ zeitwerk (2.6.16)
126
126
 
127
127
  PLATFORMS
128
128
  arm64-darwin-22
@@ -1,5 +1,5 @@
1
1
  # typed: strict
2
2
 
3
3
  module SorbetSchema
4
- VERSION = "0.5.0"
4
+ VERSION = "0.6.0"
5
5
  end
@@ -14,13 +14,15 @@ module Typed
14
14
  DEFAULT_COERCERS = T.let(
15
15
  [
16
16
  StringCoercer,
17
+ SymbolCoercer,
17
18
  BooleanCoercer,
18
19
  IntegerCoercer,
19
20
  FloatCoercer,
20
21
  DateCoercer,
21
22
  EnumCoercer,
22
23
  StructCoercer,
23
- TypedArrayCoercer
24
+ TypedArrayCoercer,
25
+ TypedHashCoercer
24
26
  ],
25
27
  Registry
26
28
  )
@@ -21,7 +21,15 @@ module Typed
21
21
 
22
22
  return Failure.new(CoercionError.new("Value of type '#{value.class}' cannot be coerced to #{type} Struct.")) unless value.is_a?(Hash)
23
23
 
24
- Success.new(T.cast(type, T::Types::Simple).raw_type.from_hash!(HashTransformer.new.deep_stringify_keys(value)))
24
+ deserialization_result = T.cast(type, T::Types::Simple)
25
+ .raw_type
26
+ .deserialize_from(:hash, value)
27
+
28
+ if deserialization_result.success?
29
+ deserialization_result
30
+ else
31
+ Failure.new(CoercionError.new(deserialization_result.error.message))
32
+ end
25
33
  rescue ArgumentError, RuntimeError
26
34
  Failure.new(CoercionError.new("Given hash could not be coerced to #{type}."))
27
35
  end
@@ -0,0 +1,27 @@
1
+ # typed: strict
2
+
3
+ module Typed
4
+ module Coercion
5
+ class SymbolCoercer < Coercer
6
+ extend T::Generic
7
+
8
+ Target = type_member { {fixed: Symbol} }
9
+
10
+ sig { override.params(type: T::Types::Base).returns(T::Boolean) }
11
+ def used_for_type?(type)
12
+ type == T::Utils.coerce(Symbol)
13
+ end
14
+
15
+ sig { override.params(type: T::Types::Base, value: Value).returns(Result[Target, CoercionError]) }
16
+ def coerce(type:, value:)
17
+ return Failure.new(CoercionError.new("Type must be a Symbol.")) unless used_for_type?(type)
18
+
19
+ if value.respond_to?(:to_sym)
20
+ Success.new(value.to_sym)
21
+ else
22
+ Failure.new(CoercionError.new("Value cannot be coerced into Symbol. Consider adding a #to_sym implementation."))
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,50 @@
1
+ # typed: strict
2
+
3
+ module Typed
4
+ module Coercion
5
+ class TypedHashCoercer < Coercer
6
+ extend T::Generic
7
+
8
+ Target = type_member { {fixed: T::Hash[T.untyped, T.untyped]} }
9
+
10
+ sig { override.params(type: T::Types::Base).returns(T::Boolean) }
11
+ def used_for_type?(type)
12
+ type.is_a?(T::Types::TypedHash)
13
+ end
14
+
15
+ sig { override.params(type: T::Types::Base, value: Value).returns(Result[Target, CoercionError]) }
16
+ def coerce(type:, value:)
17
+ return Failure.new(CoercionError.new("Field type must be a T::Hash.")) unless used_for_type?(type)
18
+ return Failure.new(CoercionError.new("Value must be a Hash.")) unless value.is_a?(Hash)
19
+
20
+ return Success.new(value) if type.recursively_valid?(value)
21
+
22
+ coerced_hash = {}
23
+ errors = []
24
+
25
+ value.each do |k, v|
26
+ key_result = Coercion.coerce(type: T::Utils.coerce(T.cast(type, T::Types::TypedHash).type.types.first), value: k)
27
+ value_result = Coercion.coerce(type: T::Utils.coerce(T.cast(type, T::Types::TypedHash).type.types.last), value: v)
28
+
29
+ if key_result.success? && value_result.success?
30
+ coerced_hash[key_result.payload] = value_result.payload
31
+ else
32
+ if key_result.failure?
33
+ errors << key_result.error
34
+ end
35
+
36
+ if value_result.failure?
37
+ errors << value_result.error
38
+ end
39
+ end
40
+ end
41
+
42
+ if errors.empty?
43
+ Success.new(coerced_hash)
44
+ else
45
+ Failure.new(CoercionError.new(errors.map(&:message).join(" | ")))
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
data/lib/typed/field.rb CHANGED
@@ -12,6 +12,9 @@ module Typed
12
12
  sig { returns(T::Types::Base) }
13
13
  attr_reader :type
14
14
 
15
+ sig { returns(T.untyped) }
16
+ attr_reader :default
17
+
15
18
  sig { returns(T::Boolean) }
16
19
  attr_reader :required
17
20
 
@@ -22,15 +25,36 @@ module Typed
22
25
  params(
23
26
  name: Symbol,
24
27
  type: T.any(T::Class[T.anything], T::Types::Base),
25
- required: T::Boolean,
28
+ optional: T::Boolean,
29
+ default: T.untyped,
26
30
  inline_serializer: T.nilable(InlineSerializer)
27
31
  ).void
28
32
  end
29
- def initialize(name:, type:, required: true, inline_serializer: nil)
33
+ def initialize(name:, type:, optional: false, default: nil, inline_serializer: nil)
30
34
  @name = name
31
- @type = T.let(T::Utils.coerce(type), T::Types::Base)
32
- @required = required
35
+ # TODO: Guarentee type signature of the serializer will be valid
33
36
  @inline_serializer = inline_serializer
37
+
38
+ coerced_type = T::Utils.coerce(type)
39
+
40
+ if coerced_type.valid?(nil)
41
+ @required = T.let(false, T::Boolean)
42
+ @type = T.let(T.unsafe(coerced_type).unwrap_nilable, T::Types::Base)
43
+ else
44
+ @required = true
45
+ @type = coerced_type
46
+ end
47
+
48
+ if optional
49
+ @required = false
50
+ end
51
+
52
+ if !default.nil? && @type.valid?(default)
53
+ @default = T.let(default, T.untyped)
54
+ @required = false
55
+ elsif !default.nil? && @required
56
+ raise ArgumentError, "Given #{default} with class of #{default.class} for default, invalid with type #{@type}"
57
+ end
34
58
  end
35
59
 
36
60
  sig { params(other: Field).returns(T.nilable(T::Boolean)) }
@@ -38,6 +62,7 @@ module Typed
38
62
  name == other.name &&
39
63
  type == other.type &&
40
64
  required == other.required &&
65
+ default == other.default &&
41
66
  inline_serializer == other.inline_serializer
42
67
  end
43
68
 
data/lib/typed/schema.rb CHANGED
@@ -13,7 +13,7 @@ module Typed
13
13
  Typed::Schema.new(
14
14
  target: struct,
15
15
  fields: struct.props.map do |name, properties|
16
- Typed::Field.new(name: name, type: properties[:type], required: !properties[:fully_optional])
16
+ Typed::Field.new(name:, type: properties[:type_object], default: properties.fetch(:default, nil))
17
17
  end
18
18
  )
19
19
  end
@@ -34,7 +34,7 @@ module Typed
34
34
  target: target,
35
35
  fields: fields.map do |field|
36
36
  if field.name == field_name
37
- Field.new(name: field.name, type: field.type, required: field.required, inline_serializer: serializer)
37
+ Field.new(name: field.name, type: field.type, default: field.default, inline_serializer: serializer)
38
38
  else
39
39
  field
40
40
  end
@@ -33,12 +33,34 @@ module Typed
33
33
  sig { params(creation_params: Params).returns(DeserializeResult) }
34
34
  def deserialize_from_creation_params(creation_params)
35
35
  results = schema.fields.map do |field|
36
- value = creation_params[field.name]
36
+ value = creation_params.fetch(field.name, nil)
37
37
 
38
- if value.nil? || field.works_with?(value)
38
+ if value.nil? && !field.default.nil?
39
+ Success.new(Validations::ValidatedValue.new(name: field.name, value: field.default))
40
+ elsif value.nil? || field.works_with?(value)
39
41
  field.validate(value)
42
+ elsif field.type.class <= T::Types::Union
43
+ errors = []
44
+ validated_value = T.let(nil, T.nilable(Typed::Result[Typed::Validations::ValidatedValue, Typed::Validations::ValidationError]))
45
+
46
+ T.cast(field.type, T::Types::Union).types.each do |sub_type|
47
+ # the if clause took care of cases where value is nil so we can skip NilClass
48
+ next if sub_type.raw_type.equal?(NilClass)
49
+
50
+ coercion_result = Coercion.coerce(type: sub_type, value: value)
51
+
52
+ if coercion_result.success?
53
+ validated_value = field.validate(coercion_result.payload)
54
+
55
+ break
56
+ else
57
+ errors << Validations::ValidationError.new(coercion_result.error.message)
58
+ end
59
+ end
60
+
61
+ validated_value.nil? ? Failure.new(Validations::ValidationError.new(errors.map(&:message).join(", "))) : validated_value
40
62
  else
41
- coercion_result = Coercion.coerce(type: field.type, value: value)
63
+ coercion_result = Coercion.coerce(type: field.type, value:)
42
64
 
43
65
  if coercion_result.success?
44
66
  field.validate(coercion_result.payload)
@@ -49,7 +71,7 @@ module Typed
49
71
  end
50
72
 
51
73
  Validations::ValidationResults
52
- .new(results: results)
74
+ .new(results:)
53
75
  .combine
54
76
  .and_then do |validated_params|
55
77
  Success.new(schema.target.new(**validated_params))
@@ -10,11 +10,15 @@ module Typed
10
10
  sig { override.params(field: Field, value: Value).returns(ValidationResult) }
11
11
  def validate(field:, value:)
12
12
  if field.works_with?(value)
13
- Success.new(ValidatedValue.new(name: field.name, value: value))
13
+ Success.new(ValidatedValue.new(name: field.name, value:))
14
14
  elsif field.required? && value.nil?
15
15
  Failure.new(RequiredFieldError.new(field_name: field.name))
16
16
  elsif field.optional? && value.nil?
17
- Success.new(ValidatedValue.new(name: field.name, value: value))
17
+ if field.default.nil?
18
+ Success.new(ValidatedValue.new(name: field.name, value:))
19
+ else
20
+ Success.new(ValidatedValue.new(name: field.name, value: field.default))
21
+ end
18
22
  else
19
23
  Failure.new(TypeMismatchError.new(field_name: field.name, field_type: field.type, given_type: value.class))
20
24
  end
@@ -8,7 +8,7 @@
8
8
  # If the Builder::XChar module is not currently defined, fail on any
9
9
  # name clashes in standard library classes.
10
10
  #
11
- # source://builder//lib/builder/blankslate.rb#17
11
+ # source://builder//lib/builder/xmlbase.rb#4
12
12
  module Builder
13
13
  class << self
14
14
  # source://builder//lib/builder/xchar.rb#13
@@ -16,12 +16,9 @@ module Builder
16
16
  end
17
17
  end
18
18
 
19
- # source://builder//lib/builder/blankslate.rb#19
20
- Builder::BlankSlate = BasicObject
21
-
22
19
  # Generic error for builder
23
20
  #
24
- # source://builder//lib/builder/xmlbase.rb#9
21
+ # source://builder//lib/builder/xmlbase.rb#7
25
22
  class Builder::IllegalBlockError < ::RuntimeError; end
26
23
 
27
24
  # source://builder//lib/builder/xchar.rb#33
@@ -86,7 +83,7 @@ Builder::XChar::XML_PREDEFINED = T.let(T.unsafe(nil), Regexp)
86
83
  # XmlBase is a base class for building XML builders. See
87
84
  # Builder::XmlMarkup and Builder::XmlEvents for examples.
88
85
  #
89
- # source://builder//lib/builder/xmlbase.rb#13
86
+ # source://builder//lib/builder/xmlbase.rb#11
90
87
  class Builder::XmlBase < ::BasicObject
91
88
  # Create an XML markup builder.
92
89
  #
@@ -101,7 +98,7 @@ class Builder::XmlBase < ::BasicObject
101
98
  #
102
99
  # @return [XmlBase] a new instance of XmlBase
103
100
  #
104
- # source://builder//lib/builder/xmlbase.rb#29
101
+ # source://builder//lib/builder/xmlbase.rb#27
105
102
  def initialize(indent = T.unsafe(nil), initial = T.unsafe(nil), encoding = T.unsafe(nil)); end
106
103
 
107
104
  # Append text to the output target without escaping any markup.
@@ -118,19 +115,19 @@ class Builder::XmlBase < ::BasicObject
118
115
  # method/operation builders can use other builders as their
119
116
  # targets.
120
117
  #
121
- # source://builder//lib/builder/xmlbase.rb#118
118
+ # source://builder//lib/builder/xmlbase.rb#116
122
119
  def <<(text); end
123
120
 
124
121
  # @return [Boolean]
125
122
  #
126
- # source://builder//lib/builder/xmlbase.rb#35
123
+ # source://builder//lib/builder/xmlbase.rb#33
127
124
  def explicit_nil_handling?; end
128
125
 
129
126
  # Create XML markup based on the name of the method. This method
130
127
  # is never invoked directly, but is called for each markup method
131
128
  # in the markup block that isn't cached.
132
129
  #
133
- # source://builder//lib/builder/xmlbase.rb#92
130
+ # source://builder//lib/builder/xmlbase.rb#90
134
131
  def method_missing(sym, *args, &block); end
135
132
 
136
133
  # For some reason, nil? is sent to the XmlMarkup object. If nil?
@@ -142,14 +139,14 @@ class Builder::XmlBase < ::BasicObject
142
139
  #
143
140
  # @return [Boolean]
144
141
  #
145
- # source://builder//lib/builder/xmlbase.rb#128
142
+ # source://builder//lib/builder/xmlbase.rb#126
146
143
  def nil?; end
147
144
 
148
145
  # Create a tag named +sym+. Other than the first argument which
149
146
  # is the tag name, the arguments are the same as the tags
150
147
  # implemented via <tt>method_missing</tt>.
151
148
  #
152
- # source://builder//lib/builder/xmlbase.rb#42
149
+ # source://builder//lib/builder/xmlbase.rb#40
153
150
  def tag!(sym, *args, &block); end
154
151
 
155
152
  # Append text to the output target. Escape any markup. May be
@@ -157,24 +154,24 @@ class Builder::XmlBase < ::BasicObject
157
154
  #
158
155
  # builder.p { |b| b.br; b.text! "HI" } #=> <p><br/>HI</p>
159
156
  #
160
- # source://builder//lib/builder/xmlbase.rb#101
157
+ # source://builder//lib/builder/xmlbase.rb#99
161
158
  def text!(text); end
162
159
 
163
160
  private
164
161
 
165
- # source://builder//lib/builder/xmlbase.rb#136
162
+ # source://builder//lib/builder/xmlbase.rb#134
166
163
  def _escape(text); end
167
164
 
168
- # source://builder//lib/builder/xmlbase.rb#159
165
+ # source://builder//lib/builder/xmlbase.rb#157
169
166
  def _escape_attribute(text); end
170
167
 
171
- # source://builder//lib/builder/xmlbase.rb#169
168
+ # source://builder//lib/builder/xmlbase.rb#167
172
169
  def _indent; end
173
170
 
174
- # source://builder//lib/builder/xmlbase.rb#174
171
+ # source://builder//lib/builder/xmlbase.rb#172
175
172
  def _nested_structures(block); end
176
173
 
177
- # source://builder//lib/builder/xmlbase.rb#164
174
+ # source://builder//lib/builder/xmlbase.rb#162
178
175
  def _newline; end
179
176
 
180
177
  # If XmlBase.cache_method_calls = true, we dynamicly create the method
@@ -184,20 +181,20 @@ class Builder::XmlBase < ::BasicObject
184
181
  # method_missing is very slow, this speeds up document generation
185
182
  # significantly.
186
183
  #
187
- # source://builder//lib/builder/xmlbase.rb#187
184
+ # source://builder//lib/builder/xmlbase.rb#185
188
185
  def cache_method_call(sym); end
189
186
 
190
187
  class << self
191
188
  # Returns the value of attribute cache_method_calls.
192
189
  #
193
- # source://builder//lib/builder/xmlbase.rb#16
190
+ # source://builder//lib/builder/xmlbase.rb#14
194
191
  def cache_method_calls; end
195
192
 
196
193
  # Sets the attribute cache_method_calls
197
194
  #
198
195
  # @param value the value to set the attribute cache_method_calls to.
199
196
  #
200
- # source://builder//lib/builder/xmlbase.rb#16
197
+ # source://builder//lib/builder/xmlbase.rb#14
201
198
  def cache_method_calls=(_arg0); end
202
199
  end
203
200
  end
@@ -348,15 +345,15 @@ end
348
345
  #
349
346
  # Example:
350
347
  #
351
- # xm = Builder.new(:indent=>2)
348
+ # xm = Builder::XmlMarkup.new(:indent=>2)
352
349
  # # xm will produce nicely formatted and indented XML.
353
350
  #
354
- # xm = Builder.new(:indent=>2, :margin=>4)
351
+ # xm = Builder::XmlMarkup.new(:indent=>2, :margin=>4)
355
352
  # # xm will produce nicely formatted and indented XML with 2
356
353
  # # spaces per indent and an over all indentation level of 4.
357
354
  #
358
355
  # builder = Builder::XmlMarkup.new(:target=>$stdout, :indent=>2)
359
- # builder.name { |b| b.first("Jim"); b.last("Weirich) }
356
+ # builder.name { |b| b.first("Jim"); b.last("Weirich") }
360
357
  # # prints:
361
358
  # # <name>
362
359
  # # <first>Jim</first>
@@ -385,7 +382,7 @@ end
385
382
  #
386
383
  # xml_builder = Builder::XmlMarkup.new
387
384
  # xml_builder.div { |xml|
388
- # xml.stong("text")
385
+ # xml.strong("text")
389
386
  # }
390
387
  #
391
388
  # source://builder//lib/builder/xmlmarkup.rb#161