validity 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9612ae7e91b7132c10b0f0113b3b1bc46aaeb080
4
- data.tar.gz: 36b3d82c42fa44f90f9430b807d7199015afc15b
3
+ metadata.gz: beb78593ced7359983b6ec67d25feb60671d5284
4
+ data.tar.gz: 21d5a1f8687b5963666978399acc9bc42b98b54c
5
5
  SHA512:
6
- metadata.gz: 87a3799c447d7d030eabfb317384e414a84fa0730a4a96865aa49f5fdb03d69b62fc59f74e07be943ff207bdddd4d85e5344aa8a8ba04a18d29731cfdcf56228
7
- data.tar.gz: 6d84b1bacb1b381d4c9eaa0c6fb205c86deb85cb6faee825d633b4601174b9e589a57961ccf119a2c7a6c65e644a122cec208a303bcf0e6c28b2ca4f82911405
6
+ metadata.gz: bd8ee1805308de021d90009e9562872101ffb32b83ffb884670b73dfd35b30b2b60e3ce63cefd0a5ff81e1bb593d6d3cfcab1b621962d0942f13f1652ad4a9b1
7
+ data.tar.gz: 1e4b4acf97af072ff04d6a9818088dc85a019aec59e67c1f7385725a4e80b078fd94e1958101e7e74068065551d1b4c3527600a1aa7f733441e2ab076361d78b
@@ -1,62 +1,80 @@
1
+ # Author:: Matt Fornaciari (mailto:mattforni@gmail.com)
2
+ # License:: MIT
3
+
1
4
  module Validity
5
+ # The Validity::ActiveRecord module contains testing logic specific to ActiveRecord
2
6
  module ActiveRecord
7
+ # Creates an ActiveRecord::Wrapper to test against
3
8
  def validates(record)
4
9
  Wrapper.new(record)
5
10
  end
6
11
 
7
12
  private
8
13
 
14
+ # The Wrapper class is just a thin wrapper around the ActiveRecord model
15
+ # which defines several methods to validate a model behaves as it should.
16
+ # Example Usage:
17
+ # validates(@model).field_presence(:required)
9
18
  class Wrapper
10
19
  include Test::Unit::Assertions
11
20
 
21
+ # Creates a new instance of Validity::ActiveRecord::Wrapper to test against
12
22
  def initialize(record)
13
23
  @record = record
14
24
  end
15
25
 
16
- def belongs_to(field, target)
26
+ # Asserts that the record has a belongs_to association and that the
27
+ # associated record equals the +target+ record, if provided.
28
+ def belongs_to(field, target = nil)
17
29
  clazz = @record.class
18
30
  assert_respond_to @record, field, "#{clazz} cannot find associated #{field}"
19
31
 
20
32
  one = @record.send(field)
21
33
  assert_not_nil one, "#{clazz} does not have associated #{field}"
22
- assert_equal target, one, "#{field.to_s.capitalize} associated with this #{clazz.to_s.downcase} is not the target #{field}"
34
+ if target
35
+ assert_equal target, one, "#{field.to_s.capitalize} associated with this #{clazz.to_s.downcase} is not the target #{field}"
36
+ end
23
37
  end
24
38
 
39
+ # Asserts that the record responds to the +delegated+ method and that
40
+ # the returned object is equal to the object referenced by +delegated_to+
25
41
  def delegates(delegated, delegated_to)
26
42
  clazz = @record.class
27
43
  assert_respond_to @record, delegated, "#{clazz} does not respond to #{delegated}"
28
44
  assert_equal delegated_to.send(delegated), @record.send(delegated), "Delegated objects do not match"
29
45
  end
30
46
 
47
+ # Asserts that the +field+ field must be present for the record to be valid
31
48
  def field_presence(field)
32
- # Null out the field to test
33
49
  @record.send("#{field}=", nil)
34
50
 
35
- # Assert the record is invalid and will not save
36
51
  clazz = @record.class
37
52
  assert !@record.valid?, "#{clazz} is considered valid with nil #{field}"
38
53
  assert !@record.save, "#{clazz} saved without #{field} field"
39
54
  assert @record.errors[field].any?, "#{clazz} does not have an error on #{field}"
40
55
  end
41
56
 
57
+ # Asserts that the +field+ field must be unique for the record to be valid
42
58
  def field_uniqueness(field)
43
- # Create a duplicate of the record
44
59
  dup = @record.dup
45
60
 
46
- # Assert the duplicate is invalid based on the field
47
61
  clazz = dup.class
48
62
  assert !dup.valid?, "#{clazz} is considered valid with duplicate #{field}"
49
63
  assert !dup.save, "#{clazz} saved with a duplicate #{field}"
50
64
  assert dup.errors[field].any?, "#{clazz} does not have an error on #{field}"
51
65
  end
52
66
 
53
- def has_many(field, targets)
67
+ # Asserts that the record has a has_many association and that the
68
+ # associated records equal the +targets+ records, if provided.
69
+ def has_many(field, targets = nil)
54
70
  clazz = @record.class
55
71
  assert_respond_to @record, field, "#{clazz} cannot find associated #{field}"
56
72
 
57
73
  many = @record.send(field)
58
74
  assert !(many.nil? || many.empty?), "#{clazz} does not have associated #{field}"
59
- assert_equal targets.size, many.size, "#{clazz} does not have #{targets.size} associated #{field}"
75
+ if targets
76
+ assert_equal targets.size, many.size, "#{clazz} does not have #{targets.size} associated #{field}"
77
+ end
60
78
  end
61
79
 
62
80
  private
data/lib/validity.rb CHANGED
@@ -1,3 +1,12 @@
1
+ # This gem attempts to provide a library to easily test validations on
2
+ # ActiveRecord models. The ultimate goal is to make spinning up and testing a
3
+ # data model for a Ruby on Rails stack both quick and painless. The
4
+ # syntactical structure of this library is based losely upon rspec's
5
+ # expect/match syntax as it seems to lend itself well to testing readability.
6
+ #
7
+ # Author:: Matt Fornaciari (mailto:mattforni@gmail.com)
8
+ # License:: MIT
9
+
1
10
  require 'test/unit/assertions'
2
11
  require 'validity/active_record'
3
12
 
metadata CHANGED
@@ -1,16 +1,30 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: validity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Fornaciari
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-30 00:00:00.000000000 Z
12
- dependencies: []
13
- description: Just the beginning of a validation library
11
+ date: 2014-05-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: test-unit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2'
27
+ description: The beginning of a validation library
14
28
  email: mattforni@gmail.com
15
29
  executables: []
16
30
  extensions: []
@@ -22,7 +36,7 @@ homepage: http://rubygems.org/gems/validity
22
36
  licenses:
23
37
  - MIT
24
38
  metadata: {}
25
- post_install_message:
39
+ post_install_message: Happy testing!
26
40
  rdoc_options: []
27
41
  require_paths:
28
42
  - lib