smart_properties 1.8.0 → 1.8.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,794 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe SmartProperties do
4
- described_module = self.described_class
5
-
6
- context 'when extending a subclass' do
7
- let(:klass) do
8
- Class.new do
9
- attr_reader :a, :b
10
-
11
- def initialize(a = 13, b = nil)
12
- @a = a
13
- @b = b
14
- end
15
- end
16
- end
17
-
18
- let(:subklass) do
19
- Class.new(klass) do
20
- include described_module
21
- property :title
22
- end
23
- end
24
-
25
- context 'when creating new instances' do
26
- it 'should call the super-class constructor' do
27
- instance = subklass.new
28
- expect(instance.a).to eq(13)
29
- end
30
-
31
- it 'should handle keyword arguments' do
32
- instance = subklass.new(:title => 'Lorem ipsum')
33
- expect(instance.title).to eq('Lorem ipsum')
34
- end
35
- end
36
-
37
- context 'when creating new instances with additional positional arguments' do
38
- it 'it should forward those arguments to super-class constructor' do
39
- instance = subklass.new(1, 2)
40
- expect(instance.a).to eq(1)
41
- expect(instance.b).to eq(2)
42
- end
43
-
44
- it 'should forward arrays as they are to the super-class constructor' do
45
- instance = subklass.new([1, 2])
46
- expect(instance.a).to eq([1, 2])
47
- expect(instance.b).to eq(nil)
48
- end
49
-
50
- it 'should handle keyword arguments' do
51
- instance = subklass.new(1, :title => 'Lorem ipsum')
52
- expect(instance.a).to eq(1)
53
- expect(instance.b).to eq(nil)
54
- expect(instance.title).to eq('Lorem ipsum')
55
- end
56
-
57
- it 'should handle blocks' do
58
- instance = subklass.new(1) { |i| i.title = 'Lorem ipsum' }
59
- expect(instance.a).to eq(1)
60
- expect(instance.b).to eq(nil)
61
- expect(instance.title).to eq('Lorem ipsum')
62
- end
63
- end
64
- end
65
-
66
- context "when extending an other class" do
67
- subject(:klass) do
68
- Class.new.tap do |c|
69
- c.send(:include, described_class)
70
- end
71
- end
72
-
73
- it "should add a .property method" do
74
- expect(klass.respond_to?(:property, true)).to be_truthy
75
- end
76
-
77
- context "and defining a property with invalid configuration options" do
78
- it "should raise an error reporting one invalid option when one invalid option was given" do
79
- expect {
80
- klass.tap do |c|
81
- c.instance_eval do
82
- property :title, :invalid_option => 'boom'
83
- end
84
- end
85
- }.to raise_error(SmartProperties::ConfigurationError, "SmartProperties do not support the following configuration options: invalid_option.")
86
- end
87
-
88
- it "should raise an error reporting three invalid options when three invalid options were given" do
89
- expect {
90
- klass.tap do |c|
91
- c.instance_eval do
92
- property :title, :invalid_option_1 => 'boom', :invalid_option_2 => 'boom', :invalid_option_3 => 'boom'
93
- end
94
- end
95
- }.to raise_error(SmartProperties::ConfigurationError, "SmartProperties do not support the following configuration options: invalid_option_1, invalid_option_2, invalid_option_3.")
96
- end
97
- end
98
- end
99
-
100
- context "when used to build a class that has a property called :title" do
101
- subject(:klass) do
102
- title = Object.new.tap do |o|
103
- def o.to_title; 'chunky'; end
104
- end
105
-
106
- klass = Class.new.tap do |c|
107
- c.send(:include, described_class)
108
- c.instance_eval do
109
- def name; "TestDummy"; end
110
-
111
- property :title, :accepts => String,
112
- :converts => :to_title,
113
- :required => true,
114
- :default => title
115
- end
116
- end
117
-
118
- klass
119
- end
120
-
121
- let(:superklass) { klass }
122
-
123
- it { is_expected.to have_smart_property(:title) }
124
-
125
- context "instances of this class" do
126
- subject(:instance) { klass.new }
127
-
128
- it { is_expected.to respond_to(:title) }
129
- it { is_expected.to respond_to(:title=) }
130
-
131
- it "should have 'chunky' as default value for title when accessed using the #title method" do
132
- expect(instance.title).to eq('chunky')
133
- end
134
-
135
- it "should have 'chunky' as default value for title when accessed using the #[] method" do
136
- expect(instance[:title]).to eq('chunky')
137
- end
138
-
139
- it "should convert all values that are assigned to title into strings when using the #title= method" do
140
- instance.title = double(:to_title => 'bacon')
141
- expect(instance.title).to eq('bacon')
142
- end
143
-
144
- it "should convert all values that are assigned to title into strings when using the #[]= method" do
145
- instance[:title] = double(:to_title => 'bacon')
146
- expect(instance.title).to eq('bacon')
147
- end
148
-
149
- it "should not allow to set nil as title" do
150
- expect { instance.title = nil }.to raise_error(SmartProperties::MissingValueError, "TestDummy requires the property title to be set") {|error|
151
- expect(error.to_hash[:title]).to eq('must be set')
152
- }
153
- end
154
-
155
- it "should not allow to set objects as title that do not respond to #to_title" do
156
- expect { instance.title = Object.new }.to raise_error(NoMethodError, /undefined method `to_title'/)
157
- end
158
-
159
- it "should not influence other instances that have been initialized with different attributes" do
160
- other_instance = klass.new :title => double(:to_title => 'Lorem ipsum')
161
-
162
- expect(instance.title).to eq('chunky')
163
- expect(other_instance.title).to eq('Lorem ipsum')
164
- end
165
-
166
- context "when initialized with a block" do
167
- subject(:instance) do
168
- klass.new do |c|
169
- c.title = double(:to_title => 'bacon')
170
- end
171
- end
172
-
173
- it "should have the title specified in the block" do
174
- expect(instance.title).to eq('bacon')
175
- end
176
- end
177
- end
178
-
179
- context "when subclassed" do
180
- subject(:subklass) { Class.new(superklass) }
181
-
182
- it { is_expected.to have_smart_property(:title) }
183
-
184
- context "instances of this subclass" do
185
- subject(:instance) { subklass.new }
186
-
187
- it { is_expected.to respond_to(:title) }
188
- it { is_expected.to respond_to(:title=) }
189
- end
190
-
191
- context "instances of this subclass that have been intialized from a set of attributes" do
192
- subject(:instance) { subklass.new :title => double(:to_title => 'Message') }
193
-
194
- it "should have the correct title" do
195
- expect(instance.title).to eq('Message')
196
- end
197
- end
198
- end
199
-
200
- context "when subclassed and extended with a property called text" do
201
- subject(:subklass) do
202
- Class.new(superklass).tap do |c|
203
- c.instance_eval do
204
- property :text
205
- end
206
- end
207
- end
208
-
209
- it { is_expected.to have_smart_property(:title) }
210
- it { is_expected.to have_smart_property(:text) }
211
-
212
- context "instances of this subclass" do
213
- subject(:instance) { subklass.new }
214
-
215
- it { is_expected.to respond_to(:title) }
216
- it { is_expected.to respond_to(:title=) }
217
- it { is_expected.to respond_to(:text) }
218
- it { is_expected.to respond_to(:text=) }
219
- end
220
-
221
- context "instances of the super class" do
222
- subject(:instance) { superklass.new }
223
-
224
- it { is_expected.not_to respond_to(:text) }
225
- it { is_expected.not_to respond_to(:text=) }
226
- end
227
-
228
- context "instances of this subclass" do
229
- context "when initialized with a set of attributes" do
230
- subject(:instance) { subklass.new :title => double(:to_title => 'Message'), :text => "Hello" }
231
-
232
- context "when properties are accessed using the dedicated instance methods" do
233
- it("should have the correct title") { expect(instance.title).to eq('Message') }
234
- it("should have the correct text") { expect(instance.text).to eq('Hello') }
235
- end
236
-
237
- context "when properties are accessed using the index methods" do
238
- it("should have the correct title") { expect(instance[:title]).to eq('Message') }
239
- it("should have the correct text") { expect(instance[:text]).to eq('Hello') }
240
- end
241
- end
242
-
243
- context "when initialized with a block" do
244
- subject(:instance) do
245
- subklass.new do |c|
246
- c.title = double(:to_title => 'Message')
247
- c.text = "Hello"
248
- end
249
- end
250
-
251
- it("should have the correct title") { expect(instance.title).to eq('Message') }
252
- it("should have the correct text") { expect(instance.text).to eq('Hello') }
253
- end
254
- end
255
- end
256
-
257
- context "when extended with a :type property at runtime" do
258
- before do
259
- superklass.tap do |c|
260
- c.instance_eval do
261
- property :type, :converts => :to_sym
262
- end
263
- end
264
- end
265
-
266
- it { is_expected.to have_smart_property(:title) }
267
- it { is_expected.to have_smart_property(:type) }
268
-
269
- context "instances of this class" do
270
- subject(:instance) { superklass.new :title => double(:to_title => 'Lorem ipsum') }
271
-
272
- it { is_expected.to respond_to(:type) }
273
- it { is_expected.to respond_to(:type=) }
274
- end
275
-
276
- context "when subclassing this class" do
277
- subject(:subclass) { Class.new(superklass) }
278
-
279
- context "instances of this class" do
280
- subject(:instance) { subclass.new :title => double(:to_title => 'Lorem ipsum') }
281
-
282
- it { is_expected.to respond_to :title }
283
- it { is_expected.to respond_to :title= }
284
- it { is_expected.to respond_to :type }
285
- it { is_expected.to respond_to :type= }
286
- end
287
- end
288
- end
289
- end
290
-
291
- context "when used to build a class that has a property called :title that uses a lambda statement for conversion" do
292
- subject(:klass) do
293
- Class.new.tap do |c|
294
- c.send(:include, described_class)
295
- c.instance_eval do
296
- property :title, :converts => lambda { |t| "<title>#{t.to_s}</title>"}
297
- end
298
- end
299
- end
300
-
301
- context "instances of this class" do
302
- subject(:instance) { klass.new }
303
-
304
- it "should convert the property title as specified the lambda statement" do
305
- instance.title = "Lorem ipsum"
306
- expect(instance.title).to eq("<title>Lorem ipsum</title>")
307
- end
308
- end
309
- end
310
-
311
- context "when used to build a class that has a property called :title that uses an object that responds to #to_proc for conversion" do
312
- subject(:klass) do
313
- converter = Object.new.tap do |o|
314
- def o.to_proc
315
- lambda { |t| "<title>#{t.to_s}</title>"}
316
- end
317
- end
318
-
319
- Class.new.tap do |c|
320
- c.send(:include, described_class)
321
- c.instance_eval do
322
- property :title, :converts => converter
323
- end
324
- end
325
- end
326
-
327
- context "instances of this class" do
328
- subject(:instance) { klass.new }
329
-
330
- it "should convert the property title as specified the lambda statement" do
331
- instance.title = "Lorem ipsum"
332
- expect(instance.title).to eq("<title>Lorem ipsum</title>")
333
- end
334
- end
335
- end
336
-
337
- context "when used to build a class that has a property called :visible which uses an array of valid values for acceptance checking" do
338
- subject(:klass) do
339
- Class.new.tap do |c|
340
- def c.name; "TestDummy"; end
341
-
342
- c.send(:include, described_class)
343
-
344
- c.instance_eval do
345
- property :visible, :accepts => [true, false]
346
- end
347
- end
348
- end
349
-
350
- context "instances of this class" do
351
- subject(:instance) { klass.new }
352
-
353
- context "when properties are accessed using the dedicated instance methods" do
354
- it "should allow to set true as value for visible" do
355
- expect { instance.visible = true }.to_not raise_error
356
- end
357
-
358
- it "should allow to set false as value for visible" do
359
- expect { instance.visible = false }.to_not raise_error
360
- end
361
-
362
- it "should not allow to set :maybe as value for visible" do
363
- expect { instance.visible = :maybe }.to raise_error(SmartProperties::InvalidValueError, "TestDummy does not accept :maybe as value for the property visible") {|error|
364
- expect(error.to_hash[:visible]).to eq('does not accept :maybe as value')
365
- }
366
- end
367
- end
368
-
369
- context "when properties are accessed using the index methods" do
370
- it "should allow to set true as value for visible" do
371
- expect { instance[:visible] = true }.to_not raise_error
372
- end
373
-
374
- it "should allow to set false as value for visible" do
375
- expect { instance[:visible] = false }.to_not raise_error
376
- end
377
-
378
- it "should not allow to set :maybe as value for visible" do
379
- expect { instance[:visible] = :maybe }.to raise_error(SmartProperties::InvalidValueError, "TestDummy does not accept :maybe as value for the property visible") {|error|
380
- expect(error.to_hash[:visible]).to eq('does not accept :maybe as value')
381
- }
382
- end
383
- end
384
- end
385
- end
386
-
387
- context "when used to build a class that has a property called :title that can either be a String or a Symbol" do
388
- subject(:klass) do
389
- Class.new.tap do |c|
390
- c.send(:include, described_class)
391
- c.instance_eval do
392
- property :title, accepts: [String, Symbol]
393
- end
394
- end
395
- end
396
-
397
- context "intance of this class" do
398
- subject(:instance) { klass.new }
399
-
400
- context "when properties are accessed using the dedicated instance methods" do
401
- it "should accept a String as title" do
402
- expect { subject.title = "Test" }.to_not raise_error
403
- end
404
-
405
- it "should accept a Symbol as title" do
406
- expect { subject.title = :test }.to_not raise_error
407
- end
408
- end
409
-
410
- context "when properties are accessed using the index methods" do
411
- it "should accept a String as title" do
412
- expect { subject[:title] = "Test" }.to_not raise_error
413
- end
414
-
415
- it "should accept a Symbol as title" do
416
- expect { subject[:title] = :test }.to_not raise_error
417
- end
418
- end
419
- end
420
- end
421
-
422
- context 'when used to build a class that has a property called :license_plate which uses a lambda statement for accpetance checking' do
423
- subject(:klass) do
424
- Class.new.tap do |c|
425
- def c.name; 'TestDummy'; end
426
-
427
- c.send(:include, described_class)
428
-
429
- c.instance_eval do
430
- property :license_plate, :accepts => lambda { |v| /\w{1,2} \w{1,2} \d{1,4}/.match(v) }
431
- end
432
- end
433
- end
434
-
435
- context 'instances of this class' do
436
- subject(:instance) { klass.new }
437
-
438
- context "when properties are accessed using the dedicated instance methods" do
439
- it 'should not a accept "invalid" as value for license_plate' do
440
- expect { instance.license_plate = "invalid" }.to raise_error(SmartProperties::InvalidValueError, 'TestDummy does not accept "invalid" as value for the property license_plate') {|error|
441
- expect(error.to_hash[:license_plate]).to eq('does not accept "invalid" as value')
442
- }
443
- end
444
-
445
- it 'should accept "NE RD 1337" as license plate' do
446
- expect { instance.license_plate = "NE RD 1337" }.to_not raise_error
447
- end
448
- end
449
-
450
- context "when properties are accessed using the index methods" do
451
- it 'should not a accept "invalid" as value for license_plate' do
452
- expect { instance[:license_plate] = "invalid" }.to raise_error(ArgumentError, 'TestDummy does not accept "invalid" as value for the property license_plate')
453
- end
454
-
455
- it 'should accept "NE RD 1337" as license plate' do
456
- expect { instance[:license_plate] = "NE RD 1337" }.to_not raise_error
457
- end
458
- end
459
- end
460
- end
461
-
462
- context 'when used to build a class that has a property called :text whose getter is overriden' do
463
- subject(:klass) do
464
- Class.new.tap do |c|
465
- c.send(:include, described_class)
466
-
467
- c.instance_eval do
468
- property :text, :default => 'Hello'
469
- end
470
-
471
- c.class_eval do
472
- def text
473
- "<em>#{super}</em>"
474
- end
475
- end
476
- end
477
- end
478
-
479
- context "instances of this class" do
480
- subject(:instance) { klass.new }
481
-
482
- context "when properties are accessed using the dedicated instance methods" do
483
- it "should return the accepted value for the property called :text" do
484
- expect(instance.text).to eq('<em>Hello</em>')
485
- end
486
- end
487
-
488
- context "when properties are accessed using the index methods" do
489
- it "should return the accepted value for the property called :text" do
490
- expect(instance[:text]).to eq('<em>Hello</em>')
491
- end
492
- end
493
- end
494
- end
495
-
496
- context 'when used to build a class that has a required property with no default called :text whose getter is overriden' do
497
- subject(:klass) do
498
- Class.new.tap do |c|
499
- c.send(:include, described_class)
500
-
501
- c.instance_eval do
502
- property :text, required: true
503
- end
504
-
505
- c.class_eval do
506
- def text
507
- "<em>#{super}</em>"
508
- end
509
- end
510
- end
511
- end
512
-
513
- it "should raise an error during initilization if no value for :text has been specified" do
514
- expect { klass.new }.to raise_error(SmartProperties::InitializationError)
515
- end
516
- end
517
-
518
- context 'when used to build a class that has a property called :id whose default value is a lambda statement for retrieving the object_id' do
519
- subject(:klass) do
520
- Class.new.tap do |c|
521
- c.send(:include, described_class)
522
-
523
- c.instance_eval do
524
- property :id, :default => lambda { object_id }
525
- end
526
- end
527
- end
528
-
529
- context "instances of this class" do
530
- it "should evaluate the lambda in their own context and thus return a different value for each instance" do
531
- first_instance = klass.new
532
- second_instance = klass.new
533
-
534
- expect(first_instance.id).to_not eq(second_instance.id)
535
- end
536
- end
537
- end
538
-
539
- context 'when used to build a class that has a property called :boom whose default value is a lambda statement that raises an exception' do
540
- subject(:klass) do
541
- Class.new.tap do |c|
542
- c.send(:include, described_class)
543
-
544
- c.instance_eval do
545
- property :boom, :default => lambda { raise 'Boom!' }
546
- end
547
- end
548
- end
549
-
550
- context "instances of this class" do
551
- it "should raise during initialization if no other value for :boom has been provided" do
552
- expect { klass.new }.to raise_error(RuntimeError, 'Boom!')
553
- end
554
-
555
- it "should not evaluate the lambda expression and thus not raise during initialization if a different value for :boom has been provided as a parameter" do
556
- expect { klass.new(boom: 'Everything is just fine!') }.not_to raise_error
557
- end
558
-
559
- it "should not evaluate the lambda expression and thus not raise during initialization if a different value for :boom has been provided in an initilization block" do
560
- expect { klass.new { |inst| inst.boom = 'Everything is just fine!' } }.not_to raise_error
561
- end
562
- end
563
- end
564
-
565
- context 'when used to build a class that is then subclassed and later extended at runtime' do
566
- let!(:klass) do
567
- Class.new.tap do |c|
568
- c.send(:include, described_class)
569
- c.send(:property, :title)
570
- end
571
- end
572
-
573
- let!(:subklass) do
574
- Class.new(klass).tap do |c|
575
- c.send(:property, :body)
576
- end
577
- end
578
-
579
- before do
580
- klass.tap do |c|
581
- c.send(:property, :priority)
582
- end
583
- end
584
-
585
- context "the class" do
586
- subject { klass }
587
-
588
- it { is_expected.to have_smart_property(:title) }
589
- it { is_expected.to have_smart_property(:priority) }
590
- end
591
-
592
- context 'the subclass' do
593
- subject { subklass }
594
-
595
- it { is_expected.to have_smart_property(:title) }
596
- it { is_expected.to have_smart_property(:body) }
597
- it { is_expected.to have_smart_property(:priority) }
598
-
599
- it "should be initializable using a block" do
600
- configuration_instructions = lambda do |s|
601
- s.title = "Lorem Ipsum"
602
- s.priority = :low
603
- s.body = "Lorem ipsum dolor sit amet."
604
- end
605
-
606
- expect { subklass.new(&configuration_instructions) }.to_not raise_error
607
- end
608
-
609
- it "should be initializable using a hash of attributes" do
610
- attributes = {
611
- :title => "Lorem Ipsum",
612
- :priority => :low,
613
- :body => "Lorem ipsum dolor sit amet."
614
- }
615
-
616
- expect { subklass.new(attributes) }.to_not raise_error
617
- end
618
- end
619
- end
620
-
621
- context "when building a class that has a property which is not required and has a default" do
622
- subject(:klass) do
623
- Class.new.tap do |c|
624
- c.send(:include, described_class)
625
- c.send(:property, :title, :default => 'Lorem Ipsum')
626
- end
627
- end
628
-
629
- context 'instances of that class' do
630
- context 'when created with a set of attributes that explicitly contains nil for the title' do
631
- subject(:instance) { klass.new :title => nil }
632
-
633
- it "should have no title" do
634
- expect(instance.title).to be_nil
635
- end
636
- end
637
-
638
- context 'when created without any arguments' do
639
- subject(:instance) { klass.new }
640
-
641
- context "when properties are accessed using the index methods" do
642
- it "should have the default title" do
643
- expect(instance.title).to eq('Lorem Ipsum')
644
- end
645
- end
646
-
647
- context "when properties are accessed using the index methods" do
648
- it "should have the default title" do
649
- expect(instance[:title]).to eq('Lorem Ipsum')
650
- end
651
- end
652
- end
653
-
654
- context 'when created with an empty block' do
655
- subject(:instance) { klass.new {} }
656
-
657
- context "when properties are accessed using the index methods" do
658
- it "should have the default title" do
659
- expect(instance.title).to eq('Lorem Ipsum')
660
- end
661
- end
662
-
663
- context "when properties are accessed using the index methods" do
664
- it "should have the default title" do
665
- expect(instance[:title]).to eq('Lorem Ipsum')
666
- end
667
- end
668
- end
669
- end
670
- end
671
-
672
- context "when building a class that has a property which is required and has no default" do
673
- subject(:klass) do
674
- Class.new.tap do |c|
675
- c.send(:include, described_class)
676
- c.send(:property, :title, :required => true)
677
-
678
- def c.name; "Dummy"; end
679
- end
680
- end
681
-
682
- context 'instances of that class' do
683
- context 'when created with a set of attributes that contains a title' do
684
- subject(:instance) { klass.new :title => 'Lorem Ipsum' }
685
-
686
- it "should have the correct title" do
687
- expect(instance.title).to eq('Lorem Ipsum')
688
- end
689
- end
690
-
691
- context 'when created with an block specifying that property' do
692
- subject(:instance) { klass.new { |i| i.title = 'Lorem Ipsum' } }
693
-
694
- it "should have the default title" do
695
- expect(instance.title).to eq('Lorem Ipsum')
696
- end
697
- end
698
-
699
- context "when created with no arguments" do
700
- it "should raise an error stating that required properties are missing" do
701
- expect { klass.new }.to raise_error(SmartProperties::InitializationError, "Dummy requires the following properties to be set: title") {|error|
702
- expect(error.to_hash[:title]).to eq('must be set')
703
- }
704
- end
705
- end
706
- end
707
- end
708
-
709
- context "when building a class that has a property which is required depending on the value of another property" do
710
- subject(:klass) do
711
- described_class = self.described_class
712
-
713
- Class.new do
714
- include described_class
715
- property :name, :required => lambda { not anonymous }
716
- property :anonymous, accepts: [true, false], default: true
717
- def self.name; "Dummy"; end
718
- end
719
- end
720
-
721
- context "when created with no arguments" do
722
- it "should not raise an error" do
723
- expect { klass.new }.to_not raise_error
724
- end
725
- end
726
-
727
- context "when created with no name and anonymous being set to false" do
728
- it "should raise an error indicating that a required property was not specified" do
729
- expect { klass.new anonymous: false }.to raise_error(SmartProperties::InitializationError, "Dummy requires the following properties to be set: name") {|error|
730
- expect(error.to_hash[:name]).to eq("must be set")
731
- }
732
- end
733
- end
734
-
735
- context "when created with a name and anonymous being set to false" do
736
- it "should not raise an error" do
737
- expect { klass.new name: "John Doe", anonymous: false }.to_not raise_error
738
- end
739
- end
740
- end
741
-
742
- context "when building a class that has a property which is required and has false as default" do
743
- subject(:klass) do
744
- Class.new.tap do |c|
745
- c.send(:include, described_class)
746
- c.send(:property, :flag, :required => true, :default => false)
747
-
748
- def c.name; "Dummy"; end
749
- end
750
- end
751
-
752
- context 'instances of that class' do
753
- context 'when created with a set of attributes that explicitly contains nil for the title' do
754
- subject(:instance) { klass.new :flag => true }
755
-
756
- it "should have no title" do
757
- expect(instance.flag).to be_truthy
758
- end
759
- end
760
-
761
- context 'when created with an block specifying that property' do
762
- subject(:instance) { klass.new { |i| i.flag = true } }
763
-
764
- context "when properties are accessed using the dedicated instance methods" do
765
- it "should have the default title" do
766
- expect(instance.flag).to be(true)
767
- end
768
- end
769
-
770
- context "when properties are accessed using the index methods" do
771
- it "should have the default title" do
772
- expect(instance[:flag]).to be(true)
773
- end
774
- end
775
- end
776
-
777
- context "when created with no arguments" do
778
- subject(:instance) { klass.new }
779
-
780
- context "when properties are accessed using the dedicated instance methods" do
781
- it "should have false as default flag" do
782
- expect(instance.flag).to be(false)
783
- end
784
- end
785
-
786
- context "when properties are accessed using the index methods" do
787
- it "should have false as default flag" do
788
- expect(instance[:flag]).to be(false)
789
- end
790
- end
791
- end
792
- end
793
- end
794
- end