representable 3.0.4 → 3.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ci.yml +17 -0
  3. data/CHANGES.md +10 -0
  4. data/Gemfile +4 -7
  5. data/LICENSE +1 -1
  6. data/README.md +4 -3
  7. data/Rakefile +1 -6
  8. data/lib/representable.rb +18 -25
  9. data/lib/representable/binding.rb +32 -12
  10. data/lib/representable/cached.rb +1 -1
  11. data/lib/representable/coercion.rb +8 -6
  12. data/lib/representable/config.rb +8 -3
  13. data/lib/representable/debug.rb +23 -15
  14. data/lib/representable/declarative.rb +8 -3
  15. data/lib/representable/decorator.rb +1 -1
  16. data/lib/representable/definition.rb +7 -2
  17. data/lib/representable/deserializer.rb +4 -3
  18. data/lib/representable/for_collection.rb +1 -1
  19. data/lib/representable/hash.rb +6 -2
  20. data/lib/representable/hash/allow_symbols.rb +9 -11
  21. data/lib/representable/hash/binding.rb +1 -0
  22. data/lib/representable/hash/collection.rb +4 -2
  23. data/lib/representable/hash_methods.rb +3 -2
  24. data/lib/representable/insert.rb +1 -1
  25. data/lib/representable/json.rb +5 -7
  26. data/lib/representable/json/collection.rb +3 -0
  27. data/lib/representable/json/hash.rb +1 -0
  28. data/lib/representable/object.rb +1 -1
  29. data/lib/representable/object/binding.rb +5 -1
  30. data/lib/representable/option.rb +19 -0
  31. data/lib/representable/pipeline.rb +3 -2
  32. data/lib/representable/pipeline_factories.rb +4 -2
  33. data/lib/representable/populator.rb +1 -1
  34. data/lib/representable/represent.rb +1 -0
  35. data/lib/representable/serializer.rb +2 -1
  36. data/lib/representable/version.rb +1 -1
  37. data/lib/representable/virtus_coercion.rb +38 -0
  38. data/lib/representable/xml.rb +7 -10
  39. data/lib/representable/xml/binding.rb +2 -3
  40. data/lib/representable/yaml.rb +3 -3
  41. data/lib/representable/yaml/binding.rb +1 -0
  42. data/representable.gemspec +3 -3
  43. data/test/as_test.rb +4 -4
  44. data/test/binding_test.rb +10 -10
  45. data/test/cached_test.rb +19 -19
  46. data/test/class_test.rb +7 -7
  47. data/test/coercion_test.rb +33 -22
  48. data/test/config/inherit_test.rb +14 -14
  49. data/test/config_test.rb +18 -18
  50. data/test/decorator_scope_test.rb +3 -3
  51. data/test/decorator_test.rb +17 -17
  52. data/test/default_test.rb +7 -7
  53. data/test/definition_test.rb +32 -32
  54. data/test/{example.rb → examples/example.rb} +0 -0
  55. data/test/exec_context_test.rb +6 -6
  56. data/test/features_test.rb +3 -3
  57. data/test/filter_test.rb +6 -6
  58. data/test/for_collection_test.rb +2 -2
  59. data/test/generic_test.rb +3 -3
  60. data/test/getter_setter_test.rb +5 -5
  61. data/test/hash_test.rb +19 -19
  62. data/test/heritage_test.rb +4 -4
  63. data/test/if_test.rb +6 -6
  64. data/test/include_exclude_test.rb +12 -12
  65. data/test/inherit_test.rb +15 -15
  66. data/test/inline_test.rb +11 -11
  67. data/test/instance_test.rb +29 -29
  68. data/test/is_representable_test.rb +10 -10
  69. data/test/json_test.rb +7 -7
  70. data/test/lonely_test.rb +16 -16
  71. data/test/nested_test.rb +7 -7
  72. data/test/object_test.rb +7 -7
  73. data/test/option_test.rb +36 -0
  74. data/test/parse_pipeline_test.rb +3 -3
  75. data/test/pipeline_test.rb +43 -43
  76. data/test/populator_test.rb +15 -15
  77. data/test/prepare_test.rb +2 -2
  78. data/test/private_options_test.rb +2 -2
  79. data/test/reader_writer_test.rb +2 -2
  80. data/test/render_nil_test.rb +2 -2
  81. data/test/represent_test.rb +4 -4
  82. data/test/representable_test.rb +27 -27
  83. data/test/schema_test.rb +5 -5
  84. data/test/serialize_deserialize_test.rb +2 -2
  85. data/test/skip_test.rb +10 -10
  86. data/test/stringify_hash_test.rb +3 -3
  87. data/test/test_helper.rb +4 -2
  88. data/test/uncategorized_test.rb +10 -10
  89. data/test/user_options_test.rb +4 -4
  90. data/test/virtus_coercion_test.rb +52 -0
  91. data/test/wrap_test.rb +11 -11
  92. data/test/xml_namespace_test.rb +1 -1
  93. data/test/xml_test.rb +6 -6
  94. data/test/yaml_test.rb +20 -20
  95. metadata +81 -15
  96. data/.travis.yml +0 -16
  97. data/lib/representable/autoload.rb +0 -14
  98. data/test/mongoid_test.rb +0 -31
@@ -1,10 +1,8 @@
1
1
  require 'representable/binding'
2
- require 'representable/hash/binding.rb'
3
2
 
4
3
  module Representable
5
4
  module XML
6
- module_function
7
- def Node(document, name, attributes={})
5
+ module_function def Node(document, name, attributes={})
8
6
  node = Nokogiri::XML::Node.new(name.to_s, document) # Java::OrgW3cDom::DOMException: NAMESPACE_ERR: An attempt is made to create or change an object in a way which is incorrect with regard to namespaces.
9
7
 
10
8
  attributes.each { |k, v| node[k] = v } # TODO: benchmark.
@@ -18,6 +16,7 @@ module Representable
18
16
  return AttributeHash.new(definition) if definition.hash? and definition[:use_attributes]
19
17
  return Attribute.new(definition) if definition[:attribute]
20
18
  return Content.new(definition) if definition[:content]
19
+
21
20
  new(definition)
22
21
  end
23
22
 
@@ -1,9 +1,9 @@
1
1
  require 'psych'
2
- require 'representable/hash'
3
- require 'representable/yaml/binding'
2
+ require 'representable'
4
3
 
5
4
  module Representable
6
5
  module YAML
6
+ autoload :Binding, 'representable/yaml/binding'
7
7
  include Hash
8
8
 
9
9
  def self.included(base)
@@ -40,7 +40,7 @@ module Representable
40
40
  stream.to_yaml
41
41
  end
42
42
 
43
- alias_method :render, :to_yaml
43
+ alias_method :render, :to_yaml
44
44
  alias_method :parse, :from_yaml
45
45
  end
46
46
  end
@@ -5,6 +5,7 @@ module Representable
5
5
  class Binding < Representable::Hash::Binding
6
6
  def self.build_for(definition)
7
7
  return Collection.new(definition) if definition.array?
8
+
8
9
  new(definition)
9
10
  end
10
11
 
@@ -19,16 +19,16 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
  spec.license = "MIT"
21
21
 
22
- spec.required_ruby_version = '>= 1.9.3'
22
+ spec.required_ruby_version = '>= 2.4.0'
23
23
 
24
24
  spec.add_dependency "uber", "< 0.2.0"
25
25
  spec.add_dependency "declarative", "< 0.1.0"
26
- spec.add_dependency "declarative-option", "< 0.2.0"
26
+ spec.add_dependency "trailblazer-option", ">= 0.1.1", "< 0.2.0"
27
27
 
28
28
  spec.add_development_dependency "rake"
29
29
  spec.add_development_dependency "test_xml", ">= 0.1.6"
30
30
  spec.add_development_dependency "minitest"
31
31
  spec.add_development_dependency "virtus"
32
- spec.add_development_dependency "multi_json"
32
+ spec.add_development_dependency "dry-types"
33
33
  spec.add_development_dependency "ruby-prof" if RUBY_ENGINE == "ruby" # mri
34
34
  end
data/test/as_test.rb CHANGED
@@ -17,7 +17,7 @@ class AsTest < MiniTest::Spec
17
17
  end
18
18
 
19
19
  it { render(song).must_equal_document output }
20
- it { parse(song, input).name.must_equal "Wie Es Geht" }
20
+ it { _(parse(song, input).name).must_equal "Wie Es Geht" }
21
21
  end
22
22
 
23
23
 
@@ -27,7 +27,7 @@ class AsTest < MiniTest::Spec
27
27
  end
28
28
 
29
29
  it { render(song).must_equal_document({"Song" => "Revolution"}) }
30
- it { parse(song, {"Song" => "Wie Es Geht"}).name.must_equal "Wie Es Geht" }
30
+ it { _(parse(song, {"Song" => "Wie Es Geht"}).name).must_equal "Wie Es Geht" }
31
31
  end
32
32
 
33
33
 
@@ -37,7 +37,7 @@ class AsTest < MiniTest::Spec
37
37
  end
38
38
 
39
39
  it { render(song, user_options:{volume: 1}).must_equal_document({"{:volume=>1}" => "Revolution"}) }
40
- it { parse(song, {"{:volume=>1}" => "Wie Es Geht"}, user_options: {volume: 1}).name.must_equal "Wie Es Geht" }
40
+ it { _(parse(song, {"{:volume=>1}" => "Wie Es Geht"}, user_options: {volume: 1}).name).must_equal "Wie Es Geht" }
41
41
  end
42
42
  end
43
43
  end
@@ -60,6 +60,6 @@ class AsXmlTest < MiniTest::Spec
60
60
 
61
61
  it do
62
62
  skip
63
- representer.new(Album.new(Band.new("Offspring"))).to_xml.must_equal ""
63
+ _(representer.new(Album.new(Band.new("Offspring"))).to_xml).must_equal ""
64
64
  end
65
65
  end
data/test/binding_test.rb CHANGED
@@ -8,16 +8,16 @@ class BindingTest < MiniTest::Spec
8
8
  let(:binding) { Binding.new(render_nil_definition) }
9
9
 
10
10
  # don't skip when present.
11
- it { binding.skipable_empty_value?("Disconnect, Disconnect").must_equal false }
11
+ it { _(binding.skipable_empty_value?("Disconnect, Disconnect")).must_equal false }
12
12
 
13
13
  # don't skip when it's nil and render_nil: true
14
- it { binding.skipable_empty_value?(nil).must_equal false }
14
+ it { _(binding.skipable_empty_value?(nil)).must_equal false }
15
15
 
16
16
  # skip when nil and :render_nil undefined.
17
- it { Binding.new(Representable::Definition.new(:song)).skipable_empty_value?(nil).must_equal true }
17
+ it { _(Binding.new(Representable::Definition.new(:song)).skipable_empty_value?(nil)).must_equal true }
18
18
 
19
19
  # don't skip when nil and :render_nil undefined.
20
- it { Binding.new(Representable::Definition.new(:song)).skipable_empty_value?("Fatal Flu").must_equal false }
20
+ it { _(Binding.new(Representable::Definition.new(:song)).skipable_empty_value?("Fatal Flu")).must_equal false }
21
21
  end
22
22
 
23
23
 
@@ -26,21 +26,21 @@ class BindingTest < MiniTest::Spec
26
26
  let(:binding) { Binding.new(definition) }
27
27
 
28
28
  # return value when value present.
29
- it { binding.default_for("Black And Blue").must_equal "Black And Blue" }
29
+ it { _(binding.default_for("Black And Blue")).must_equal "Black And Blue" }
30
30
 
31
31
  # return false when value false.
32
- it { binding.default_for(false).must_equal false }
32
+ it { _(binding.default_for(false)).must_equal false }
33
33
 
34
34
  # return default when value nil.
35
- it { binding.default_for(nil).must_equal "Insider" }
35
+ it { _(binding.default_for(nil)).must_equal "Insider" }
36
36
 
37
37
  # return nil when value nil and render_nil: true.
38
- it { Binding.new(render_nil_definition).default_for(nil).must_be_nil }
38
+ it { _(Binding.new(render_nil_definition).default_for(nil)).must_be_nil }
39
39
 
40
40
  # return nil when value nil and render_nil: true, even when :default is set" do
41
- it { Binding.new(Representable::Definition.new(:song, :render_nil => true, :default => "The Quest")).default_for(nil).must_be_nil }
41
+ it { _(Binding.new(Representable::Definition.new(:song, :render_nil => true, :default => "The Quest")).default_for(nil)).must_be_nil }
42
42
 
43
43
  # return nil if no :default
44
- it { Binding.new(Representable::Definition.new(:song)).default_for(nil).must_be_nil }
44
+ it { _(Binding.new(Representable::Definition.new(:song)).default_for(nil)).must_be_nil }
45
45
  end
46
46
  end
data/test/cached_test.rb CHANGED
@@ -64,7 +64,7 @@ class CachedTest < MiniTest::Spec
64
64
  # album2 = Model::Album.new("Louder And Even More Dangerous", [song2, song])
65
65
 
66
66
  # makes sure options are passed correctly.
67
- representer.to_hash(user_options: {volume: 9}).must_equal({"name"=>"Live And Dangerous",
67
+ _(representer.to_hash(user_options: {volume: 9})).must_equal({"name"=>"Live And Dangerous",
68
68
  "songs"=>[{"title"=>"Jailbreak:{:volume=>9}"}, {"title"=>"Southbound:{:volume=>9}"}, {"title"=>"Emerald:{:volume=>9}"}]}) # called in Deserializer/Serializer
69
69
 
70
70
  # representer becomes reusable as it is stateless.
@@ -81,22 +81,22 @@ class CachedTest < MiniTest::Spec
81
81
  data = Profiler.profile { representer.to_hash }
82
82
 
83
83
  # 3 songs get decorated.
84
- data.must_match(/3\s*Representable::Function::Decorate#call/m)
84
+ _(data).must_match(/3\s*Representable::Function::Decorate#call/m)
85
85
  # These weird Regexp bellow are a quick workaround to accomodate
86
86
  # the different profiler result formats.
87
87
  # - "3 <Class::Representable::Decorator>#prepare" -> At MRI Ruby
88
88
  # - "3 Representable::Decorator.prepare" -> At JRuby
89
89
 
90
90
  # 3 nested decorator is instantiated for 3 Songs, though.
91
- data.must_match(/3\s*(<Class::)?Representable::Decorator\>?[\#.]prepare/m)
91
+ _(data).must_match(/3\s*(<Class::)?Representable::Decorator\>?[\#.]prepare/m)
92
92
  # no Binding is instantiated at runtime.
93
- data.wont_match "Representable::Binding#initialize"
93
+ _(data).wont_match "Representable::Binding#initialize"
94
94
  # 2 mappers for Album, Song
95
95
  # data.must_match "2 Representable::Mapper::Methods#initialize"
96
96
  # title, songs, 3x title, composer
97
- data.must_match(/8\s*Representable::Binding[#\.]render_pipeline/m)
98
- data.wont_match "render_functions"
99
- data.wont_match "Representable::Binding::Factories#render_functions"
97
+ _(data).must_match(/8\s*Representable::Binding[#\.]render_pipeline/m)
98
+ _(data).wont_match "render_functions"
99
+ _(data).wont_match "Representable::Binding::Factories#render_functions"
100
100
  end
101
101
  end
102
102
 
@@ -118,14 +118,14 @@ class CachedTest < MiniTest::Spec
118
118
 
119
119
  AlbumRepresenter.new(album).from_hash(album_hash)
120
120
 
121
- album.songs.size.must_equal 3
122
- album.name.must_equal "Louder And Even More Dangerous"
123
- album.songs[0].title.must_equal "Southbound"
124
- album.songs[0].composer.name.must_equal "Lynott"
125
- album.songs[1].title.must_equal "Jailbreak"
126
- album.songs[1].composer.name.must_equal "Phil Lynott"
127
- album.songs[2].title.must_equal "Emerald"
128
- album.songs[2].composer.must_be_nil
121
+ _(album.songs.size).must_equal 3
122
+ _(album.name).must_equal "Louder And Even More Dangerous"
123
+ _(album.songs[0].title).must_equal "Southbound"
124
+ _(album.songs[0].composer.name).must_equal "Lynott"
125
+ _(album.songs[1].title).must_equal "Jailbreak"
126
+ _(album.songs[1].composer.name).must_equal "Phil Lynott"
127
+ _(album.songs[2].title).must_equal "Emerald"
128
+ _(album.songs[2].composer).must_be_nil
129
129
 
130
130
  # TODO: test options.
131
131
  end
@@ -139,12 +139,12 @@ class CachedTest < MiniTest::Spec
139
139
  # only 2 nested decorators are instantiated, Song, and Artist.
140
140
  # Didn't like the regexp?
141
141
  # MRI and JRuby has different output formats. See note above.
142
- data.must_match(/5\s*(<Class::)?Representable::Decorator>?[#\.]prepare/)
142
+ _(data).must_match(/5\s*(<Class::)?Representable::Decorator>?[#\.]prepare/)
143
143
  # a total of 5 properties in the object graph.
144
- data.wont_match "Representable::Binding#initialize"
144
+ _(data).wont_match "Representable::Binding#initialize"
145
145
 
146
- data.wont_match "parse_functions" # no pipeline creation.
147
- data.must_match(/10\s*Representable::Binding[#\.]parse_pipeline/)
146
+ _(data).wont_match "parse_functions" # no pipeline creation.
147
+ _(data).must_match(/10\s*Representable::Binding[#\.]parse_pipeline/)
148
148
  # three mappers for Album, Song, composer
149
149
  # data.must_match "3 Representable::Mapper::Methods#initialize"
150
150
  # # 6 deserializers as the songs collection uses 2.
data/test/class_test.rb CHANGED
@@ -20,8 +20,8 @@ class ClassTest < BaseTest
20
20
 
21
21
  it "creates fresh instance and doesn't extend" do
22
22
  song = representer.prepare(OpenStruct.new).from_hash({"song" => {"__name__" => "Captured"}}).song
23
- song.must_be_instance_of RepresentingSong
24
- song.name.must_equal "Captured"
23
+ _(song).must_be_instance_of RepresentingSong
24
+ _(song.name).must_equal "Captured"
25
25
  end
26
26
  end
27
27
 
@@ -33,8 +33,8 @@ class ClassTest < BaseTest
33
33
 
34
34
  it "creates fresh instance and doesn't extend" do
35
35
  song = representer.prepare(OpenStruct.new).from_hash({"song" => {"__name__" => "Captured"}}).song
36
- song.must_be_instance_of RepresentingSong
37
- song.name.must_equal "Captured"
36
+ _(song).must_be_instance_of RepresentingSong
37
+ _(song.name).must_equal "Captured"
38
38
  end
39
39
  end
40
40
 
@@ -69,7 +69,7 @@ class ClassTest < BaseTest
69
69
  property :song, :class => lambda { |options| _klass.args=([options[:fragment],options[:user_options]]); _klass }
70
70
  end
71
71
 
72
- it { representer.prepare(OpenStruct.new).from_hash({"song" => {"name" => "Captured"}}, user_options: {volume: true}).song.class.args.
72
+ it { _(representer.prepare(OpenStruct.new).from_hash({"song" => {"name" => "Captured"}}, user_options: {volume: true}).song.class.args).
73
73
  must_equal([{"name"=>"Captured"}, {:volume=>true}]) }
74
74
  end
75
75
 
@@ -90,7 +90,7 @@ class ClassTest < BaseTest
90
90
  collection :songs, :class => lambda { |options| _klass.args=([options[:fragment],options[:index],options[:user_options]]); _klass }
91
91
  end
92
92
 
93
- it { representer.prepare(OpenStruct.new).from_hash({"songs" => [{"name" => "Captured"}]}, user_options: {volume: true}).songs.first.class.args.
93
+ it { _(representer.prepare(OpenStruct.new).from_hash({"songs" => [{"name" => "Captured"}]}, user_options: {volume: true}).songs.first.class.args).
94
94
  must_equal([{"name"=>"Captured"}, 0, {:volume=>true}]) }
95
95
  end
96
96
 
@@ -109,7 +109,7 @@ class ClassTest < BaseTest
109
109
  end
110
110
 
111
111
  it "allows returning arbitrary objects in #from_hash" do
112
- representer.prepare(OpenStruct.new).from_hash({"song" => 1}).song.must_equal [1,2,3,4]
112
+ _(representer.prepare(OpenStruct.new).from_hash({"song" => 1}).song).must_equal [1,2,3,4]
113
113
  end
114
114
  end
115
115
  end
@@ -1,52 +1,63 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
  require 'representable/coercion'
3
5
 
4
- class VirtusCoercionTest < MiniTest::Spec
6
+ class CoercionTest < MiniTest::Spec
5
7
  representer! do
6
8
  include Representable::Coercion
7
9
 
8
10
  property :title # no coercion.
9
- property :length, :type => Float
11
+ property :length, type: Representable::Coercion::Types::Params::Float
10
12
 
11
- property :band, :class => OpenStruct do
12
- property :founded, :type => Integer
13
+ property :band, class: OpenStruct do
14
+ property :founded, type: Representable::Coercion::Types::Params::Integer
13
15
  end
14
16
 
15
- collection :songs, :class => OpenStruct do
16
- property :ok, :type => Virtus::Attribute::Boolean
17
+ collection :songs, class: OpenStruct do
18
+ property :ok, type: Representable::Coercion::Types::Params::Bool
17
19
  end
18
20
  end
19
21
 
20
- let(:album) { OpenStruct.new(:title => "Dire Straits", :length => 41.34,
21
- :band => OpenStruct.new(:founded => "1977"),
22
- :songs => [OpenStruct.new(:ok => 1), OpenStruct.new(:ok => 0)]) }
22
+ let(:album) do
23
+ OpenStruct.new(title: 'Dire Straits', length: 41.34,
24
+ band: OpenStruct.new(founded: '1977'),
25
+ songs: [OpenStruct.new(ok: 1), OpenStruct.new(ok: 0)])
26
+ end
23
27
 
24
- it { album.extend(representer).to_hash.must_equal({"title"=>"Dire Straits", "length"=>41.34, "band"=>{"founded"=>1977}, "songs"=>[{"ok"=>true}, {"ok"=>false}]}) }
28
+ it do
29
+ _(album.extend(representer).to_hash).must_equal({ 'title' => 'Dire Straits',
30
+ 'length' => 41.34,
31
+ 'band' => { 'founded' => 1977 },
32
+ 'songs' => [{ 'ok' => true }, { 'ok' => false }] })
33
+ end
25
34
 
26
35
  it {
27
36
  album = OpenStruct.new
28
37
  album.extend(representer)
29
- album.from_hash({"title"=>"Dire Straits", "length"=>"41.34", "band"=>{"founded"=>"1977"}, "songs"=>[{"ok"=>1}, {"ok"=>0}]})
38
+ album.from_hash({ 'title' => 'Dire Straits',
39
+ 'length' => '41.34',
40
+ 'band' => { 'founded' => '1977' },
41
+ 'songs' => [{ 'ok' => 1 }, { 'ok' => 0 }] })
30
42
 
31
43
  # it
32
- album.length.must_equal 41.34
33
- album.band.founded.must_equal 1977
34
- album.songs[0].ok.must_equal true
44
+ _(album.length).must_equal 41.34
45
+ _(album.band.founded).must_equal 1977
46
+ _(album.songs[0].ok).must_equal true
35
47
  }
36
48
 
37
-
38
- describe "with user :parse_filter and :render_filter" do
49
+ describe 'with user :parse_filter and :render_filter' do
39
50
  representer! do
40
51
  include Representable::Coercion
41
52
 
42
- property :length, :type => Float,
43
- :parse_filter => lambda { |input, options| "#{input}.1" }, # happens BEFORE coercer.
44
- :render_filter => lambda { |fragment,*| "#{fragment}.1" }
53
+ property :length, type: Representable::Coercion::Types::Params::Float,
54
+ parse_filter: ->(input, _options) { "#{input}.1" }, # happens BEFORE coercer.
55
+ render_filter: ->(fragment, *) { "#{fragment}.1" }
45
56
  end
46
57
 
47
58
  # user's :parse_filter(s) are run before coercion.
48
- it { OpenStruct.new.extend(representer).from_hash("length"=>"1").length.must_equal 1.1 }
59
+ it { _(OpenStruct.new.extend(representer).from_hash('length' => '1').length).must_equal 1.1 }
49
60
  # user's :render_filter(s) are run before coercion.
50
- it { OpenStruct.new(:length=>1).extend(representer).to_hash.must_equal({"length" => 1.1}) }
61
+ it { _(OpenStruct.new(length: 1).extend(representer).to_hash).must_equal({ 'length' => 1.1 }) }
51
62
  end
52
- end
63
+ end
@@ -9,8 +9,8 @@ class ConfigInheritTest < MiniTest::Spec
9
9
 
10
10
  child_def.merge!(:alias => property)
11
11
 
12
- child_def[:alias].wont_equal parent_def[:alias]
13
- child_def.object_id.wont_equal parent_def.object_id
12
+ _(child_def[:alias]).wont_equal parent_def[:alias]
13
+ _(child_def.object_id).wont_equal parent_def.object_id
14
14
  end
15
15
  # class Object
16
16
 
@@ -30,7 +30,7 @@ class ConfigInheritTest < MiniTest::Spec
30
30
  end
31
31
  end
32
32
 
33
- it { Decorator.definitions.keys.must_equal ["title", "artist"] }
33
+ it { _(Decorator.definitions.keys).must_equal ["title", "artist"] }
34
34
 
35
35
  # in inheriting Decorator
36
36
 
@@ -38,10 +38,10 @@ class ConfigInheritTest < MiniTest::Spec
38
38
  property :location
39
39
  end
40
40
 
41
- it { InheritingDecorator.definitions.keys.must_equal ["title", "artist", "location"] }
41
+ it { _(InheritingDecorator.definitions.keys).must_equal ["title", "artist", "location"] }
42
42
  it { assert_cloned(InheritingDecorator, Decorator, "title") }
43
43
  it do
44
- InheritingDecorator.representable_attrs.get(:artist).representer_module.object_id.wont_equal Decorator.representable_attrs.get(:artist).representer_module.object_id
44
+ _(InheritingDecorator.representable_attrs.get(:artist).representer_module.object_id).wont_equal Decorator.representable_attrs.get(:artist).representer_module.object_id
45
45
  end
46
46
 
47
47
  # in inheriting and including Decorator
@@ -51,7 +51,7 @@ class ConfigInheritTest < MiniTest::Spec
51
51
  property :location
52
52
  end
53
53
 
54
- it { InheritingAndIncludingDecorator.definitions.keys.must_equal ["title", "artist", "genre", "location"] }
54
+ it { _(InheritingAndIncludingDecorator.definitions.keys).must_equal ["title", "artist", "genre", "location"] }
55
55
  it { assert_cloned(InheritingAndIncludingDecorator, GenreModule, :genre) }
56
56
 
57
57
 
@@ -61,7 +61,7 @@ class ConfigInheritTest < MiniTest::Spec
61
61
  property :title
62
62
  end
63
63
 
64
- it { Module.definitions.keys.must_equal ["title"] }
64
+ it { _(Module.definitions.keys).must_equal ["title"] }
65
65
 
66
66
 
67
67
  # in module including module
@@ -72,7 +72,7 @@ class ConfigInheritTest < MiniTest::Spec
72
72
  property :location
73
73
  end
74
74
 
75
- it { SubModule.definitions.keys.must_equal ["title", "location"] }
75
+ it { _(SubModule.definitions.keys).must_equal ["title", "location"] }
76
76
  it { assert_cloned(SubModule, Module, :title) }
77
77
 
78
78
  # including preserves order
@@ -84,7 +84,7 @@ class ConfigInheritTest < MiniTest::Spec
84
84
  property :location
85
85
  end
86
86
 
87
- it { IncludingModule.definitions.keys.must_equal ["genre", "title", "location"] }
87
+ it { _(IncludingModule.definitions.keys).must_equal ["genre", "title", "location"] }
88
88
 
89
89
 
90
90
  # included in class -------------------------------------------
@@ -93,7 +93,7 @@ class ConfigInheritTest < MiniTest::Spec
93
93
  include IncludingModule
94
94
  end
95
95
 
96
- it { Class.definitions.keys.must_equal ["genre", "title", "location"] }
96
+ it { _(Class.definitions.keys).must_equal ["genre", "title", "location"] }
97
97
  it { assert_cloned(Class, IncludingModule, :title) }
98
98
  it { assert_cloned(Class, IncludingModule, :location) }
99
99
  it { assert_cloned(Class, IncludingModule, :genre) }
@@ -105,7 +105,7 @@ class ConfigInheritTest < MiniTest::Spec
105
105
  include IncludingModule
106
106
  end
107
107
 
108
- it { DefiningClass.definitions.keys.must_equal ["street_cred", "genre", "title", "location"] }
108
+ it { _(DefiningClass.definitions.keys).must_equal ["street_cred", "genre", "title", "location"] }
109
109
 
110
110
  # in class
111
111
  class RepresenterClass
@@ -113,7 +113,7 @@ class ConfigInheritTest < MiniTest::Spec
113
113
  property :title
114
114
  end
115
115
 
116
- it { RepresenterClass.definitions.keys.must_equal ["title"] }
116
+ it { _(RepresenterClass.definitions.keys).must_equal ["title"] }
117
117
 
118
118
 
119
119
  # in inheriting class
@@ -122,7 +122,7 @@ class ConfigInheritTest < MiniTest::Spec
122
122
  property :location
123
123
  end
124
124
 
125
- it { InheritingClass.definitions.keys.must_equal ["title", "location"] }
125
+ it { _(InheritingClass.definitions.keys).must_equal ["title", "location"] }
126
126
  it { assert_cloned(InheritingClass, RepresenterClass, :title) }
127
127
 
128
128
  # in inheriting class and including
@@ -131,5 +131,5 @@ class ConfigInheritTest < MiniTest::Spec
131
131
  include GenreModule
132
132
  end
133
133
 
134
- it { InheritingAndIncludingClass.definitions.keys.must_equal ["title", "location", "genre"] }
134
+ it { _(InheritingAndIncludingClass.definitions.keys).must_equal ["title", "location", "genre"] }
135
135
  end