specstar-models 0.2.3 → 0.2.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e3c8ed030c00a7da4e805aede14a08881ee5f7ce
4
- data.tar.gz: 7d9077c49ca65db597dbc3fc7909d585ff4191f6
3
+ metadata.gz: 340d09c4db76d22befcbff8f1c415df6a5082656
4
+ data.tar.gz: dc8ae599fbcdc34fb4106bc2f6b8e3dd19ffed54
5
5
  SHA512:
6
- metadata.gz: 726c1e6d66e5ef9254471413bda9b7dd62e1083eba2c70dd19a56603bfe5d3e2a143f2e864086a3f04ad220408de9f3b2c3b5eb2d803b6913bc1f88202a9df5d
7
- data.tar.gz: db4dacee8193b89bcc8fe4ad96d5dde0312de174531e7951bc0958329bb227d9f33a7ea6f48dedfd0abeb7e331e60a04e843253e5533ecb17ba79e6a98ac1d43
6
+ metadata.gz: 6cb803ff9c732d9d2f764aa34daff7512410239c878936daba8ed1ac9e976f989e1d9d8ffd70c934812806fcd330b3f1860a3fd92b9ed6ec95c4305e8dfd9c13
7
+ data.tar.gz: 655128e977fcc67f94a064a2db0753abd93d6b5433defc6eb59542b5ce2423dac23486a37fef18be4db9894c5962681792d8462ada097f6dfa530f63f226e28b
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2012 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,32 @@
1
+ require 'rspec/core'
2
+ require 'rspec/expectations'
3
+
4
+ module Specstar
5
+ module Models
6
+ module Matchers
7
+
8
+ RSpec::Matchers.define :belong_to do |attr|
9
+ match do |model|
10
+ association = model.class.reflect_on_association(attr)
11
+ association && association.macro == :belongs_to
12
+ end
13
+
14
+ failure_message do |model|
15
+ "expected #{model.class} to belong to #{attr}."
16
+ end
17
+ end
18
+
19
+ RSpec::Matchers.define :have_many do |attr|
20
+ match do |model|
21
+ association = model.class.reflect_on_association(attr)
22
+ association && association.macro == :has_many
23
+ end
24
+
25
+ failure_message do |model|
26
+ "expected #{model.class} to have many #{attr}."
27
+ end
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,43 @@
1
+ require 'rspec/core'
2
+ require 'rspec/expectations'
3
+
4
+ module Specstar
5
+ module Models
6
+ module Matchers
7
+ RSpec::Matchers.define :have_attribute do |attr|
8
+ attr = attr.to_s
9
+
10
+ @extras = nil
11
+ chain :with do |extras|
12
+ @extras = extras
13
+ end
14
+
15
+ match do |target|
16
+ result = target.attributes.keys.map(&:to_s).include? attr
17
+
18
+ if result && @extras
19
+ properties = target.class.columns_hash[attr]
20
+ @extras.each_pair do |property, value|
21
+ result = false && break unless properties.send(property).to_s == value.to_s
22
+ end
23
+ end
24
+
25
+ result
26
+ end
27
+
28
+ failure_message do |target|
29
+ "Expected #{target.class} to have an attribute '#{attr}'#{properties_to_sentence @extras}."
30
+ end
31
+
32
+ description do
33
+ "have an attribute '#{attr}'#{properties_to_sentence @extras}."
34
+ end
35
+
36
+ def properties_to_sentence(hash)
37
+ " of " + hash.map { |key, value| "#{key} #{value}" }.to_sentence if hash.present?
38
+ end
39
+ end
40
+
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,128 @@
1
+ require 'rspec/core'
2
+ require 'rspec/expectations'
3
+
4
+ module Specstar
5
+ module Models
6
+ module Matchers
7
+ def validate_presence_of_methods_in_options(model, options)
8
+ if options[:if] && options[:if].is_a?(Symbol)
9
+ return false unless model.respond_to? options[:if]
10
+ end
11
+
12
+ if options[:unless] && options[:unless].is_a?(Symbol)
13
+ return false unless model.respond_to? options[:unless]
14
+ end
15
+
16
+ true
17
+ end
18
+
19
+ def undefined_method_in_options(model, options)
20
+ if options[:if] && options[:if].is_a?(Symbol)
21
+ return options[:if] unless model.respond_to? options[:if]
22
+ end
23
+
24
+ if options[:unless] && options[:unless].is_a?(Symbol)
25
+ return options[:unless] unless model.respond_to? options[:unless]
26
+ end
27
+
28
+ nil
29
+ end
30
+
31
+ def has_attribute?(model, attr, extras={})
32
+ attr = attr.to_s
33
+
34
+ result = model.attributes.include? attr
35
+
36
+ if result && extras.any?
37
+ properties = model.class.columns_hash[attr]
38
+ extras.each_pair do |property, value|
39
+ result = false && break unless properties.send(property).to_s == value.to_s
40
+ end
41
+ end
42
+
43
+ result
44
+ end
45
+
46
+ def has_association?(model, association)
47
+ model.class.reflect_on_all_associations.map { |a| a.name.to_s }.include? association.to_s
48
+ end
49
+
50
+ RSpec::Matchers.define :validate_presence_of do |attr, options|
51
+ match do |model|
52
+ (has_attribute?(model, attr) || has_association?(model, attr)) &&
53
+ model._validators[attr.to_sym].select do |validator|
54
+ validator.instance_of?(ActiveRecord::Validations::PresenceValidator) && (options.nil? || validate_presence_of_methods_in_options(model, options) && (options.to_a - validator.options.to_a).empty?)
55
+ end.size > 0
56
+ end
57
+
58
+ failure_message do |model|
59
+ if has_attribute?(model, attr) || has_association?(model, attr)
60
+ if options.nil? || validate_presence_of_methods_in_options(model, options)
61
+ "expected #{model.class} to validate presence of #{attr}."
62
+ else
63
+ "expected #{model.class} to define #{undefined_method_in_options(model, options)}."
64
+ end
65
+ else
66
+ "expected #{model.class} to have an attribute or association #{attr}."
67
+ end
68
+ end
69
+ end
70
+
71
+ RSpec::Matchers.define :validate_uniqueness_of do |attr, options|
72
+ match do |model|
73
+ (has_attribute?(model, attr) || has_association?(model, attr)) && model._validators[attr].select do |validator|
74
+ validator.instance_of?(ActiveRecord::Validations::UniquenessValidator) && (options.nil? || validate_presence_of_methods_in_options(model, options) && (options.to_a - validator.options.to_a).empty?)
75
+ end.size > 0
76
+ end
77
+
78
+ failure_message do |model|
79
+ if has_attribute?(model, attr) || has_association?(model, attr)
80
+ if options.nil? || validate_presence_of_methods_in_options(model, options)
81
+ "expected #{model.class} to validate uniqueness of #{attr}."
82
+ else
83
+ "expected #{model.class} to define #{undefined_method_in_options(model, options)}."
84
+ end
85
+ else
86
+ "expected #{model.class} to have an attribute or association #{attr}."
87
+ end
88
+ end
89
+ end
90
+
91
+ RSpec::Matchers.define :validate_inclusion_of do |attr, options|
92
+ match do |model|
93
+ (has_attribute?(model, attr) || has_association?(model, attr)) &&
94
+ model._validators[attr].select do |validator|
95
+ validator.instance_of?(ActiveRecord::Validations::InclusionValidator) && validator.options.merge(options) == validator.options
96
+ end.size > 0
97
+ end
98
+
99
+ failure_message do |model|
100
+ if has_attribute?(model, attr) || has_association?(model, attr)
101
+ "expected #{model.class} to validate inclusion of #{attr} in [#{options.delete(:in).map(&:to_s).join(', ')}]."
102
+ else
103
+ "expected #{model.class} to have an attribute or association #{attr}."
104
+ end
105
+ end
106
+ end
107
+
108
+ RSpec::Matchers.define :validate_numericality_of do |attr, options|
109
+ options = options || {}
110
+
111
+ match do |model|
112
+ (has_attribute?(model, attr) || has_association?(model, attr)) &&
113
+ model._validators[attr].select do |validator|
114
+ validator.instance_of?(ActiveRecord::Validations::NumericalityValidator) && validator.options.merge(options) == validator.options
115
+ end.size > 0
116
+ end
117
+
118
+ failure_message do |model|
119
+ if has_attribute?(model, attr) || has_association?(model, attr)
120
+ "expected #{model.class} to validate numericality of #{attr} in [#{options.delete(:in).map(&:to_s).join(', ')}]."
121
+ else
122
+ "expected #{model.class} to have an attribute or association #{attr}."
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
@@ -1,174 +1,3 @@
1
- require 'rspec/core'
2
- require 'rspec/expectations'
3
-
4
- module Specstar
5
- module Models
6
- module Matchers
7
- def validate_presence_of_methods_in_options(model, options)
8
- if options[:if] && options[:if].is_a?(Symbol)
9
- return false unless model.respond_to? options[:if]
10
- end
11
-
12
- if options[:unless] && options[:unless].is_a?(Symbol)
13
- return false unless model.respond_to? options[:unless]
14
- end
15
-
16
- true
17
- end
18
-
19
- def undefined_method_in_options(model, options)
20
- if options[:if] && options[:if].is_a?(Symbol)
21
- return options[:if] unless model.respond_to? options[:if]
22
- end
23
-
24
- if options[:unless] && options[:unless].is_a?(Symbol)
25
- return options[:unless] unless model.respond_to? options[:unless]
26
- end
27
-
28
- nil
29
- end
30
-
31
- RSpec::Matchers.define :have_attribute do |attr|
32
- attr = attr.to_s
33
-
34
- @extras = nil
35
- chain :with do |extras|
36
- @extras = extras
37
- end
38
-
39
- match do |target|
40
- result = target.attributes.keys.map(&:to_s).include? attr
41
-
42
- if result && @extras
43
- properties = target.class.columns_hash[attr]
44
- @extras.each_pair do |property, value|
45
- result = false && break unless properties.send(property).to_s == value.to_s
46
- end
47
- end
48
-
49
- result
50
- end
51
-
52
- failure_message do |target|
53
- "Expected #{target.class} to have an attribute '#{attr}'#{properties_to_sentence @extras}."
54
- end
55
-
56
- description do
57
- "have an attribute '#{attr}'#{properties_to_sentence @extras}."
58
- end
59
-
60
- def properties_to_sentence(hash)
61
- " of " + hash.map { |key, value| "#{key} #{value}" }.to_sentence if hash.present?
62
- end
63
- end
64
-
65
- def has_attribute?(model, attr, extras={})
66
- attr = attr.to_s
67
-
68
- result = model.attributes.include? attr
69
-
70
- if result && extras.any?
71
- properties = model.class.columns_hash[attr]
72
- extras.each_pair do |property, value|
73
- result = false && break unless properties.send(property).to_s == value.to_s
74
- end
75
- end
76
-
77
- result
78
- end
79
-
80
- def has_association?(model, association)
81
- model.class.reflect_on_all_associations.map { |a| a.name.to_s }.include? association.to_s
82
- end
83
-
84
- RSpec::Matchers.define :validate_presence_of do |attr, options|
85
- match do |model|
86
- (has_attribute?(model, attr) || has_association?(model, attr)) &&
87
- model._validators[attr.to_sym].select do |validator|
88
- validator.instance_of?(ActiveRecord::Validations::PresenceValidator) && (options.nil? || validate_presence_of_methods_in_options(model, options) && (options.to_a - validator.options.to_a).empty?)
89
- end.size > 0
90
- end
91
-
92
- failure_message do |model|
93
- if has_attribute?(model, attr) || has_association?(model, attr)
94
- if options.nil? || validate_presence_of_methods_in_options(model, options)
95
- "expected #{model.class} to validate presence of #{attr}."
96
- else
97
- "expected #{model.class} to define #{undefined_method_in_options(model, options)}."
98
- end
99
- else
100
- "expected #{model.class} to have an attribute or association #{attr}."
101
- end
102
- end
103
- end
104
-
105
- RSpec::Matchers.define :validate_uniqueness_of do |attr, options|
106
- match do |model|
107
- (has_attribute?(model, attr) || has_association?(model, attr)) && model._validators[attr].select do |validator|
108
- validator.instance_of?(ActiveRecord::Validations::UniquenessValidator) && (options.nil? || validate_presence_of_methods_in_options(model, options) && (options.to_a - validator.options.to_a).empty?)
109
- end.size > 0
110
- end
111
-
112
- failure_message do |model|
113
- if has_attribute?(model, attr) || has_association?(model, attr)
114
- if options.nil? || validate_presence_of_methods_in_options(model, options)
115
- "expected #{model.class} to validate uniqueness of #{attr}."
116
- else
117
- "expected #{model.class} to define #{undefined_method_in_options(model, options)}."
118
- end
119
- else
120
- "expected #{model.class} to have an attribute or association #{attr}."
121
- end
122
- end
123
- end
124
-
125
- RSpec::Matchers.define :validate_inclusion_of do |attr, options|
126
- match do |model|
127
- (has_attribute?(model, attr) || has_association?(model, attr)) &&
128
- model._validators[attr].select do |validator|
129
- validator.instance_of?(ActiveRecord::Validations::InclusionValidator) && validator.options.merge(options) == validator.options
130
- end.size > 0
131
- end
132
-
133
- failure_message do |model|
134
- if has_attribute?(model, attr) || has_association?(model, attr)
135
- "expected #{model.class} to validate inclusion of #{attr} in [#{options.delete(:in).map(&:to_s).join(', ')}]."
136
- else
137
- "expected #{model.class} to have an attribute or association #{attr}."
138
- end
139
- end
140
- end
141
-
142
- RSpec::Matchers.define :validate_numericality_of do |attr, options|
143
- options = options || {}
144
-
145
- match do |model|
146
- (has_attribute?(model, attr) || has_association?(model, attr)) &&
147
- model._validators[attr].select do |validator|
148
- validator.instance_of?(ActiveRecord::Validations::NumericalityValidator) && validator.options.merge(options) == validator.options
149
- end.size > 0
150
- end
151
-
152
- failure_message do |model|
153
- if has_attribute?(model, attr) || has_association?(model, attr)
154
- "expected #{model.class} to validate numericality of #{attr} in [#{options.delete(:in).map(&:to_s).join(', ')}]."
155
- else
156
- "expected #{model.class} to have an attribute or association #{attr}."
157
- end
158
- end
159
- end
160
-
161
- RSpec::Matchers.define :belong_to do |attr|
162
- match do |model|
163
- association = model.class.reflect_on_association(attr)
164
- association && association.macro == :belongs_to
165
- end
166
-
167
- failure_message do |model|
168
- "expected #{model.class} to belong to #{attr}."
169
- end
170
- end
171
-
172
- end
173
- end
174
- end
1
+ require_relative 'models/associations'
2
+ require_relative 'models/attributes'
3
+ require_relative 'models/validations'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: specstar-models
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sujoy Gupta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-24 00:00:00.000000000 Z
11
+ date: 2015-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec-core
@@ -44,7 +44,11 @@ executables: []
44
44
  extensions: []
45
45
  extra_rdoc_files: []
46
46
  files:
47
+ - MIT-LICENSE
47
48
  - lib/specstar/models.rb
49
+ - lib/specstar/models/associations.rb
50
+ - lib/specstar/models/attributes.rb
51
+ - lib/specstar/models/validations.rb
48
52
  homepage: http://github.com/sujoyg/specstar-models
49
53
  licenses:
50
54
  - MIT