typero 0.9.5 → 0.9.6
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/.version +1 -1
- data/lib/typero/params.rb +4 -3
- data/lib/typero/schema.rb +42 -5
- data/lib/typero/type/type.rb +4 -0
- data/lib/typero/typero.rb +11 -62
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54d18d3e66cf73fd0d6f6c42f319cb744fb3cc3f5e11e5e4a24b961c36792a34
|
4
|
+
data.tar.gz: 65f87c041f1a498c82d707d897d93eab7294a0d373a4d9aca5ec9aefe5da27b7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a63e1a470f0e21162f3c11e40fe4977b4432bb30d3f154330840f344b1dc91c49dc453213139b8e5299f4afe587ae3bf6427fa0aabedd0cc0910188e6463ca5
|
7
|
+
data.tar.gz: 0dd2e24597fa25a0543b851fa3218fc69e129fa671c3ed52edf6110994876c14e3ceb88002ebfec130782722b51dee184cf30dbb0012384da9eba7654d8db24c
|
data/.version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.9.
|
1
|
+
0.9.6
|
data/lib/typero/params.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
# Base class for schema validation
|
1
|
+
# Base class for schema validation.
|
2
|
+
# Accepts set of params and returns hash of porsed rules
|
2
3
|
|
3
4
|
module Typero
|
4
5
|
class Params
|
@@ -114,7 +115,7 @@ module Typero
|
|
114
115
|
# db :timestamps
|
115
116
|
# db :add_index, :code -> t.add_index :code
|
116
117
|
def db *args
|
117
|
-
@db_rules.push args
|
118
|
+
@db_rules.push args.unshift(:db_rule!)
|
118
119
|
end
|
119
120
|
|
120
121
|
# set :age, type: :integer -> integer :age
|
@@ -126,4 +127,4 @@ module Typero
|
|
126
127
|
set field, *args, &block
|
127
128
|
end
|
128
129
|
end
|
129
|
-
end
|
130
|
+
end
|
data/lib/typero/schema.rb
CHANGED
@@ -1,14 +1,51 @@
|
|
1
|
+
# Typero.schema :user, type: :model do
|
2
|
+
|
3
|
+
# Typero.schema :some_name, type: :model, db: DB_LOG do
|
4
|
+
# set :name, String, req: true
|
5
|
+
# set :email, :email, req: true
|
6
|
+
# set :emails, [:email], min: 2
|
7
|
+
# end
|
8
|
+
#
|
9
|
+
# rules = Typero.schema :some_name
|
10
|
+
#
|
11
|
+
# or
|
12
|
+
#
|
13
|
+
# rules = Typero.schema do
|
14
|
+
# string :name, req: true # generic email string
|
15
|
+
# email :email, req: true # string of type email
|
16
|
+
# emails [:skills], min: 2 # list of emails in filed named "emails"
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# errors = rules.validate (@object || @hash)
|
20
|
+
# rules.valid? (@object)
|
21
|
+
# rules.validate(@object) {|errors| ... }
|
22
|
+
|
1
23
|
module Typero
|
2
24
|
class Schema
|
25
|
+
SCHEMA_STORE ||= {}
|
26
|
+
|
27
|
+
attr_reader :klass
|
28
|
+
attr_reader :schema
|
29
|
+
attr_reader :opts
|
30
|
+
|
3
31
|
# accepts dsl block to
|
4
|
-
def initialize &block
|
5
|
-
|
6
|
-
|
32
|
+
def initialize name, opts = nil, &block
|
33
|
+
if block
|
34
|
+
@opts = opts || {}
|
35
|
+
@schema = Params.new &block
|
36
|
+
|
37
|
+
if name
|
38
|
+
@klass = name
|
39
|
+
SCHEMA_STORE[name] = self
|
40
|
+
end
|
41
|
+
else
|
42
|
+
raise "Use Typero.schema(:name) to load stored schema"
|
43
|
+
end
|
7
44
|
end
|
8
45
|
|
9
46
|
# validates any instance object with hash variable interface
|
10
47
|
# it also coarces values
|
11
|
-
def validate object, options=nil
|
48
|
+
def validate object, options = nil
|
12
49
|
@options = options || {}
|
13
50
|
@object = object
|
14
51
|
@errors = {}
|
@@ -99,7 +136,7 @@ module Typero
|
|
99
136
|
schema_opts = @schema.rules[field]
|
100
137
|
opts[:array] = true if schema_opts[:array]
|
101
138
|
|
102
|
-
total << [
|
139
|
+
total << [field, type, opts]
|
103
140
|
end
|
104
141
|
|
105
142
|
out += @schema.db_rules
|
data/lib/typero/type/type.rb
CHANGED
data/lib/typero/typero.rb
CHANGED
@@ -1,26 +1,7 @@
|
|
1
|
-
# rules = Typero.schema do
|
2
|
-
# set :name, String, req: true
|
3
|
-
# set :email, :email, req: true
|
4
|
-
# set :skills, [:email], min: 2
|
5
|
-
# end
|
6
|
-
#
|
7
|
-
# or
|
8
|
-
#
|
9
|
-
# rules = Typero.schema do
|
10
|
-
# string :name, req: true
|
11
|
-
# email :email, req: true
|
12
|
-
# email [:skills], min: 2
|
13
|
-
# end
|
14
|
-
#
|
15
|
-
# errors = rules.validate @object
|
16
|
-
# rules.valid?
|
17
|
-
# rules.validate(@object) { |errors| ... }
|
18
|
-
|
19
1
|
module Typero
|
20
2
|
extend self
|
21
3
|
|
22
4
|
VERSION ||= File.read File.expand_path "../../.version", File.dirname(__FILE__)
|
23
|
-
SCHEMAS ||= {}
|
24
5
|
|
25
6
|
# check and coerce value
|
26
7
|
# Typero.type(:label) -> Typero::LabelType
|
@@ -55,45 +36,30 @@ module Typero
|
|
55
36
|
# get schema
|
56
37
|
# Typero.schema(:blog)
|
57
38
|
|
58
|
-
# get schema
|
59
|
-
# Typero.schema(:blog, :with_schema)
|
60
|
-
|
61
|
-
# get all schema names with type: model
|
39
|
+
# get all schema that matches any option
|
62
40
|
# Typero.schema(type: :model)
|
63
41
|
def schema name = nil, opts = nil, &block
|
64
42
|
klass = name.to_s.classify if name && !name.is_a?(Hash)
|
65
43
|
|
66
44
|
if block_given?
|
67
|
-
Typero
|
68
|
-
|
69
|
-
SCHEMAS[klass] = [schema, opts || {}]
|
70
|
-
end
|
71
|
-
end
|
45
|
+
# Typero.schema type: :model, db: DB_LOG do
|
46
|
+
Typero::Schema.new(klass, opts, &block)
|
72
47
|
else
|
73
|
-
# Schema not given, get schema
|
74
48
|
if name.is_a?(Hash)
|
75
|
-
#
|
49
|
+
# Schema not given, get schema
|
50
|
+
# Typero.schema type: :model
|
76
51
|
out = []
|
77
52
|
|
78
|
-
for
|
79
|
-
schema
|
80
|
-
|
81
|
-
|
53
|
+
for schema in Schema::SCHEMA_STORE.values
|
54
|
+
if schema.opts[name.keys.first] == name.values.first
|
55
|
+
out.push schema.klass
|
56
|
+
end
|
82
57
|
end
|
83
58
|
|
84
59
|
out
|
85
|
-
elsif klass
|
86
|
-
# Typero.schema :user
|
87
|
-
schema = SCHEMAS[klass]
|
88
|
-
schema ||= class_finder klass, :schema
|
89
|
-
|
90
|
-
if opts
|
91
|
-
schema
|
92
|
-
else
|
93
|
-
schema.respond_to?(:[]) ? schema[0] : schema
|
94
|
-
end
|
95
60
|
else
|
96
|
-
|
61
|
+
# Typero.schema :user
|
62
|
+
Typero::Schema::SCHEMA_STORE[klass] || raise('Schema "%s" not found' % klass)
|
97
63
|
end
|
98
64
|
end
|
99
65
|
end
|
@@ -104,21 +70,4 @@ module Typero
|
|
104
70
|
rescue ArgumentError
|
105
71
|
false
|
106
72
|
end
|
107
|
-
|
108
|
-
private
|
109
|
-
|
110
|
-
# class_finder :user, :exporter, :representer
|
111
|
-
# find first UserExporter, User::Exporter, User::Representer, UserRepresenter
|
112
|
-
def class_finder *args
|
113
|
-
name = args.shift.to_s.classify
|
114
|
-
|
115
|
-
for el in args
|
116
|
-
for separator in ['_','/']
|
117
|
-
klass = [name, el].join(separator).classify
|
118
|
-
return klass.constantize if const_defined? klass
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
nil
|
123
|
-
end
|
124
73
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: typero
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dino Reic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-12-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fast_blank
|