representable 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.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +17 -10
  3. data/.github/workflows/ci_jruby.yml +21 -0
  4. data/.github/workflows/ci_truffleruby.yml +19 -0
  5. data/CHANGES.md +5 -0
  6. data/Gemfile +1 -1
  7. data/README.md +0 -1
  8. data/lib/representable/hash/binding.rb +1 -0
  9. data/lib/representable/json.rb +14 -2
  10. data/lib/representable/version.rb +1 -1
  11. data/lib/representable/xml/binding.rb +0 -7
  12. data/lib/representable/xml.rb +7 -0
  13. data/representable.gemspec +1 -3
  14. data/test/as_test.rb +8 -13
  15. data/test/benchmarking.rb +20 -25
  16. data/test/binding_test.rb +13 -5
  17. data/test/cached_test.rb +55 -35
  18. data/test/class_test.rb +46 -33
  19. data/test/coercion_test.rb +29 -19
  20. data/test/config/inherit_test.rb +12 -17
  21. data/test/config_test.rb +5 -7
  22. data/test/decorator_scope_test.rb +13 -11
  23. data/test/decorator_test.rb +11 -11
  24. data/test/default_test.rb +2 -2
  25. data/test/defaults_options_test.rb +37 -9
  26. data/test/definition_test.rb +10 -12
  27. data/test/examples/example.rb +43 -38
  28. data/test/examples/object.rb +7 -6
  29. data/test/exec_context_test.rb +18 -23
  30. data/test/features_test.rb +29 -10
  31. data/test/filter_test.rb +29 -20
  32. data/test/for_collection_test.rb +12 -15
  33. data/test/generic_test.rb +15 -22
  34. data/test/getter_setter_test.rb +11 -6
  35. data/test/hash_bindings_test.rb +21 -12
  36. data/test/hash_test.rb +53 -38
  37. data/test/heritage_test.rb +0 -1
  38. data/test/if_test.rb +25 -21
  39. data/test/include_exclude_test.rb +24 -16
  40. data/test/inherit_test.rb +114 -27
  41. data/test/inline_test.rb +42 -33
  42. data/test/instance_test.rb +151 -109
  43. data/test/is_representable_test.rb +19 -17
  44. data/test/json_test.rb +48 -46
  45. data/test/lonely_test.rb +35 -33
  46. data/test/nested_test.rb +16 -19
  47. data/test/object_test.rb +6 -6
  48. data/test/option_test.rb +10 -8
  49. data/test/parse_pipeline_test.rb +21 -15
  50. data/test/pipeline_test.rb +144 -108
  51. data/test/populator_test.rb +18 -15
  52. data/test/prepare_test.rb +15 -17
  53. data/test/private_options_test.rb +3 -2
  54. data/test/reader_writer_test.rb +4 -4
  55. data/test/realistic_benchmark.rb +21 -27
  56. data/test/render_nil_test.rb +1 -1
  57. data/test/represent_test.rb +14 -18
  58. data/test/representable_test.rb +86 -53
  59. data/test/schema_test.rb +51 -21
  60. data/test/serialize_deserialize_test.rb +14 -14
  61. data/test/skip_test.rb +39 -28
  62. data/test/stringify_hash_test.rb +29 -31
  63. data/test/test_helper.rb +31 -25
  64. data/test/test_helper_test.rb +7 -7
  65. data/test/uncategorized_test.rb +20 -15
  66. data/test/user_options_test.rb +12 -3
  67. data/test/wrap_test.rb +27 -17
  68. data/test/xml_assertions.rb +29 -0
  69. data/test/xml_bindings_test.rb +5 -8
  70. data/test/xml_namespace_test.rb +46 -39
  71. data/test/xml_test.rb +109 -88
  72. data/test/yaml_test.rb +73 -51
  73. metadata +7 -32
@@ -35,31 +35,31 @@ require "test_helper"
35
35
  # </lib:book>
36
36
  # </lib:library>
37
37
 
38
- # Theoretically, every property (scalar) needs/should have a namespace.
39
- # property :name, namespace: "http://eric.van-der-vlist.com/ns/person"
40
- # # This is implicit if contained:
41
- # class Person < Decorator
42
- # namespace: "http://eric.van-der-vlist.com/ns/person"
43
- # property :name #, namespace: "http://eric.van-der-vlist.com/ns/person"
44
- # end
45
- # class Library
46
- # namespace "http://eric.van-der-vlist.com/ns/library"
47
-
48
- # namespace_def lib: "http://eric.van-der-vlist.com/ns/library"
49
- # namespace_def person: "http://eric.van-der-vlist.com/ns/person"
50
- # # namespace_def person: Person
51
-
52
- # property :person, decorator: Person
53
- # end
38
+ # Theoretically, every property (scalar) needs/should have a namespace.
39
+ # property :name, namespace: "http://eric.van-der-vlist.com/ns/person"
40
+ # # This is implicit if contained:
41
+ # class Person < Decorator
42
+ # namespace: "http://eric.van-der-vlist.com/ns/person"
43
+ # property :name #, namespace: "http://eric.van-der-vlist.com/ns/person"
44
+ # end
45
+ # class Library
46
+ # namespace "http://eric.van-der-vlist.com/ns/library"
47
+
48
+ # namespace_def lib: "http://eric.van-der-vlist.com/ns/library"
49
+ # namespace_def person: "http://eric.van-der-vlist.com/ns/person"
50
+ # # namespace_def person: Person
51
+
52
+ # property :person, decorator: Person
53
+ # end
54
54
  class NamespaceXMLTest < Minitest::Spec
55
55
  module Model
56
56
  Library = Struct.new(:book)
57
57
  Book = Struct.new(:id, :isbn)
58
58
  end
59
59
 
60
- let (:book) { Model::Book.new(1, 666) }
60
+ let(:book) { Model::Book.new(1, 666) }
61
61
 
62
- #:simple-class
62
+ # :simple-class
63
63
  class Library < Representable::Decorator
64
64
  feature Representable::XML
65
65
  feature Representable::XML::Namespace
@@ -69,24 +69,24 @@ class NamespaceXMLTest < Minitest::Spec
69
69
  property :book do
70
70
  namespace "http://eric.van-der-vlist.com/ns/library"
71
71
 
72
- property :id, attribute: true
72
+ property :id, attribute: true
73
73
  property :isbn
74
74
  end
75
75
  end
76
- #:simple-class end
77
-
76
+ # :simple-class end
78
77
 
79
78
  # default namespace for library
80
79
  it "what" do
81
- Library.new(Model::Library.new(book)).to_xml.must_xml(
80
+ assert_equal_xml(
81
+ Library.new(Model::Library.new(book)).to_xml,
82
82
 
83
- #:simple-xml
84
- %{<library xmlns="http://eric.van-der-vlist.com/ns/library">
83
+ # :simple-xml
84
+ %{<library xmlns="http://eric.van-der-vlist.com/ns/library">
85
85
  <book id="1">
86
86
  <isbn>666</isbn>
87
87
  </book>
88
88
  </library>}
89
- #:simple-xml end
89
+ # :simple-xml end
90
90
  )
91
91
  end
92
92
  end
@@ -98,9 +98,9 @@ class Namespace2XMLTest < Minitest::Spec
98
98
  Character = Struct.new(:name, :born, :qualification)
99
99
  end
100
100
 
101
- let (:book) { Model::Book.new(1, 666, Model::Character.new("Fowler"), [Model::Character.new("Frau Java", 1991, "typed")]) }
101
+ let(:book) { Model::Book.new(1, 666, Model::Character.new("Fowler"), [Model::Character.new("Frau Java", 1991, "typed")]) }
102
102
 
103
- #:map-class
103
+ # :map-class
104
104
  class Library < Representable::Decorator
105
105
  feature Representable::XML
106
106
  feature Representable::XML::Namespace
@@ -112,7 +112,7 @@ class Namespace2XMLTest < Minitest::Spec
112
112
  property :book, class: Model::Book do
113
113
  namespace "http://eric.van-der-vlist.com/ns/library"
114
114
 
115
- property :id, attribute: true
115
+ property :id, attribute: true
116
116
  property :isbn
117
117
 
118
118
  property :author, class: Model::Character do
@@ -132,12 +132,16 @@ class Namespace2XMLTest < Minitest::Spec
132
132
  end
133
133
  end
134
134
  end
135
- #:map-class end
135
+ # :map-class end
136
136
 
137
137
  it "renders" do
138
- Library.new(Model::Library.new(book)).to_xml.must_xml(
139
- #:map-xml
140
- %{<lib:library xmlns:lib=\"http://eric.van-der-vlist.com/ns/library\" xmlns:hr=\"http://eric.van-der-vlist.com/ns/person\">
138
+ skip "JRuby's DOM raises NAMESPACE_ERR for prefixed elements" if RUBY_ENGINE == "jruby"
139
+
140
+ assert_equal_xml(
141
+ Library.new(Model::Library.new(book)).to_xml,
142
+
143
+ # :map-xml
144
+ %{<lib:library xmlns:lib=\"http://eric.van-der-vlist.com/ns/library\" xmlns:hr=\"http://eric.van-der-vlist.com/ns/person\">
141
145
  <lib:book id=\"1\">
142
146
  <lib:isbn>666</lib:isbn>
143
147
  <hr:author>
@@ -150,14 +154,17 @@ class Namespace2XMLTest < Minitest::Spec
150
154
  </lib:character>
151
155
  </lib:book>
152
156
  </lib:library>}
153
- #:map-xml end
157
+ # :map-xml end
154
158
  )
155
159
  end
156
160
 
157
161
  it "parses" do
158
- lib = Model::Library.new
159
- #:parse-call
160
- Library.new(lib).from_xml(%{<lib:library
162
+ skip "JRuby's DOM recovers from the malformed tags below differently" if RUBY_ENGINE == "jruby"
163
+
164
+ lib = Model::Library.new
165
+ # :parse-call
166
+ Library.new(lib).from_xml(
167
+ %{<lib:library
161
168
  xmlns:lib="http://eric.van-der-vlist.com/ns/library"
162
169
  xmlns:hr="http://eric.van-der-vlist.com/ns/person">
163
170
  <lib:book id="1">
@@ -174,13 +181,13 @@ class Namespace2XMLTest < Minitest::Spec
174
181
  </lib:character>
175
182
  </lib:book>
176
183
  </lib:library>}
177
- #:parse-call end
184
+ # :parse-call end
178
185
  )
179
186
 
180
187
  _(lib.book.inspect).must_equal %{#<struct Namespace2XMLTest::Model::Book id=\"1\", isbn=\"666\", author=#<struct Namespace2XMLTest::Model::Character name=\"Fowler\", born=nil, qualification=nil>, character=[#<struct Namespace2XMLTest::Model::Character name=\"Frau Java\", born=\"1991\", qualification=\"typed\">]>}
181
188
 
182
- #:parse-res
189
+ # :parse-res
183
190
  lib.book.character[0].name #=> "Frau Java"
184
- #:parse-res end
191
+ # :parse-res end
185
192
  end
186
193
  end