menilite 0.4.1 → 0.4.2
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/lib/menilite/model.rb +62 -19
- data/lib/menilite/server/router.rb +7 -7
- data/lib/menilite/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27f419ef565f994b020d022eea673453e02a6c8a
|
4
|
+
data.tar.gz: b9da18be00c27e19fa8e4c214db72adfe145eb02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f5baa982958df003abfa0d738af9238d17e5127a01861f10588b2af58a71f561ba5ccc9a2e983972a963942eabfc4b06bf37e6c2a214b625cc5d334d23c800e
|
7
|
+
data.tar.gz: 08f91b60b5eb398a0878af9703be8b1bd3b1f71a1b481ea313d05deca78db52d4030159b09521f87508794493849223a4d901fd9f361dd906a1e7b22c5f28ef3
|
data/lib/menilite/model.rb
CHANGED
@@ -13,8 +13,16 @@ class String
|
|
13
13
|
end
|
14
14
|
|
15
15
|
module Menilite
|
16
|
-
class ValidationError < StandardError
|
17
|
-
|
16
|
+
class ValidationError < StandardError
|
17
|
+
attr_reader :messages
|
18
|
+
|
19
|
+
def initialize(messages)
|
20
|
+
@messages = messages
|
21
|
+
super(messages.join(', '))
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class TypeError < StandardError; end
|
18
26
|
|
19
27
|
class Model
|
20
28
|
include Menilite::Helper
|
@@ -246,7 +254,13 @@ module Menilite
|
|
246
254
|
end
|
247
255
|
|
248
256
|
on :failure do |res|
|
249
|
-
|
257
|
+
if callback
|
258
|
+
if res.json[:result] == 'validation_error'
|
259
|
+
callback.call(:validation_error, Menilite::ValidationError.new(res.json[:messages]))
|
260
|
+
else
|
261
|
+
callback.call(:failure, res)
|
262
|
+
end
|
263
|
+
end
|
250
264
|
end
|
251
265
|
end
|
252
266
|
end
|
@@ -263,10 +277,10 @@ module Menilite
|
|
263
277
|
def validation(field_name, params = {}, &block)
|
264
278
|
params.each do |k, v|
|
265
279
|
if validator = Validators[k, v]
|
266
|
-
(validators[field_name] ||= []) << validator.new(field_name)
|
280
|
+
(validators[field_name] ||= []) << validator.new(self, field_name)
|
267
281
|
end
|
268
282
|
end
|
269
|
-
(validators[field_name] ||= []) << Validator.new(field_name, &block) if block
|
283
|
+
(validators[field_name] ||= []) << Validator.new(self, field_name, &block) if block
|
270
284
|
end
|
271
285
|
|
272
286
|
def find(id)
|
@@ -364,18 +378,15 @@ module Menilite
|
|
364
378
|
end
|
365
379
|
|
366
380
|
def validate(name, value)
|
367
|
-
|
368
|
-
if
|
369
|
-
messages =
|
370
|
-
messages.empty? or raise ValidationError.new(messages.join(','))
|
381
|
+
validators = self.class.validators[name]
|
382
|
+
if validators
|
383
|
+
messages = validators.select(&:enabled?).map {|validator| validator.validate(value) }.compact
|
371
384
|
end
|
372
385
|
end
|
373
386
|
|
374
387
|
def validate_all
|
375
|
-
self.
|
376
|
-
|
377
|
-
validate(k, v)
|
378
|
-
end
|
388
|
+
messages = self.class.field_info.flat_map {|k, info| validate(k, self.fields[k]) }.compact
|
389
|
+
messages.empty? or raise ValidationError.new(messages)
|
379
390
|
end
|
380
391
|
|
381
392
|
def to_h
|
@@ -419,17 +430,49 @@ module Menilite
|
|
419
430
|
end
|
420
431
|
|
421
432
|
class Validator
|
422
|
-
|
433
|
+
include Menilite::Helper
|
434
|
+
|
435
|
+
def initialize(klass, name, &block)
|
436
|
+
@class = klass
|
423
437
|
@proc = block
|
424
438
|
end
|
425
439
|
|
426
440
|
def validate(value)
|
427
441
|
@proc.call(value)
|
428
442
|
end
|
443
|
+
|
444
|
+
def enabled?
|
445
|
+
if server?
|
446
|
+
self.on_server
|
447
|
+
else
|
448
|
+
self.on_client
|
449
|
+
end
|
450
|
+
end
|
451
|
+
|
452
|
+
def on_server
|
453
|
+
true
|
454
|
+
end
|
455
|
+
|
456
|
+
def on_client
|
457
|
+
true
|
458
|
+
end
|
429
459
|
end
|
460
|
+
|
430
461
|
class PresenceValidator < Validator
|
431
|
-
def initialize(name)
|
432
|
-
super(name) {|value| "#{name} must not be empty" if value.nil? || value == "" }
|
462
|
+
def initialize(klass, name)
|
463
|
+
super(klass, name) {|value| "#{name} must not be empty" if value.nil? || value == "" }
|
464
|
+
end
|
465
|
+
end
|
466
|
+
|
467
|
+
class UniqueValidator < Validator
|
468
|
+
def initialize(klass, name)
|
469
|
+
super(klass, name) do |value|
|
470
|
+
"#{name}: '#{value}' already exist" unless klass.fetch(filter: { name => value }).empty?
|
471
|
+
end
|
472
|
+
end
|
473
|
+
|
474
|
+
def on_client
|
475
|
+
false
|
433
476
|
end
|
434
477
|
end
|
435
478
|
|
@@ -437,9 +480,9 @@ module Menilite
|
|
437
480
|
def self.[](key, value)
|
438
481
|
case key
|
439
482
|
when :presence
|
440
|
-
if value == true
|
441
|
-
|
442
|
-
|
483
|
+
PresenceValidator if value == true
|
484
|
+
when :unique
|
485
|
+
UniqueValidator if value == true
|
443
486
|
end
|
444
487
|
end
|
445
488
|
end
|
@@ -58,18 +58,15 @@ module Menilite
|
|
58
58
|
rescue Menilite::ErrorWithStatusCode => e
|
59
59
|
content_type :json
|
60
60
|
status e.code
|
61
|
-
|
62
|
-
{:result => 'error', :message => e.message}.to_json
|
61
|
+
{ result: 'error', message: e.message }.to_json
|
63
62
|
rescue Menilite::ValidationError => e
|
64
63
|
content_type :json
|
65
64
|
status 403
|
66
|
-
|
67
|
-
{:result => 'error', :message => e.message}.to_json
|
65
|
+
{ result: 'validation_error', message: e.message, messages: e.messages }.to_json
|
68
66
|
rescue => e
|
69
67
|
content_type :json
|
70
68
|
status 500
|
71
|
-
|
72
|
-
{:result => 'error', :message => e.message}.to_json
|
69
|
+
{ result: 'error', message: e.message }.to_json
|
73
70
|
end
|
74
71
|
|
75
72
|
enable :sessions
|
@@ -119,7 +116,10 @@ module Menilite
|
|
119
116
|
router.before_action_handlers(klass, action.name).each {|h| self.instance_eval(&h[:proc]) }
|
120
117
|
data = JSON.parse(request.body.read)
|
121
118
|
result = if action.options[:save]
|
122
|
-
klass.new(data["model"]).
|
119
|
+
klass.new(data["model"]).tap do |model|
|
120
|
+
model.send(action.name, *data["args"])
|
121
|
+
model.save
|
122
|
+
end
|
123
123
|
elsif action.options[:class]
|
124
124
|
klass.send(action.name, *data["args"])
|
125
125
|
else
|
data/lib/menilite/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: menilite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- youchan
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|