keka 0.3.0 → 0.4.0
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 +4 -4
- data/.ruby-version +1 -1
- data/CHANGELOG.md +3 -0
- data/Gemfile.lock +19 -3
- data/README.md +35 -0
- data/keka.gemspec +2 -2
- data/lib/keka/result.rb +26 -4
- data/lib/keka/version.rb +1 -1
- metadata +19 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9aa8d1755bf0535f2daef94a23feca6c60b0ce322ac18b61207b820ea693633
|
4
|
+
data.tar.gz: b1f9fa5f84161a955e550564906deefc249709a7b2e1032d246413f53cc9d067
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f97929bfb8fbfc6a154b4e80991183fbdf043a86ccd2b78bd800fc1c7c68cbdd8389e8840186007d8c3b5b89a8f2516f8b6c75bd8408ef3084edabdb4281b9c
|
7
|
+
data.tar.gz: 887aa03c1d48f8d304bcf599cb5352e4462e54b647f53697b7a1860d38c21f0a38abef0f164eeff159498845d36f38518c309fe0eea2cc07b0ddab866369ac5e
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.6.6
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,18 +1,30 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
keka (0.
|
4
|
+
keka (0.4.0)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
+
activemodel (6.1.0)
|
10
|
+
activesupport (= 6.1.0)
|
11
|
+
activesupport (6.1.0)
|
12
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
13
|
+
i18n (>= 1.6, < 2)
|
14
|
+
minitest (>= 5.1)
|
15
|
+
tzinfo (~> 2.0)
|
16
|
+
zeitwerk (~> 2.3)
|
9
17
|
coderay (1.1.2)
|
18
|
+
concurrent-ruby (1.1.7)
|
10
19
|
diff-lcs (1.3)
|
20
|
+
i18n (1.8.5)
|
21
|
+
concurrent-ruby (~> 1.0)
|
11
22
|
method_source (0.9.2)
|
23
|
+
minitest (5.14.2)
|
12
24
|
pry (0.12.2)
|
13
25
|
coderay (~> 1.1.0)
|
14
26
|
method_source (~> 0.9.0)
|
15
|
-
rake (
|
27
|
+
rake (13.0.1)
|
16
28
|
rspec (3.9.0)
|
17
29
|
rspec-core (~> 3.9.0)
|
18
30
|
rspec-expectations (~> 3.9.0)
|
@@ -26,15 +38,19 @@ GEM
|
|
26
38
|
diff-lcs (>= 1.2.0, < 2.0)
|
27
39
|
rspec-support (~> 3.9.0)
|
28
40
|
rspec-support (3.9.2)
|
41
|
+
tzinfo (2.0.4)
|
42
|
+
concurrent-ruby (~> 1.0)
|
43
|
+
zeitwerk (2.4.2)
|
29
44
|
|
30
45
|
PLATFORMS
|
31
46
|
ruby
|
32
47
|
|
33
48
|
DEPENDENCIES
|
49
|
+
activemodel
|
34
50
|
bundler (~> 1.16)
|
35
51
|
keka!
|
36
52
|
pry
|
37
|
-
rake (~>
|
53
|
+
rake (~> 13.0)
|
38
54
|
rspec (~> 3.7)
|
39
55
|
|
40
56
|
BUNDLED WITH
|
data/README.md
CHANGED
@@ -120,6 +120,41 @@ def invalid_example
|
|
120
120
|
end
|
121
121
|
```
|
122
122
|
|
123
|
+
### ActiveRecord (ActiveModel) support
|
124
|
+
|
125
|
+
One of the most common boundary conditions is validation.
|
126
|
+
|
127
|
+
```ruby
|
128
|
+
class User
|
129
|
+
validates :name, :city, presence: true
|
130
|
+
end
|
131
|
+
|
132
|
+
if User.new(name: nil, city: nil).valid?
|
133
|
+
# do something
|
134
|
+
else
|
135
|
+
# return errors
|
136
|
+
end
|
137
|
+
```
|
138
|
+
|
139
|
+
Keka supports `ActiveModel::Errors` as `msg` argument to return full message and errors per fields
|
140
|
+
|
141
|
+
```ruby
|
142
|
+
user = User.new(name: nil, city: nil)
|
143
|
+
|
144
|
+
result = Keka.run do
|
145
|
+
Keka.err_unless! user.valid?, user.errors
|
146
|
+
end
|
147
|
+
|
148
|
+
puts result.ok?
|
149
|
+
# => false
|
150
|
+
|
151
|
+
puts result.msg
|
152
|
+
# => "Name can't be blank, City can't be blank"
|
153
|
+
|
154
|
+
puts result.errors
|
155
|
+
# => {name: ["can't be blank"], city: ["can't be blank"]}
|
156
|
+
```
|
157
|
+
|
123
158
|
## Development
|
124
159
|
|
125
160
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/keka.gemspec
CHANGED
@@ -33,8 +33,8 @@ Gem::Specification.new do |spec|
|
|
33
33
|
spec.require_paths = ["lib"]
|
34
34
|
|
35
35
|
spec.add_development_dependency "bundler", "~> 1.16"
|
36
|
-
spec.add_development_dependency "rake", "~>
|
36
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
37
37
|
spec.add_development_dependency "rspec", "~> 3.7"
|
38
38
|
spec.add_development_dependency 'pry'
|
39
|
-
|
39
|
+
spec.add_development_dependency 'activemodel'
|
40
40
|
end
|
data/lib/keka/result.rb
CHANGED
@@ -1,17 +1,39 @@
|
|
1
1
|
module Keka
|
2
2
|
class Result
|
3
|
-
|
4
|
-
|
5
|
-
def initialize(is_success, msg)
|
3
|
+
def initialize(is_success, msg_or_errors)
|
6
4
|
@is_success = is_success
|
7
|
-
@
|
5
|
+
@msg_or_errors = msg_or_errors
|
8
6
|
end
|
9
7
|
|
10
8
|
def ok?
|
11
9
|
is_success
|
12
10
|
end
|
13
11
|
|
12
|
+
def msg=(msg_or_errors)
|
13
|
+
@msg_or_errors = msg_or_errors
|
14
|
+
end
|
15
|
+
|
16
|
+
def msg
|
17
|
+
return @msg_or_errors if @msg_or_errors.is_a?(String)
|
18
|
+
return @msg_or_errors.full_messages.join(', ') if active_model_error?
|
19
|
+
|
20
|
+
@msg_or_errors
|
21
|
+
end
|
22
|
+
|
23
|
+
def errors
|
24
|
+
return {} if ok?
|
25
|
+
return {base: [@msg_or_errors]} if @msg_or_errors.is_a?(String)
|
26
|
+
return @msg_or_errors.messages if active_model_error?
|
27
|
+
|
28
|
+
{}
|
29
|
+
end
|
30
|
+
|
14
31
|
private
|
15
32
|
attr_reader :is_success
|
33
|
+
|
34
|
+
def active_model_error?
|
35
|
+
Object.const_defined?("ActiveModel") &&
|
36
|
+
@msg_or_errors.is_a?(ActiveModel::Errors)
|
37
|
+
end
|
16
38
|
end
|
17
39
|
end
|
data/lib/keka/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: keka
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- zino
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '13.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '13.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: activemodel
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
description: No more ad hoc passage of boolean results and error messages.
|
70
84
|
email:
|
71
85
|
- zinocodes@gmail.com
|
@@ -112,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
126
|
- !ruby/object:Gem::Version
|
113
127
|
version: '0'
|
114
128
|
requirements: []
|
115
|
-
rubygems_version: 3.0.
|
129
|
+
rubygems_version: 3.0.3
|
116
130
|
signing_key:
|
117
131
|
specification_version: 4
|
118
132
|
summary: Better handle short-circuit logic, result state, and return message
|