nydp 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/lisp/core-012-utils.nydp +19 -5
- data/lib/lisp/core-015-documentation.nydp +6 -3
- data/lib/lisp/core-017-builtin-dox.nydp +35 -30
- data/lib/lisp/core-030-syntax.nydp +24 -23
- data/lib/lisp/core-035-flow-control.nydp +3 -3
- data/lib/lisp/core-037-list-utils.nydp +24 -14
- data/lib/lisp/core-040-utils.nydp +22 -14
- data/lib/lisp/core-041-string-utils.nydp +12 -8
- data/lib/lisp/core-043-list-utils.nydp +3 -9
- data/lib/lisp/core-045-dox-utils.nydp +5 -0
- data/lib/lisp/core-100-utils.nydp +27 -12
- data/lib/lisp/core-110-hash-utils.nydp +7 -0
- data/lib/lisp/core-120-settings.nydp +35 -0
- data/lib/lisp/{core-060-benchmarking.nydp → core-900-benchmarking.nydp} +47 -17
- data/lib/lisp/tests/cdr-set-examples.nydp +6 -0
- data/lib/lisp/tests/date-examples.nydp +2 -0
- data/lib/lisp/tests/foundation-test.nydp +12 -0
- data/lib/lisp/tests/hash-examples.nydp +1 -1
- data/lib/lisp/tests/set-intersection-examples.nydp +16 -0
- data/lib/lisp/tests/set-union-examples.nydp +8 -0
- data/lib/lisp/tests/settings-examples.nydp +24 -0
- data/lib/lisp/tests/sort-examples.nydp +8 -0
- data/lib/lisp/tests/string-tests.nydp +9 -0
- data/lib/lisp/tests/zap-examples.nydp +12 -0
- data/lib/nydp.rb +3 -4
- data/lib/nydp/builtin/cdr_set.rb +1 -6
- data/lib/nydp/builtin/handle_error.rb +1 -1
- data/lib/nydp/builtin/hash.rb +3 -44
- data/lib/nydp/core_ext.rb +41 -0
- data/lib/nydp/date.rb +18 -20
- data/lib/nydp/hash.rb +5 -6
- data/lib/nydp/helper.rb +9 -25
- data/lib/nydp/string_atom.rb +14 -19
- data/lib/nydp/symbol.rb +40 -27
- data/lib/nydp/truth.rb +9 -2
- data/lib/nydp/version.rb +1 -1
- data/lib/nydp/vm.rb +0 -2
- data/spec/date_spec.rb +22 -22
- data/spec/hash_non_hash_behaviour_spec.rb +2 -2
- data/spec/spec_helper.rb +4 -1
- data/spec/symbol_spec.rb +31 -0
- data/spec/time_spec.rb +1 -1
- metadata +9 -3
@@ -0,0 +1,7 @@
|
|
1
|
+
(chapter-start 'hash-manipulation "utilities for manipulating, accessing and altering hash objects")
|
2
|
+
|
3
|
+
; return values for each key in hash 'h
|
4
|
+
(def hash-values (h) (map (fn (k) h.,k) (hash-keys h)))
|
5
|
+
|
6
|
+
; (auto-hash a b c) same as { a a b b c c }
|
7
|
+
(mac auto-hash names `(brace-list ,@(flatten:map λn(list n n) names)))
|
@@ -0,0 +1,35 @@
|
|
1
|
+
(chapter-start 'settings "Utilities for managing settings")
|
2
|
+
|
3
|
+
(assign settings {})
|
4
|
+
|
5
|
+
; convert expr to a function that returns the expr, unless expr is a symbol in which case we assume it already refers to a fn
|
6
|
+
(def settings/fn (expr)
|
7
|
+
(if (sym? expr) expr
|
8
|
+
(or (atom? expr) (no expr)) `(k ,expr)
|
9
|
+
`(fn (_) ,expr)))
|
10
|
+
|
11
|
+
; update value of setting 'name
|
12
|
+
(mac set-setting (name value)
|
13
|
+
`(do (hash-cons (dox-item-by-type 'setting ',(sym name))
|
14
|
+
'values
|
15
|
+
{ plugin this-plugin script this-script value ',value })
|
16
|
+
(hash-set settings ',(sym name) ,(settings/fn value))))
|
17
|
+
|
18
|
+
(mac def-setting (name initial)
|
19
|
+
; define a setting in the given 'context with a 'name and an 'initial value, with a 'doc to explain it
|
20
|
+
; if value is a function, it is invoked with 'context and 'name to retrieve its value
|
21
|
+
; if value is a constant, it is wrapped in a function to return the constant
|
22
|
+
(let context (car:string-split name ".")
|
23
|
+
`(do (dox-add-doc ',(sym name)
|
24
|
+
'setting
|
25
|
+
',(fetch-and-clear-comments)
|
26
|
+
nil
|
27
|
+
'(def-setting ,name ,initial)
|
28
|
+
'(,(sym "settings/~context"))
|
29
|
+
{ setting { default ',initial context ',context name ',name } })
|
30
|
+
(set-setting ,(sym name) ,initial))))
|
31
|
+
|
32
|
+
; get the value of the given setting
|
33
|
+
(def setting (name)
|
34
|
+
(on-err (error "can't get value of setting ~name")
|
35
|
+
((hash-get settings (sym name)) name)))
|
@@ -159,21 +159,49 @@
|
|
159
159
|
;; (= h.ca v1) (= h.cb v2) (= h.cc v3) (= h.ca v4) (= h.cb v5) (= h.cc v6)
|
160
160
|
;; (= h.da v1) (= h.db v2) (= h.dc v3) (= h.da v4) (= h.db v5) (= h.dc v6)))
|
161
161
|
|
162
|
-
(def bm-
|
163
|
-
(
|
164
|
-
(
|
165
|
-
(
|
166
|
-
|
167
|
-
(
|
168
|
-
(
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
(
|
175
|
-
(
|
176
|
-
(
|
162
|
+
;; (def bm-acc ()
|
163
|
+
;; (accum z
|
164
|
+
;; (z 0) (z 1) (z 2) (z 3) (z 4) (z 5) (z 6) (z 7) (z 8) (z 9)
|
165
|
+
;; (z 0) (z 1) (z 2) (z 3) (z 4) (z 5) (z 6) (z 7) (z 8) (z 9)
|
166
|
+
;; (z 0) (z 1) (z 2) (z 3) (z 4) (z 5) (z 6) (z 7) (z 8) (z 9)
|
167
|
+
;; (z 0) (z 1) (z 2) (z 3) (z 4) (z 5) (z 6) (z 7) (z 8) (z 9)
|
168
|
+
;; (z 0) (z 1) (z 2) (z 3) (z 4) (z 5) (z 6) (z 7) (z 8) (z 9)
|
169
|
+
;; (z 0) (z 1) (z 2) (z 3) (z 4) (z 5) (z 6) (z 7) (z 8) (z 9)
|
170
|
+
;; (z 0) (z 1) (z 2) (z 3) (z 4) (z 5) (z 6) (z 7) (z 8) (z 9)
|
171
|
+
;; (z 0) (z 1) (z 2) (z 3) (z 4) (z 5) (z 6) (z 7) (z 8) (z 9)
|
172
|
+
;; (z 0) (z 1) (z 2) (z 3) (z 4) (z 5) (z 6) (z 7) (z 8) (z 9)))
|
173
|
+
|
174
|
+
;; (def bm-facc ()
|
175
|
+
;; (faccum z
|
176
|
+
;; (z 0) (z 1) (z 2) (z 3) (z 4) (z 5) (z 6) (z 7) (z 8) (z 9)
|
177
|
+
;; (z 0) (z 1) (z 2) (z 3) (z 4) (z 5) (z 6) (z 7) (z 8) (z 9)
|
178
|
+
;; (z 0) (z 1) (z 2) (z 3) (z 4) (z 5) (z 6) (z 7) (z 8) (z 9)
|
179
|
+
;; (z 0) (z 1) (z 2) (z 3) (z 4) (z 5) (z 6) (z 7) (z 8) (z 9)
|
180
|
+
;; (z 0) (z 1) (z 2) (z 3) (z 4) (z 5) (z 6) (z 7) (z 8) (z 9)
|
181
|
+
;; (z 0) (z 1) (z 2) (z 3) (z 4) (z 5) (z 6) (z 7) (z 8) (z 9)
|
182
|
+
;; (z 0) (z 1) (z 2) (z 3) (z 4) (z 5) (z 6) (z 7) (z 8) (z 9)
|
183
|
+
;; (z 0) (z 1) (z 2) (z 3) (z 4) (z 5) (z 6) (z 7) (z 8) (z 9)
|
184
|
+
;; (z 0) (z 1) (z 2) (z 3) (z 4) (z 5) (z 6) (z 7) (z 8) (z 9)))
|
185
|
+
|
186
|
+
(in-private
|
187
|
+
(def bm-j ()
|
188
|
+
(j "abc" '(d e f (g h i)) (list "jk" "lm")))
|
189
|
+
|
190
|
+
(def bm-or-lex-lex-lex (a b c) (or a b c))
|
191
|
+
(def bm-faster-or ()
|
192
|
+
(bm-or-lex-lex-lex 1 2 3)
|
193
|
+
(bm-or-lex-lex-lex nil 2 3))
|
194
|
+
|
195
|
+
(def build-mapsum-data (count data)
|
196
|
+
(if (> count 0)
|
197
|
+
(build-mapsum-data (- count 1)
|
198
|
+
(cons { mappit (rand 10) }
|
199
|
+
data))
|
200
|
+
data))
|
201
|
+
|
202
|
+
(let mapsum-data (build-mapsum-data 1000)
|
203
|
+
(def bm-mapsum () (mapsum &mappit mapsum-data))
|
204
|
+
(def bm-mapreduce () (mapreduce &mappit + mapsum-data 0))))
|
177
205
|
|
178
206
|
|
179
207
|
|
@@ -197,8 +225,10 @@
|
|
197
225
|
|
198
226
|
(def rbs (name)
|
199
227
|
(let summary nil
|
200
|
-
(push (bm "
|
201
|
-
(push (bm "
|
228
|
+
;; (push (bm "accum " bm-acc 10 500) summary)
|
229
|
+
;; (push (bm "accum " bm-facc 10 500) summary)
|
230
|
+
;; (push (bm "mapsum " bm-mapsum 10 100) summary)
|
231
|
+
;; (push (bm "mapreduce " bm-mapreduce 10 100) summary)
|
202
232
|
;; (push (bm "cond with OR " bm-faster-or 10 40000) summary)
|
203
233
|
;; (push (bm "cond with OR " bm-cond-9 10 40000) summary)
|
204
234
|
;; (push (bm "cond with OR " bm-cond-9 10 100000) summary)
|
@@ -18,6 +18,8 @@
|
|
18
18
|
("navigates to week end from sun" (let d (date 2015 11 1) (to-string d.end-of-week)) "2015-11-01" )
|
19
19
|
("navigates to week end" (let d (date 2015 11 6) (to-string d.end-of-week)) "2015-11-08" )
|
20
20
|
|
21
|
+
("parses string" (let d (date "2004-03-12") (list d.year d.month d.day)) (2004 3 12))
|
22
|
+
|
21
23
|
("can act as hash key"
|
22
24
|
(with (h {} d (date 2015 11 8))
|
23
25
|
(hash-set h d "on this day")
|
@@ -169,3 +169,15 @@
|
|
169
169
|
("argument default value is nil"
|
170
170
|
( (fn (x y z) (list x y (car z))) 'a 'b )
|
171
171
|
(a b nil)))
|
172
|
+
|
173
|
+
(examples-for do
|
174
|
+
("executes its content"
|
175
|
+
(let premesolithic 3
|
176
|
+
(do
|
177
|
+
(assign premesolithic (* premesolithic 4))
|
178
|
+
(let jurassic 17
|
179
|
+
(do
|
180
|
+
(= jurassic (+ jurassic premesolithic))
|
181
|
+
(= premesolithic (+ jurassic premesolithic))
|
182
|
+
(* premesolithic 2)))))
|
183
|
+
82))
|
@@ -3,14 +3,30 @@
|
|
3
3
|
(⋂ '(a b c))
|
4
4
|
(a b c))
|
5
5
|
|
6
|
+
("returns a single nil arg"
|
7
|
+
(⋂ nil)
|
8
|
+
nil)
|
9
|
+
|
6
10
|
("returns intersection of two args"
|
7
11
|
(⋂ '(a b c) '(a b d))
|
8
12
|
(a b))
|
9
13
|
|
14
|
+
("returns intersection of list and nil"
|
15
|
+
(⋂ '(a b c) nil)
|
16
|
+
nil)
|
17
|
+
|
18
|
+
("returns intersection of nil and list"
|
19
|
+
(⋂ nil '(a b c))
|
20
|
+
nil)
|
21
|
+
|
10
22
|
("returns intersection of three args"
|
11
23
|
(⋂ '(a b c d e) '(a b c d f) '(z b c d g))
|
12
24
|
(b c d))
|
13
25
|
|
26
|
+
("returns intersection of list, nil, and another list"
|
27
|
+
(⋂ '(a b c d e) nil '(z b c d g))
|
28
|
+
nil)
|
29
|
+
|
14
30
|
("returns intersection of four args"
|
15
31
|
(⋂ '(a b c d e) '(a b c d f) '(z b d c g) '(z y g c d))
|
16
32
|
(c d)))
|
@@ -7,10 +7,18 @@
|
|
7
7
|
(⋃ '(a b c) '(a b d))
|
8
8
|
(a b c d))
|
9
9
|
|
10
|
+
("returns union of arg and nil"
|
11
|
+
(⋃ '(a b c) nil)
|
12
|
+
(a b c))
|
13
|
+
|
10
14
|
("returns union of three args"
|
11
15
|
(⋃ '(a b c d e) '(a b c d f) '(z b c d g))
|
12
16
|
(a b c d e f z g))
|
13
17
|
|
18
|
+
("returns union of arg nil arg"
|
19
|
+
(⋃ '(a b c d e) nil '(z b c d g))
|
20
|
+
(a b c d e z g))
|
21
|
+
|
14
22
|
("returns union of four args"
|
15
23
|
(⋃ '(a b c d e) '(a b c d f) '(z b d c g) '(z y g c d))
|
16
24
|
(a b c d e f z g y)))
|
@@ -0,0 +1,24 @@
|
|
1
|
+
(examples-for settings/fn
|
2
|
+
("returns arg if it is a sym"
|
3
|
+
(settings/fn 'foobar)
|
4
|
+
foobar)
|
5
|
+
|
6
|
+
("returns fn wrapper for arg if it is a string"
|
7
|
+
(settings/fn "hello")
|
8
|
+
(k "hello"))
|
9
|
+
|
10
|
+
("returns fn wrapper for arg if it is a number"
|
11
|
+
(settings/fn 42)
|
12
|
+
(k 42))
|
13
|
+
|
14
|
+
("returns fn wrapper for arg if it is nil"
|
15
|
+
(settings/fn nil)
|
16
|
+
(k nil))
|
17
|
+
|
18
|
+
("wraps arg in a fn expression if it is a hash"
|
19
|
+
(settings/fn '{ a 1 b 2 })
|
20
|
+
(fn (_) { a 1 b 2 }))
|
21
|
+
|
22
|
+
("wraps arg in a fn expression if it is a complex expression"
|
23
|
+
(settings/fn '(let foo this that (rfnwith (complex stuff) (%td.tricky#syntax))))
|
24
|
+
(fn (_) (let foo this that (rfnwith (complex stuff) ((percent-syntax || (dot-syntax td tricky#syntax))))))))
|
@@ -28,3 +28,11 @@
|
|
28
28
|
(sort-by len
|
29
29
|
'("short" "very long" "sport" "very song" "min" "max"))
|
30
30
|
("max" "min" "sport" "short" "very song" "very long")))
|
31
|
+
|
32
|
+
(examples-for safe-sort-by
|
33
|
+
("sorts a list of hashes by a specified key"
|
34
|
+
(let hh (list { a 1 b 2 } { b 9 } { a 3 b 1 } { a nil b 8 })
|
35
|
+
(pp (safe-sort-by &a 99 hh)))
|
36
|
+
"({ a 1 b 2 } { a 3 b 1 }
|
37
|
+
{ a nil b 8 }
|
38
|
+
{ b 9 })"))
|
@@ -24,6 +24,15 @@
|
|
24
24
|
(string-replace "and|or" "x" "a and b or c and d")
|
25
25
|
"a x b x c x d"))
|
26
26
|
|
27
|
+
(examples-for string-truncate
|
28
|
+
("truncates a string to the given length"
|
29
|
+
(string-truncate "a and b and c and d" 8)
|
30
|
+
"a and b ")
|
31
|
+
|
32
|
+
("truncate to zero"
|
33
|
+
(string-truncate "a and b and long and complex" 0)
|
34
|
+
""))
|
35
|
+
|
27
36
|
(examples-for string-match
|
28
37
|
("no match returns nil"
|
29
38
|
(string-match "this that another" "XXXX")
|
data/lib/nydp.rb
CHANGED
@@ -7,11 +7,9 @@ module Nydp
|
|
7
7
|
|
8
8
|
# TODO: write VM #apply_function so we have fewer calls to VM.new
|
9
9
|
def self.apply_function ns, function_name, *args
|
10
|
-
function = r2n(function_name.to_sym, ns).value
|
11
|
-
args = r2n args, ns
|
12
10
|
vm = VM.new(ns)
|
13
|
-
|
14
|
-
function.invoke vm, args
|
11
|
+
function = Symbol.mk(function_name.to_sym, ns).value
|
12
|
+
function.invoke vm, r2n(args)
|
15
13
|
vm.thread
|
16
14
|
end
|
17
15
|
|
@@ -89,6 +87,7 @@ require "nydp/error"
|
|
89
87
|
require "nydp/truth"
|
90
88
|
require "nydp/version"
|
91
89
|
require "nydp/helper"
|
90
|
+
require 'nydp/core_ext'
|
92
91
|
require "nydp/symbol"
|
93
92
|
require "nydp/symbol_lookup"
|
94
93
|
require "nydp/pair"
|
data/lib/nydp/builtin/cdr_set.rb
CHANGED
@@ -1,10 +1,5 @@
|
|
1
1
|
class Nydp::Builtin::CdrSet
|
2
2
|
include Nydp::Builtin::Base, Singleton
|
3
3
|
|
4
|
-
def builtin_invoke vm, args
|
5
|
-
pair = args.car
|
6
|
-
arg = args.cdr.car
|
7
|
-
pair.cdr = arg
|
8
|
-
vm.push_arg pair
|
9
|
-
end
|
4
|
+
def builtin_invoke vm, args ; vm.push_arg(args.car.cdr = args.cdr.car) ; end
|
10
5
|
end
|
data/lib/nydp/builtin/hash.rb
CHANGED
@@ -10,49 +10,15 @@ end
|
|
10
10
|
class Nydp::Builtin::HashGet
|
11
11
|
include Nydp::Helper, Nydp::Builtin::Base, Singleton
|
12
12
|
def builtin_invoke vm, args
|
13
|
-
|
14
|
-
key = args.cdr.car
|
15
|
-
case hsh
|
16
|
-
when Nydp::Hash
|
17
|
-
vm.push_arg(hsh[key] || Nydp::NIL)
|
18
|
-
when NilClass, Nydp::NIL
|
19
|
-
vm.push_arg Nydp::NIL
|
20
|
-
else
|
21
|
-
v = hsh.respond_to?(:[]) ? hsh[n2r key] : ruby_call(hsh, key)
|
22
|
-
vm.push_arg(r2n v, vm.ns)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def ruby_call obj, method_name
|
27
|
-
if obj.respond_to? :_nydp_safe_methods
|
28
|
-
m = n2r(method_name).to_s.to_sym
|
29
|
-
allowed = obj._nydp_safe_methods
|
30
|
-
|
31
|
-
obj.send n2r(m) if allowed.include?(m)
|
32
|
-
else
|
33
|
-
raise "hash-get: Not a hash: #{obj.class.name}"
|
34
|
-
end
|
13
|
+
vm.push_arg(args.car._nydp_get(args.cdr.car)._nydp_wrapper || Nydp::NIL)
|
35
14
|
end
|
36
15
|
end
|
37
16
|
|
38
17
|
class Nydp::Builtin::HashSet
|
39
18
|
include Nydp::Helper, Nydp::Builtin::Base, Singleton
|
40
19
|
def builtin_invoke vm, args
|
41
|
-
hash = args.car
|
42
|
-
key = args.cdr.car
|
43
20
|
value = args.cdr.cdr.car
|
44
|
-
|
45
|
-
when Nydp::Hash
|
46
|
-
hash[key] = value
|
47
|
-
when NilClass, Nydp::NIL
|
48
|
-
nil
|
49
|
-
else
|
50
|
-
if hash.respond_to?(:[]=)
|
51
|
-
hash[n2r key] = n2r value
|
52
|
-
else
|
53
|
-
raise "hash-set: Not a hash: #{hash.class.name}"
|
54
|
-
end
|
55
|
-
end
|
21
|
+
args.car._nydp_set(args.cdr.car, value)
|
56
22
|
vm.push_arg value
|
57
23
|
end
|
58
24
|
end
|
@@ -60,14 +26,7 @@ end
|
|
60
26
|
class Nydp::Builtin::HashKeys
|
61
27
|
include Nydp::Helper, Nydp::Builtin::Base, Singleton
|
62
28
|
def builtin_invoke vm, args
|
63
|
-
|
64
|
-
if hash.is_a? Nydp::Hash
|
65
|
-
vm.push_arg Nydp::Pair.from_list hash.keys
|
66
|
-
elsif hash.respond_to?(:keys)
|
67
|
-
vm.push_arg r2n(hash.keys.to_a.sort, vm.ns)
|
68
|
-
else
|
69
|
-
vm.push_arg Nydp::NIL
|
70
|
-
end
|
29
|
+
vm.push_arg args.car._nydp_keys._nydp_wrapper
|
71
30
|
end
|
72
31
|
end
|
73
32
|
|
@@ -0,0 +1,41 @@
|
|
1
|
+
class Object
|
2
|
+
def _nydp_get a ; raise "_nydp_get : not gettable: #{a.inspect} on #{self.class.name}" ; end
|
3
|
+
def _nydp_set a, v ; raise "_nydp_get : not settable: #{a.inspect} on #{self.class.name}" ; end
|
4
|
+
def _nydp_keys ; [] ; end
|
5
|
+
def _nydp_wrapper ; self ; end
|
6
|
+
end
|
7
|
+
|
8
|
+
class NilClass
|
9
|
+
def _nydp_wrapper ; Nydp::NIL ; end
|
10
|
+
end
|
11
|
+
|
12
|
+
class FalseClass
|
13
|
+
def _nydp_wrapper ; Nydp::NIL ; end
|
14
|
+
end
|
15
|
+
|
16
|
+
class TrueClass
|
17
|
+
def _nydp_wrapper ; Nydp::T ; end
|
18
|
+
end
|
19
|
+
|
20
|
+
class ::Symbol
|
21
|
+
def _nydp_wrapper ; Nydp::FrozenSymbol.mk(self) ; end
|
22
|
+
end
|
23
|
+
|
24
|
+
class ::Date
|
25
|
+
def _nydp_wrapper ; Nydp::Date.new self ; end
|
26
|
+
end
|
27
|
+
|
28
|
+
class ::Array
|
29
|
+
def _nydp_wrapper ; Nydp::Pair.from_list map &:_nydp_wrapper ; end
|
30
|
+
end
|
31
|
+
|
32
|
+
class ::String
|
33
|
+
def _nydp_wrapper ; Nydp::StringAtom.new self ; end
|
34
|
+
end
|
35
|
+
|
36
|
+
class ::Hash
|
37
|
+
include Nydp::Helper
|
38
|
+
def _nydp_get a ; self[n2r a] ; end
|
39
|
+
def _nydp_set a, v ; self[n2r a] = n2r(v) ; end
|
40
|
+
def _nydp_keys ; keys ; end
|
41
|
+
end
|
data/lib/nydp/date.rb
CHANGED
@@ -16,23 +16,21 @@ module Nydp
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
def initialize ruby_date
|
20
|
-
@ruby_date = ruby_date
|
21
|
-
end
|
19
|
+
def initialize ruby_date ; @ruby_date = ruby_date ; end
|
22
20
|
|
23
|
-
def to_s ; ruby_date.to_s
|
24
|
-
def to_ruby ; ruby_date
|
25
|
-
def inspect ; ruby_date.inspect
|
26
|
-
def nydp_type ; :date
|
27
|
-
def +
|
28
|
-
def >
|
29
|
-
def <
|
30
|
-
def ==
|
31
|
-
def <=> other ; is_date?(other) && ruby_date <=> other.ruby_date
|
32
|
-
def eql?
|
33
|
-
def hash ; ruby_date.hash
|
34
|
-
def is_date? other ; other.is_a? Nydp::Date
|
35
|
-
def - other ; r2n(ruby_date - (is_date?(other) ? other.ruby_date : other)
|
21
|
+
def to_s ; ruby_date.to_s ; end
|
22
|
+
def to_ruby ; ruby_date ; end
|
23
|
+
def inspect ; ruby_date.inspect ; end
|
24
|
+
def nydp_type ; :date ; end
|
25
|
+
def + int ; r2n(ruby_date + int) ; end
|
26
|
+
def > other ; is_date?(other) && ruby_date > other.ruby_date ; end
|
27
|
+
def < other ; is_date?(other) && ruby_date < other.ruby_date ; end
|
28
|
+
def == other ; is_date?(other) && ruby_date == other.ruby_date ; end
|
29
|
+
def <=> other ; is_date?(other) && ruby_date <=> other.ruby_date ; end
|
30
|
+
def eql? d ; self == d ; end
|
31
|
+
def hash ; ruby_date.hash ; end
|
32
|
+
def is_date? other ; other.is_a? Nydp::Date ; end
|
33
|
+
def - other ; r2n(ruby_date - (is_date?(other) ? other.ruby_date : other)) ; end
|
36
34
|
|
37
35
|
@@pass_through = %i{ monday? tuesday? wednesday? thursday? friday? saturday? sunday? }
|
38
36
|
@@keys = Set.new %i{
|
@@ -70,17 +68,17 @@ module Nydp
|
|
70
68
|
class_eval "def #{n} * ; ruby_date.#{n} ; end"
|
71
69
|
end
|
72
70
|
|
73
|
-
def
|
74
|
-
def dispatch key, y, m, d, w ; self.send(key, y, m, d, w) if
|
71
|
+
def _nydp_keys ; @@keys.to_a ; end
|
72
|
+
def dispatch key, y, m, d, w ; self.send(key, y, m, d, w) if _nydp_keys.include?(key) ; end
|
75
73
|
|
76
|
-
def
|
74
|
+
def _nydp_get key
|
77
75
|
key = key.to_s.gsub(/-/, '_').to_sym
|
78
76
|
y = ruby_date.year
|
79
77
|
m = ruby_date.month
|
80
78
|
d = ruby_date.day
|
81
79
|
w = ruby_date.wday
|
82
80
|
|
83
|
-
r2n(dispatch(key, y, m, d, w)
|
81
|
+
r2n(dispatch(key, y, m, d, w))
|
84
82
|
end
|
85
83
|
end
|
86
84
|
end
|