attributor 2.6.1 → 3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -13,7 +13,7 @@ describe Attributor::Ids do
13
13
  its(:member_attribute) { should be(Chicken.attributes[:email]) }
14
14
 
15
15
  it 'loads' do
16
- ids.load(value).should eq(emails)
16
+ ids.load(value).should =~ emails
17
17
  end
18
18
 
19
19
  it 'generates valid, loadable examples' do
@@ -1,9 +1,48 @@
1
1
  require File.join(File.dirname(__FILE__), '..', 'spec_helper.rb')
2
2
 
3
3
  describe Attributor::Model do
4
+ subject(:chicken) { Chicken }
5
+
6
+ # TODO: should move most of these specs to hash spec
7
+
8
+ context 'attributes' do
9
+ context 'with an exception from the definition block' do
10
+ subject(:broken_model) do
11
+ Class.new(Attributor::Model) do
12
+ attributes do
13
+ raise 'sorry :('
14
+ attribute :name, String
15
+ end
16
+ end
17
+ end
18
+
19
+ it 'throws original exception upon first run' do
20
+ lambda {
21
+ broken_model.attributes
22
+ }.should raise_error(RuntimeError, 'sorry :(')
23
+ end
24
+
25
+ it 'throws InvalidDefinition for subsequent access' do
26
+ broken_model.attributes rescue nil
27
+
28
+ lambda {
29
+ broken_model.attributes
30
+ }.should raise_error(Attributor::InvalidDefinition)
31
+ end
32
+
33
+ it 'throws for any attempts at using of an instance of it' do
34
+ broken_model.attributes rescue nil
35
+
36
+ instance = broken_model.new
37
+ lambda {
38
+ instance.name
39
+ }.should raise_error(Attributor::InvalidDefinition)
40
+ end
41
+
42
+ end
43
+ end
4
44
 
5
45
  context 'class methods' do
6
- subject(:chicken) { Chicken }
7
46
  let(:context){ ["root","subattr"] }
8
47
 
9
48
  its(:native_type) { should eq(Chicken) }
@@ -315,13 +354,12 @@ describe Attributor::Model do
315
354
  its(:validate) { should be_empty}
316
355
  end
317
356
 
318
- context 'that are invalid' do
319
- subject(:person) do
320
- # TODO: support this? Person.example(title: 'dude', address: {name: 'ME'} )
321
-
322
- obj = Person.example(title: 'dude')
323
- obj.address.state = 'ME'
324
- obj
357
+ context 'that are both invalid' do
358
+ subject(:person){ Person.load( name: 'Joe', title: 'dude', okay: true )}
359
+ let(:address){ Address.load( name: '1 Main St', state: 'ME' )}
360
+ before do
361
+ person.address = address
362
+ address.person = person
325
363
  end
326
364
 
327
365
  its(:validate) { should have(2).items }
@@ -331,10 +369,8 @@ describe Attributor::Model do
331
369
  title_error.should =~ /^Attribute person\.title:/
332
370
  state_error.should =~ /^Attribute person\.address\.state:/
333
371
  end
334
-
335
372
  end
336
373
 
337
-
338
374
  end
339
375
  end
340
376
 
@@ -400,18 +436,42 @@ describe Attributor::Model do
400
436
  end
401
437
  end
402
438
 
439
+ context 'for collections of models' do
440
+ let(:attributes_block) do
441
+ proc do
442
+ attribute :neighbors, required: true do
443
+ attribute :name, required: true
444
+ attribute :age, Integer
445
+ end
446
+ end
447
+ end
448
+ subject(:struct) { Attributor::Struct.construct(attributes_block, reference: Cormorant) }
449
+
450
+ it 'supports defining sub-attributes using the proper reference' do
451
+ struct.attributes[:neighbors].options[:required].should be true
452
+ struct.attributes[:neighbors].type.member_attribute.type.attributes.keys.should =~ [:name, :age]
453
+
454
+ name_options = struct.attributes[:neighbors].type.member_attribute.type.attributes[:name].options
455
+ name_options[:required].should be true
456
+ name_options[:description].should eq 'Name of the Cormorant'
457
+ end
458
+ end
403
459
 
404
460
  context 'redefining an attribute' do
405
- before do
406
- model.attributes do
407
- attribute :id, String
461
+ context 'for simple types' do
462
+ before do
463
+ model.attributes do
464
+ attribute :id, String
465
+ end
466
+ end
467
+
468
+ it 'updates the type properly' do
469
+ model.attributes[:id].type.should be(Attributor::String)
408
470
  end
409
- end
410
471
 
411
- it 'works' do
412
- model.attributes[:id].type.should be(Attributor::String)
413
472
  end
414
473
 
474
+
415
475
  end
416
476
 
417
477
  end
@@ -427,8 +487,8 @@ describe Attributor::Model do
427
487
  subject(:example) { model_class.example }
428
488
 
429
489
  its(:attributes) { should be_empty }
430
-
431
- it 'dumps as an empty hash' do
490
+
491
+ it 'dumps as an empty hash' do
432
492
  example.dump.should eq({})
433
493
  end
434
494
 
@@ -19,14 +19,12 @@ describe Attributor::String do
19
19
  type.example.should be_a(::String)
20
20
  end
21
21
 
22
- it 'handles regexps that Randexp can not' do
23
- pending 'resolution of #72' do
24
- regex = /\w+(,\w+)*/
25
- expect {
26
- val = Attributor::String.example(options:{regexp: regex})
27
- val.should be_a(::String)
28
- }.to_not raise_error
29
- end
22
+ it 'handles regexps that Randexp can not (#72)' do
23
+ regex = /\w+(,\w+)*/
24
+ expect {
25
+ val = Attributor::String.example(options:{regexp: regex})
26
+ val.should be_a(::String)
27
+ }.to_not raise_error
30
28
  end
31
29
 
32
30
  end
@@ -0,0 +1,12 @@
1
+ describe Attributor::URI do
2
+
3
+ subject(:type) { Attributor::URI }
4
+
5
+ its(:native_type) { should be ::URI::Generic }
6
+
7
+ it 'check_option!' do
8
+ # No options supported thus far
9
+ expect(type.check_option!(:foo, nil )).to be(:unknown)
10
+ end
11
+
12
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attributor
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.1
4
+ version: '3.0'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep M. Blanquer
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-04-16 00:00:00.000000000 Z
12
+ date: 2015-06-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: hashie
@@ -282,6 +282,7 @@ files:
282
282
  - lib/attributor/types/symbol.rb
283
283
  - lib/attributor/types/tempfile.rb
284
284
  - lib/attributor/types/time.rb
285
+ - lib/attributor/types/uri.rb
285
286
  - lib/attributor/version.rb
286
287
  - spec/attribute_resolver_spec.rb
287
288
  - spec/attribute_spec.rb
@@ -309,6 +310,7 @@ files:
309
310
  - spec/types/struct_spec.rb
310
311
  - spec/types/tempfile_spec.rb
311
312
  - spec/types/time_spec.rb
313
+ - spec/types/uri_spec.rb
312
314
  homepage: https://github.com/rightscale/attributor
313
315
  licenses:
314
316
  - MIT
@@ -329,7 +331,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
329
331
  version: '0'
330
332
  requirements: []
331
333
  rubyforge_project:
332
- rubygems_version: 2.2.2
334
+ rubygems_version: 2.4.5
333
335
  signing_key:
334
336
  specification_version: 4
335
337
  summary: A powerful attribute and type management library for Ruby
@@ -360,4 +362,5 @@ test_files:
360
362
  - spec/types/struct_spec.rb
361
363
  - spec/types/tempfile_spec.rb
362
364
  - spec/types/time_spec.rb
365
+ - spec/types/uri_spec.rb
363
366
  has_rdoc: