object-template 0.4 → 0.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 76d8da44dc2938f0d1e550a68f8db2bbd036b748
4
- data.tar.gz: 523ee826c82b15d1ce165dde2f379ba565c6e4c4
3
+ metadata.gz: 0fa8ca2bf4796154808248e6699f83e7b563ab1f
4
+ data.tar.gz: 0981786792b58f0288f5e62ee6a06c4d04764129
5
5
  SHA512:
6
- metadata.gz: b841e59e678cf59835379afd5378a91c87c1cfd5090c7e41b332f75ee94f1633f4361147da8ced800a7576fddb62ecbd4e7294ead0bedd6930384f8570ff16b2
7
- data.tar.gz: b12e0c975089a8315a7e0a2643c36ced151d43d75012553f491786db5596bc822fb188903648ea44a67a51e474cefa6d318631c66bf7b247f6846b1058600cbd
6
+ metadata.gz: 8778e3da7d5b23710b8e3fda65d67b821f5fcedf315377dafa57fbefeb3e127a2b7a99600912372d7520bf49e250e996591b492233cced0e091fdd464bee2985
7
+ data.tar.gz: df1183acc120dbd01e2d9054a5ff252a2c0dfb16ed5b76f42418929a575e36a7ffc83627e1c65f7205da90488e026641136b7518f9507dc3ac9def9f62564031
@@ -2,7 +2,7 @@ require 'set'
2
2
 
3
3
  # Base class for classes of templates used to match somewhat arbitrary objects.
4
4
  class ObjectTemplate
5
- VERSION = "0.4"
5
+ VERSION = "0.5"
6
6
 
7
7
  attr_reader :spec
8
8
 
@@ -138,6 +138,7 @@ class PortableObjectTemplate < ObjectTemplate
138
138
  CLASS_FOR = {
139
139
  "boolean" => BOOLEAN,
140
140
  "number" => Numeric,
141
+ "integer" => Integer,
141
142
  "string" => String,
142
143
  "list" => Array,
143
144
  "map" => Hash
@@ -146,4 +147,58 @@ class PortableObjectTemplate < ObjectTemplate
146
147
  CLASS_FOR.default_proc = proc do |h,k|
147
148
  raise ArgumentError, "no known class for matching type #{k.inspect}"
148
149
  end
150
+
151
+ # Convert a ROT spec into a POT spec (without creating a ROT). Not completely
152
+ # general: some POTs cannot be represented in this way.
153
+ def self.spec_from rot_spec
154
+ case rot_spec
155
+ when Array
156
+ rot_spec.map do |col_rot_spec|
157
+ column_spec_from(col_rot_spec)
158
+ end
159
+ when Hash
160
+ h = {}
161
+ rot_spec.each do |k, col_rot_spec|
162
+ h[k] = column_spec_from(col_rot_spec)
163
+ end
164
+ h
165
+ else
166
+ raise ArgumentError
167
+ end
168
+ end
169
+
170
+ def self.column_spec_from col_rot_spec
171
+ case col_rot_spec
172
+ when nil
173
+ nil
174
+
175
+ when Range
176
+ range = col_rot_spec
177
+ raise if range.exclude_end? ##
178
+ raise unless range.first.kind_of? Numeric ##
179
+ {type: "number", range: [range.first, range.last]}
180
+
181
+ when Module
182
+ mdl = col_rot_spec
183
+ class_name,_ = CLASS_FOR.find {|k,v| v == mdl}
184
+ raise unless class_name
185
+ {type: class_name}
186
+
187
+ when Regexp
188
+ rx = col_rot_spec
189
+ {regex: rx.source}
190
+
191
+ when MemberMatchingSet
192
+ set = col_rot_spec
193
+ if set == BOOLEAN
194
+ ## awkward API: must reference PortableObjectTemplate::BOOLEAN
195
+ {type: "boolean"}
196
+ else
197
+ {set: set.to_a}
198
+ end
199
+
200
+ else # assume it is a value
201
+ {value: col_rot_spec}
202
+ end
203
+ end
149
204
  end
data/test/test-match.rb CHANGED
@@ -113,6 +113,7 @@ ne3 ["foo"], [/o{3,}/], [{regex: "o{3,}"}]
113
113
  eq3 [true], [TrueClass], [{type: "boolean"}]
114
114
  eq3 [false], [FalseClass], [{type: "boolean"}]
115
115
  eq3 [42], [Numeric], [{type: "number"}]
116
+ eq3 [42], [Integer], [{type: "integer"}]
116
117
  eq3 ["foo"], [String], [{type: "string"}]
117
118
  eq3 [[1,2,3]], [Array], [{type: "list"}]
118
119
  eq3 [{a:1, b:2}], [Hash], [{type: "map"}]
@@ -120,6 +121,7 @@ eq3 [{a:1, b:2}], [Hash], [{type: "map"}]
120
121
  ne3 ["42"], [TrueClass], [{type: "boolean"}]
121
122
  ne3 [0], [FalseClass], [{type: "boolean"}]
122
123
  ne3 ["42"], [Numeric], [{type: "number"}]
124
+ ne3 [42.5], [Integer], [{type: "integer"}]
123
125
  ne3 [123], [String], [{type: "string"}]
124
126
  ne3 [{a:1, b:2}], [Array], [{type: "list"}]
125
127
  ne3 [[1,2,3]], [Hash], [{type: "map"}]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: object-template
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.4'
4
+ version: '0.5'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel VanderWerf
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-08 00:00:00.000000000 Z
11
+ date: 2014-01-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Templates for matching objects.
14
14
  email: vjoel@users.sourceforge.net
@@ -18,17 +18,17 @@ extra_rdoc_files:
18
18
  - README.md
19
19
  - COPYING
20
20
  files:
21
- - README.md
22
21
  - COPYING
22
+ - README.md
23
23
  - Rakefile
24
- - lib/object-template.rb
25
- - bench/lib/bench.rb
26
24
  - bench/bench-match.rb
25
+ - bench/lib/bench.rb
26
+ - lib/object-template.rb
27
27
  - test/lib/assert-threequal.rb
28
28
  - test/lib/eq3.rb
29
- - test/test-match.rb
30
- - test/test-key-conv.rb
31
29
  - test/test-errors.rb
30
+ - test/test-key-conv.rb
31
+ - test/test-match.rb
32
32
  homepage: https://github.com/vjoel/object-template
33
33
  licenses:
34
34
  - BSD
@@ -57,12 +57,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
57
57
  version: '0'
58
58
  requirements: []
59
59
  rubyforge_project:
60
- rubygems_version: 2.1.11
60
+ rubygems_version: 2.2.1
61
61
  signing_key:
62
62
  specification_version: 4
63
63
  summary: Templates for matching objects
64
64
  test_files:
65
- - test/test-match.rb
66
65
  - test/test-key-conv.rb
66
+ - test/test-match.rb
67
67
  - test/test-errors.rb
68
68
  has_rdoc: