kwalify 0.1.0 → 0.2.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.
@@ -1,4 +1,5 @@
1
1
 
2
2
  all:
3
+ kwalify -m address-book.schema.yaml
3
4
  kwalify -f address-book.schema.yaml address-book.yaml
4
5
 
@@ -1,11 +1,11 @@
1
1
  ##
2
2
  ## Kwalify schema example for address book
3
3
  ##
4
- ## $Release: 0.1.0 $
4
+ ## $Release: 0.2.0 $
5
5
  ## copyright(c) 2005 kuwata-lab all rights reserved.
6
6
  ##
7
7
  ##
8
- ## NOTE: 'type: string' is omitted in this example because 'string' is default type.
8
+ ## NOTE: 'type: str' is omitted in this example because 'str' is default type.
9
9
  ##
10
10
 
11
11
  type: seq
@@ -15,29 +15,29 @@ sequence:
15
15
  required: yes
16
16
  mapping:
17
17
  "name":
18
- #type: string
18
+ type: str
19
19
  required: yes
20
20
  "email":
21
- #type: string
21
+ type: str
22
22
  pattern: /@/
23
23
  "tel":
24
- #type: string
24
+ type: str
25
25
  pattern: /^\d+-\d+-\d+$/
26
26
  "birth":
27
27
  type: date
28
28
  "age":
29
- type: integer
29
+ type: int
30
30
  "zip":
31
- #type: string
31
+ type: str
32
32
  pattern: /^\d+-\d+$/
33
33
  "addr":
34
- #type: string
34
+ type: str
35
35
  "blood":
36
- #type: string
36
+ type: str
37
37
  enum:
38
38
  - A
39
39
  - B
40
40
  - O
41
41
  - AB
42
42
  "memo":
43
- type: object
43
+ type: any
@@ -1,3 +1,4 @@
1
1
  all:
2
+ kwalify -m invoice.schema.yaml
2
3
  kwalify -f invoice.schema.yaml invoice.yaml
3
4
 
@@ -1,37 +1,30 @@
1
1
  ###
2
2
  ### Kwalify schema example for invoice
3
3
  ###
4
- ### $Rev$
5
- ### $Release: 0.1.0 $
4
+ ### $Rev: 18 $
5
+ ### $Release: 0.2.0 $
6
6
  ### copyright(c) 2005 kuwata-lab all rights reserved.
7
7
  ###
8
8
 
9
9
  type: map
10
10
  required: yes
11
11
  mapping:
12
- "invoice":
13
- type: integer
14
- required: yes
15
- "date":
16
- type: date
17
- required: yes
12
+ "invoice": { type: int, required: yes }
13
+ "date": { type: date, required: yes }
18
14
  "bill-to": &customer
19
15
  type: map
20
16
  required: yes
21
17
  mapping:
22
- "given":
23
- required: yes
24
- "family":
25
- required: yes
18
+ "given": { type: str, required: yes }
19
+ "family": { type: str, required: yes }
26
20
  "address":
27
21
  type: map
28
22
  required: yes
29
23
  mapping:
30
- "lines":
31
- "city":
32
- "state":
33
- "postal":
34
- type: integer
24
+ "lines": { type: str }
25
+ "city": { type: str }
26
+ "state": { type: str }
27
+ "postal": { type: int }
35
28
  "ship-to": *customer
36
29
  "product":
37
30
  type: seq
@@ -40,20 +33,10 @@ mapping:
40
33
  - type: map
41
34
  required: yes
42
35
  mapping:
43
- "sku":
44
- required: yes
45
- pattern: /^[A-Z0-9]+$/
46
- "quantity":
47
- type: integer
48
- required: yes
49
- "description":
50
- "price":
51
- type: float
52
- "tax":
53
- type: float
54
- "total":
55
- type: float
56
- required: yes
57
- "comments":
58
- type: text
59
-
36
+ "sku": { type: str, required: yes, pattern: '/^[A-Z0-9]+$/' }
37
+ "quantity": { type: int, required: yes }
38
+ "description": { type: str }
39
+ "price": { type: float }
40
+ "tax": { type: float }
41
+ "total": { type: float, required: yes }
42
+ "comments": { type: str }
@@ -0,0 +1,5 @@
1
+
2
+ all:
3
+ kwalify -m tapkit.schema.yaml
4
+ kwalify -f tapkit.schema.yaml tapkit.yaml
5
+
@@ -0,0 +1,137 @@
1
+ ##
2
+ ## Kwalify schema example for TapKit
3
+ ##
4
+ ## $Release: 0.2.0 $
5
+ ## copyright(c) 2005 kuwata-lab all rights reserved.
6
+ ##
7
+
8
+ type: map
9
+ mapping:
10
+ "adapter_name":
11
+ type: str
12
+ enum:
13
+ - DBI
14
+ - CSV
15
+ #- MySQL
16
+ #- PostgreSQL
17
+ #- OpenBase
18
+ "connection":
19
+ type: map
20
+ mapping:
21
+ "url":
22
+ type: str
23
+ required: yes
24
+ "user":
25
+ type: str
26
+ "password":
27
+ type: str
28
+ "encoding":
29
+ type: str
30
+ enum:
31
+ - jis
32
+ - sjis
33
+ - euc
34
+ "path":
35
+ type: str
36
+ "entities":
37
+ type: seq
38
+ sequence:
39
+ - type: map
40
+ mapping:
41
+ "name":
42
+ type: str
43
+ required: yes
44
+ "external_name":
45
+ type: str
46
+ required: yes
47
+ "class_properties":
48
+ type: seq
49
+ required: yes
50
+ sequence:
51
+ - type: str
52
+ "primary_key_attributes":
53
+ type: seq
54
+ required: yes
55
+ sequence:
56
+ - type: str
57
+ "attributes":
58
+ type: seq
59
+ required: yes
60
+ sequence:
61
+ - type: map
62
+ mapping:
63
+ "name":
64
+ type: str
65
+ required: yes
66
+ "column_name":
67
+ type: text
68
+ required: yes
69
+ "class_name":
70
+ type: str
71
+ enum:
72
+ - String
73
+ - Integer
74
+ - Float
75
+ - Date
76
+ - Time
77
+ - Timestamp
78
+ - Boolean
79
+ "external_type":
80
+ type: str
81
+ required: yes
82
+ enum: [
83
+ char, character, varchar, char varying, character varying,
84
+ nchar, national char, national character,
85
+ national character varying, bit, bit varying,
86
+ int, integer, smallint, interval,
87
+ numeric, decimal, dec, float, real, double presicion,
88
+ date, time, timestamp
89
+ ]
90
+ "allow_null":
91
+ type: bool
92
+ "read_only":
93
+ type: bool
94
+ "width":
95
+ type: int
96
+ "factory_method":
97
+ type: str
98
+ "convertion_method":
99
+ type: str
100
+ "relationships":
101
+ type: seq
102
+ sequence:
103
+ - type: map
104
+ mapping:
105
+ "name":
106
+ type: str
107
+ required: yes
108
+ "destination":
109
+ type: str
110
+ required: yes
111
+ "joins":
112
+ type: seq
113
+ required: yes
114
+ sequence:
115
+ - type: map
116
+ mapping:
117
+ "source":
118
+ type: str
119
+ "destination":
120
+ type: str
121
+ "join-semantic":
122
+ type: str
123
+ enum:
124
+ - inner
125
+ - left_outer
126
+ - right_outer
127
+ - full_outer
128
+ "to_many":
129
+ type: bool
130
+ "mandatory":
131
+ type: bool
132
+ "delete_rule":
133
+ type: str
134
+ enum:
135
+ - nullify
136
+ - cascade
137
+ - deny
@@ -0,0 +1,85 @@
1
+ ##
2
+ ## original:
3
+ ## http://www.spice-of-life.net/tapkit/ja/TapKitUserGuide_J_c5_s6.html#doc7_1532
4
+ ##
5
+
6
+ adapter_name: DBI
7
+
8
+ connection:
9
+ url: dbi:Mysql:examples
10
+ user: mysql
11
+ password: mysql
12
+
13
+ entities:
14
+ -
15
+ name: Employee
16
+ external_name: EMPLOYEE
17
+
18
+ attributes:
19
+ -
20
+ name: employee_id
21
+ column_name: EMPLOYEE_ID
22
+ external_type: int
23
+ class_name: Integer
24
+ -
25
+ name: name
26
+ column_name: NAME
27
+ external_type: char
28
+ class_name: String
29
+ width: 64
30
+ -
31
+ name: company_id
32
+ column_name: COMPANY_ID
33
+ external_type: int
34
+ class_name: Integer
35
+
36
+ relationships:
37
+ -
38
+ name: company
39
+ destination: Company
40
+ to_many: false
41
+ joins:
42
+ -
43
+ source: company_id
44
+ destination: company_id
45
+
46
+ primary_key_attributes:
47
+ - employee_id
48
+
49
+ class_properties:
50
+ - name
51
+ - company
52
+
53
+ -
54
+ name: Company
55
+ external_name: COMPANY
56
+
57
+ attributes:
58
+ -
59
+ name: company_id
60
+ column_name: COMPANY_ID
61
+ external_type: int
62
+ class_name: Integer
63
+ -
64
+ name: name
65
+ column_name: NAME
66
+ external_type: char
67
+ class_name: String
68
+ width: 64
69
+
70
+ relationships:
71
+ -
72
+ name: employees
73
+ destination: Employee
74
+ to_many: true
75
+ joins:
76
+ -
77
+ source: company_id
78
+ destination: company_id
79
+
80
+ primary_key_attributes:
81
+ - company_id
82
+
83
+ class_properties:
84
+ - name
85
+ - employees
@@ -1,10 +1,19 @@
1
1
  ###
2
- ### $Rev: 5 $
3
- ### $Release: 0.1.0 $
2
+ ### $Rev: 18 $
3
+ ### $Release: 0.2.0 $
4
4
  ### copyright(c) 2005 kuwata-lab all rights reserved.
5
5
  ###
6
6
 
7
+
8
+ module Kwalify
9
+
10
+ RELEASE = ("$Release: 0.2.0 $" =~ /[.\d]+/) && $&
11
+
12
+ end
13
+
7
14
  require 'kwalify/types'
8
- require 'kwalify/error-msg'
15
+ require 'kwalify/messages'
9
16
  require 'kwalify/errors'
17
+ require 'kwalify/rule'
10
18
  require 'kwalify/validator'
19
+ require 'kwalify/meta-validator'
@@ -1,9 +1,11 @@
1
1
  ###
2
- ### $Rev: 8 $
3
- ### $Release: 0.1.0 $
2
+ ### $Rev: 18 $
3
+ ### $Release: 0.2.0 $
4
4
  ### copyright(c) 2005 kuwata-lab all rights reserved.
5
5
  ###
6
6
 
7
+ require 'kwalify/messages'
8
+
7
9
  module Kwalify
8
10
 
9
11
  class KwalifyError < StandardError
@@ -18,95 +20,69 @@ module Kwalify
18
20
 
19
21
 
20
22
  class BaseError < KwalifyError
21
- def initialize(message="", path=nil, schema=nil, error_symbol=nil)
23
+ def initialize(message="", path=nil, value=nil, rule=nil, error_symbol=nil)
22
24
  super(message)
23
25
  @error_symbol = error_symbol
24
- @schema = schema
26
+ @rule = rule
25
27
  @path = path
28
+ @value = value
29
+ end
30
+ attr_reader :error_symbol, :rule, :path, :value
31
+
32
+ def path
33
+ return @path == '' ? "/" : @path
34
+ end
35
+
36
+ alias :_to_s :to_s
37
+
38
+ def message
39
+ _to_s
26
40
  end
27
- attr_reader :error_symbol, :schema, :path
28
41
 
29
42
  def to_s
30
- return super() if @path == nil
31
- return "[/] #{super()}" if @path.empty?
32
- return "[#{@path}] #{super()}"
43
+ return "[#{path()}] #{message()}"
33
44
  end
34
45
  end
35
46
 
36
47
 
37
48
  class SchemaError < BaseError
38
- def initialize(message="", path=nil, schema=nil, error_symbol=nil)
39
- super(message, path, schema, error_symbol)
49
+ def initialize(message="", path=nil, rule=nil, value=nil, error_symbol=nil)
50
+ super(message, path, rule, value, error_symbol)
40
51
  end
41
52
  end
42
53
 
43
54
 
44
55
  class ValidationError < BaseError
45
- def initialize(message="", path=nil, schema=nil, error_symbol=nil, data=nil)
46
- super(message, path, schema, error_symbol)
47
- @data = data
56
+ def initialize(message="", path=nil, rule=nil, value=nil, error_symbol=nil)
57
+ super(message, path, rule, value, error_symbol)
48
58
  end
49
- attr_reader :data
50
59
  end
51
60
 
52
61
 
53
- module Errors
62
+ module ErrorHelper
54
63
 
55
64
  def assert_error(message="")
56
65
  raise AssertionError.new(message)
57
66
  end
58
67
 
59
-
60
- def error_message(error_symbol, schema, data, arg)
61
- msg = nil
62
- case error_symbol
63
-
64
- ## validation error
65
- when :missing_value
66
- msg = ERROR_MESSAGES[error_symbol]
67
- when :invalid_type
68
- msg = ERROR_MESSAGES[error_symbol] % [ schema.type, data.class.name ]
69
- when :invalid_enum
70
- msg = ERROR_MESSAGES[error_symbol] % [ data.to_s ]
71
- when :invalid_pattern
72
- msg = ERROR_MESSAGES[error_symbol] % [ data.to_s, schema.pattern.inspect ]
73
- when :missing_key
74
- msg = ERROR_MESSAGES[error_symbol] % [ arg ] # arg is keyname
75
- when :invalid_key
76
- msg = ERROR_MESSAGES[error_symbol] % [ arg ] # arg is keyname
77
-
78
- ## schema error
79
- when :unexpected_key
80
- msg = ERROR_MESSAGES[error_symbol] % [ arg ] # arg is keyname
81
- when :duplicate_key
82
- msg = ERROR_MESSAGES[error_symbol] % [ arg ] # arg is keyname
83
- when :type_not_found
84
- msg = ERROR_MESSAGES[error_symbol] % [ arg ] # arg is typename
85
- when :regexp_error
86
- msg = ERROR_MESSAGES[error_symbol] % [ data ]
87
- else
88
- msg = ERROR_MESSAGES[error_symbol]
89
- end
90
-
91
- ##
92
- return msg
68
+ def validate_error(error_symbol, rule, path, val, args=nil)
69
+ return _create_error(ValidationError, error_symbol, rule, path, val, args)
93
70
  end
94
71
 
95
-
96
- def validate_error(error_symbol, schema, path, data, arg=nil)
97
- msg = error_message(error_symbol, schema, data, arg)
98
- return ValidationError.new(msg, path, schema, error_symbol, data)
72
+ def schema_error(error_symbol, rule, path, val, args=nil)
73
+ return _create_error(SchemaError, error_symbol, rule, path, val, args)
99
74
  end
100
75
 
101
-
102
- def schema_error(error_symbol, schema, path, arg=nil)
103
- msg = error_message(error_symbol, schema, nil, arg)
104
- return SchemaError.new(msg, path, schema, error_symbol)
76
+ def _create_error(error_klass, error_symbol, rule, path, val, args)
77
+ msg = Kwalify.msg(error_symbol)
78
+ assert_error("error_symbol=#{error_symbol.inspect}") unless msg
79
+ msg = msg % args if args
80
+ msg = "'#{val.to_s.gsub(/\n/, '\n')}': #{msg}" if val != nil && Kwalify.scalar_class?(val.class)
81
+ return error_klass.new(msg, path, val, rule, error_symbol)
105
82
  end
106
83
 
107
-
108
- module_function :assert_error, :validate_error, :schema_error, :error_message
109
-
110
84
  end
111
85
 
86
+ extend ErrorHelper
87
+
112
88
  end