knight 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -22,36 +22,44 @@ Or install it yourself as:
22
22
 
23
23
  ```ruby
24
24
  class User
25
- attr_reader :username
25
+ attr_reader :username, :password
26
26
 
27
- def initialize(username)
27
+ def initialize(username, password)
28
28
  @username = username
29
+ @password = password
29
30
  end
30
31
  end
31
- user = User.new('john')
32
+ user = User.new('john', '')
32
33
 
33
- validator = Knight::Validator.new(Rule::Presence.new(:username))
34
+ validator = Knight::Validator.new(Knight::Rule::Presence.new(:username))
34
35
  result = validator.run(user)
35
36
  result.valid? # => true
36
37
 
37
-
38
38
  class UserValidator
39
- include Knight::InstanceMethod
39
+ include Knight::InstanceMethods
40
40
 
41
41
  validator.add(Knight::Rule::Presence.new(:username))
42
42
 
43
43
  context :login do |validator|
44
- validator.add(Knight::Rule::Presence.new(:username))
45
44
  validator.add(Knight::Rule::Presence.new(:password))
46
45
  end
47
46
  end
48
47
  validator = UserValidator.new(user)
49
-
50
48
  result = validator.run
51
49
  result.valid? # => true
52
50
 
53
51
  result = validator.run(:login)
54
52
  result.valid? # => false
53
+
54
+ user = User.new('', 'password')
55
+ validator = UserValidator.new(user)
56
+ result = validator.run(:login)
57
+ result.valid? # => false
58
+
59
+ user = User.new('john', 'password')
60
+ validator = UserValidator.new(user)
61
+ result = validator.run(:login)
62
+ result.valid? # => true
55
63
  ```
56
64
 
57
65
  ## Contributing
@@ -38,6 +38,8 @@ module Knight
38
38
 
39
39
  # Return the validation result
40
40
  #
41
+ # @param [Symbol] context
42
+ #
41
43
  # @example
42
44
  # user = User.new
43
45
  #
@@ -58,6 +60,8 @@ module Knight
58
60
 
59
61
  # Return the validator object
60
62
  #
63
+ # @param [Symbol] context
64
+ #
61
65
  # @example
62
66
  # class RegistrationValidator
63
67
  # include Knight::InstanceMethods
@@ -76,6 +80,8 @@ module Knight
76
80
 
77
81
  # Return the validator object
78
82
  #
83
+ # @param [Symbol] name
84
+ #
79
85
  # @example
80
86
  # class RegistrationValidator
81
87
  # include Knight::InstanceMethods
@@ -89,12 +95,14 @@ module Knight
89
95
  #
90
96
  # @api public
91
97
  def context(name)
92
- yield validator(name)
98
+ validator = validator(name)
99
+ validator.rules.merge(shared_rules) unless name == DEFAULT_CONTEXT
100
+ yield validator
93
101
  end
94
102
 
95
103
  private
96
104
 
97
- # Return the validators contextual based
105
+ # Return all validators
98
106
  #
99
107
  # @return [Hash]
100
108
  #
@@ -102,6 +110,15 @@ module Knight
102
110
  def validators
103
111
  @validators = @validators || {}
104
112
  end
113
+
114
+ # Return rules for default context
115
+ #
116
+ # @return [Set(Rule)]
117
+ #
118
+ # @api private
119
+ def shared_rules
120
+ validator.rules
121
+ end
105
122
  end
106
123
  end
107
124
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Knight
4
- VERSION = '0.0.3'
4
+ VERSION = '0.0.4'
5
5
  end
@@ -0,0 +1,52 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Knight do
6
+
7
+ let(:klass) do
8
+ Class.new do
9
+ include InstanceMethods
10
+
11
+ validator.add(Rule::Presence.new(:foo))
12
+
13
+ context :context1 do |validator|
14
+ validator.add(Rule::Presence.new(:bar))
15
+ end
16
+
17
+ validator.add(Rule::Presence.new(:baz))
18
+
19
+ context :default do |validator|
20
+ validator.add(Rule::Presence.new(:username))
21
+ end
22
+
23
+ context :context1 do |validator|
24
+ validator.add(Rule::Presence.new(:password))
25
+ end
26
+
27
+ context :context2 do |validator|
28
+ validator.add(Rule::Presence.new(:title))
29
+ end
30
+ end
31
+ end
32
+
33
+ context 'default context' do
34
+ subject { klass.validator }
35
+ specify { expect(subject.rules.size).to eql(3) }
36
+ end
37
+
38
+ context 'context1' do
39
+ subject { klass.validator(:context1) }
40
+ specify { expect(subject.rules.size).to eql(5) }
41
+ end
42
+
43
+ context 'context2' do
44
+ subject { klass.validator(:context2) }
45
+ specify { expect(subject.rules.size).to eql(4) }
46
+ end
47
+
48
+ context 'not exists context' do
49
+ subject { klass.validator(:registration) }
50
+ specify { expect(subject.rules.size).to eql(0) }
51
+ end
52
+ end
@@ -6,10 +6,19 @@ describe InstanceMethods, '.context' do
6
6
 
7
7
  let(:described_class) { Class.new { include InstanceMethods } }
8
8
 
9
+ it 'only call validator once' do
10
+ described_class.should_receive(:validator).once.and_return(Validator.new)
11
+ described_class.context(:default) do |validator|
12
+ validator.add Rule::Presence.new(:foo)
13
+ end
14
+ end
15
+
9
16
  it do
10
- described_class.should_receive(:validator).with(:registration).and_return(Validator.new)
17
+ described_class.validator.add(Rule::Presence.new(:foo))
11
18
  described_class.context(:registration) do |validator|
12
- validator.add Rule::Presence.new(:foo)
19
+ validator.add Rule::Presence.new(:bar)
13
20
  end
21
+ expect(described_class.validator(:default).rules.size).to eql(1)
22
+ expect(described_class.validator(:registration).rules.size).to eql(2)
14
23
  end
15
24
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: knight
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.3
5
+ version: 0.0.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Handi Wiguna
@@ -75,6 +75,7 @@ files:
75
75
  - lib/knight/version.rb
76
76
  - metrics/flog.yml
77
77
  - metrics/rubocop.yml
78
+ - spec/integration/context_spec.rb
78
79
  - spec/integration/knight_spec.rb
79
80
  - spec/spec_helper.rb
80
81
  - spec/unit/knight/error/class_methods/new_spec.rb
@@ -125,7 +126,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
125
126
  - !ruby/object:Gem::Version
126
127
  segments:
127
128
  - 0
128
- hash: -2162189312537362928
129
+ hash: 592111569675221754
129
130
  version: '0'
130
131
  none: false
131
132
  required_rubygems_version: !ruby/object:Gem::Requirement
@@ -134,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
135
  - !ruby/object:Gem::Version
135
136
  segments:
136
137
  - 0
137
- hash: -2162189312537362928
138
+ hash: 592111569675221754
138
139
  version: '0'
139
140
  none: false
140
141
  requirements: []
@@ -144,6 +145,7 @@ signing_key:
144
145
  specification_version: 3
145
146
  summary: ''
146
147
  test_files:
148
+ - spec/integration/context_spec.rb
147
149
  - spec/integration/knight_spec.rb
148
150
  - spec/spec_helper.rb
149
151
  - spec/unit/knight/error/class_methods/new_spec.rb