nydp 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +77 -56
- data/lib/lisp/core-000.nydp +1 -1
- data/lib/lisp/core-010-precompile.nydp +49 -29
- data/lib/lisp/core-012-utils.nydp +12 -8
- data/lib/lisp/core-015-documentation.nydp +41 -15
- data/lib/lisp/core-017-builtin-dox.nydp +621 -100
- data/lib/lisp/core-020-utils.nydp +33 -6
- data/lib/lisp/core-025-warnings.nydp +1 -1
- data/lib/lisp/core-030-syntax.nydp +64 -48
- data/lib/lisp/core-035-flow-control.nydp +20 -28
- data/lib/lisp/core-037-list-utils.nydp +84 -21
- data/lib/lisp/core-040-utils.nydp +8 -5
- data/lib/lisp/core-041-string-utils.nydp +17 -11
- data/lib/lisp/core-043-list-utils.nydp +140 -77
- data/lib/lisp/core-045-dox-utils.nydp +1 -0
- data/lib/lisp/core-050-test-runner.nydp +8 -12
- data/lib/lisp/core-070-prefix-list.nydp +19 -15
- data/lib/lisp/core-080-pretty-print.nydp +13 -5
- data/lib/lisp/core-090-hook.nydp +11 -11
- data/lib/lisp/core-100-utils.nydp +51 -66
- data/lib/lisp/core-110-hash-utils.nydp +34 -7
- data/lib/lisp/core-120-settings.nydp +14 -9
- data/lib/lisp/core-130-validations.nydp +28 -13
- data/lib/lisp/core-900-benchmarking.nydp +420 -47
- data/lib/lisp/tests/000-empty-args-examples.nydp +5 -0
- data/lib/lisp/tests/andify-examples.nydp +1 -1
- data/lib/lisp/tests/auto-hash-examples.nydp +6 -1
- data/lib/lisp/tests/best-examples.nydp +1 -1
- data/lib/lisp/tests/boot-tests.nydp +1 -1
- data/lib/lisp/tests/date-examples.nydp +129 -102
- data/lib/lisp/tests/destructuring-examples.nydp +1 -1
- data/lib/lisp/tests/dox-tests.nydp +2 -2
- data/lib/lisp/tests/hash-examples.nydp +58 -33
- data/lib/lisp/tests/list-tests.nydp +137 -1
- data/lib/lisp/tests/pretty-print-tests.nydp +12 -0
- data/lib/lisp/tests/rotate-2d-array-examples.nydp +26 -0
- data/lib/lisp/tests/sort-examples.nydp +5 -5
- data/lib/lisp/tests/string-tests.nydp +30 -5
- data/lib/lisp/tests/syntax-tests.nydp +10 -2
- data/lib/lisp/tests/time-examples.nydp +8 -1
- data/lib/lisp/tests/unparse-tests.nydp +13 -7
- data/lib/nydp/assignment.rb +15 -28
- data/lib/nydp/builtin/abs.rb +4 -3
- data/lib/nydp/builtin/apply.rb +8 -10
- data/lib/nydp/builtin/cdr_set.rb +1 -1
- data/lib/nydp/builtin/comment.rb +1 -3
- data/lib/nydp/builtin/date.rb +11 -28
- data/lib/nydp/builtin/divide.rb +3 -10
- data/lib/nydp/builtin/ensuring.rb +6 -21
- data/lib/nydp/builtin/error.rb +2 -4
- data/lib/nydp/builtin/eval.rb +9 -4
- data/lib/nydp/builtin/greater_than.rb +7 -8
- data/lib/nydp/builtin/handle_error.rb +10 -34
- data/lib/nydp/builtin/hash.rb +24 -45
- data/lib/nydp/builtin/inspect.rb +1 -3
- data/lib/nydp/builtin/is_equal.rb +4 -7
- data/lib/nydp/builtin/less_than.rb +6 -7
- data/lib/nydp/builtin/log.rb +7 -0
- data/lib/nydp/builtin/math_ceiling.rb +1 -3
- data/lib/nydp/builtin/math_floor.rb +1 -3
- data/lib/nydp/builtin/math_power.rb +1 -3
- data/lib/nydp/builtin/math_round.rb +2 -2
- data/lib/nydp/builtin/minus.rb +7 -14
- data/lib/nydp/builtin/parse.rb +5 -5
- data/lib/nydp/builtin/parse_in_string.rb +5 -7
- data/lib/nydp/builtin/plus.rb +14 -31
- data/lib/nydp/builtin/pre_compile.rb +1 -3
- data/lib/nydp/builtin/puts.rb +4 -8
- data/lib/nydp/builtin/quit.rb +1 -1
- data/lib/nydp/builtin/rand.rb +6 -11
- data/lib/nydp/builtin/random_string.rb +2 -4
- data/lib/nydp/builtin/rng.rb +25 -0
- data/lib/nydp/builtin/ruby_wrap.rb +27 -14
- data/lib/nydp/builtin/script_run.rb +1 -3
- data/lib/nydp/builtin/set_intersection.rb +3 -4
- data/lib/nydp/builtin/set_union.rb +3 -4
- data/lib/nydp/builtin/sort.rb +2 -7
- data/lib/nydp/builtin/string_match.rb +5 -13
- data/lib/nydp/builtin/string_replace.rb +2 -7
- data/lib/nydp/builtin/string_split.rb +3 -8
- data/lib/nydp/builtin/sym.rb +2 -9
- data/lib/nydp/builtin/thread_locals.rb +2 -2
- data/lib/nydp/builtin/time.rb +38 -44
- data/lib/nydp/builtin/times.rb +6 -15
- data/lib/nydp/builtin/to_integer.rb +8 -14
- data/lib/nydp/builtin/to_string.rb +2 -13
- data/lib/nydp/builtin/type_of.rb +10 -16
- data/lib/nydp/builtin/vm_info.rb +2 -10
- data/lib/nydp/builtin.rb +15 -37
- data/lib/nydp/compiler.rb +29 -19
- data/lib/nydp/cond.rb +95 -88
- data/lib/nydp/context_symbol.rb +11 -9
- data/lib/nydp/core.rb +74 -73
- data/lib/nydp/core_ext.rb +88 -24
- data/lib/nydp/date.rb +22 -19
- data/lib/nydp/error.rb +2 -3
- data/lib/nydp/function_invocation.rb +76 -289
- data/lib/nydp/helper.rb +18 -9
- data/lib/nydp/interpreted_function.rb +159 -25
- data/lib/nydp/lexical_context.rb +9 -8
- data/lib/nydp/lexical_context_builder.rb +1 -1
- data/lib/nydp/literal.rb +3 -7
- data/lib/nydp/loop.rb +72 -0
- data/lib/nydp/namespace.rb +52 -0
- data/lib/nydp/pair.rb +146 -50
- data/lib/nydp/parser.rb +9 -11
- data/lib/nydp/plugin.rb +88 -19
- data/lib/nydp/runner.rb +141 -23
- data/lib/nydp/symbol.rb +16 -26
- data/lib/nydp/symbol_lookup.rb +3 -2
- data/lib/nydp/tokeniser.rb +1 -1
- data/lib/nydp/truth.rb +2 -37
- data/lib/nydp/version.rb +1 -1
- data/lib/nydp.rb +33 -44
- data/nydp.gemspec +2 -1
- data/spec/date_spec.rb +26 -32
- data/spec/embedded_spec.rb +22 -22
- data/spec/error_spec.rb +12 -16
- data/spec/foreign_hash_spec.rb +21 -36
- data/spec/hash_non_hash_behaviour_spec.rb +12 -29
- data/spec/hash_spec.rb +36 -49
- data/spec/literal_spec.rb +6 -6
- data/spec/nydp_spec.rb +14 -14
- data/spec/pair_spec.rb +8 -8
- data/spec/parser_spec.rb +41 -37
- data/spec/rand_spec.rb +1 -4
- data/spec/spec_helper.rb +3 -3
- data/spec/string_atom_spec.rb +15 -16
- data/spec/symbol_spec.rb +27 -52
- data/spec/thread_local_spec.rb +23 -8
- data/spec/time_spec.rb +4 -10
- data/spec/tokeniser_spec.rb +10 -10
- metadata +25 -13
- data/lib/nydp/builtin/modulo.rb +0 -11
- data/lib/nydp/builtin/regexp.rb +0 -7
- data/lib/nydp/builtin/sqrt.rb +0 -7
- data/lib/nydp/builtin/string_pad_left.rb +0 -7
- data/lib/nydp/builtin/string_pad_right.rb +0 -7
- data/lib/nydp/hash.rb +0 -9
- data/lib/nydp/image_store.rb +0 -21
- data/lib/nydp/vm.rb +0 -129
data/lib/nydp/core.rb
CHANGED
@@ -2,11 +2,9 @@ require 'nydp/plugin'
|
|
2
2
|
|
3
3
|
module Nydp
|
4
4
|
class Core
|
5
|
-
|
5
|
+
include Nydp::PluginHelper
|
6
6
|
|
7
|
-
def
|
8
|
-
File.join File.expand_path(File.dirname(__FILE__)), name
|
9
|
-
end
|
7
|
+
def name ; "Nydp Core" ; end
|
10
8
|
|
11
9
|
def base_path
|
12
10
|
relative_path "../lisp/"
|
@@ -17,81 +15,84 @@ module Nydp
|
|
17
15
|
end
|
18
16
|
|
19
17
|
def loadfiles
|
20
|
-
Dir.glob(relative_path '../lisp/core-*.nydp').sort
|
18
|
+
file_readers Dir.glob(relative_path '../lisp/core-*.nydp').sort
|
21
19
|
end
|
22
20
|
|
23
21
|
def testfiles
|
24
|
-
Dir.glob(relative_path '../lisp/tests/**/*.nydp')
|
22
|
+
file_readers Dir.glob(relative_path '../lisp/tests/**/*.nydp')
|
25
23
|
end
|
26
24
|
|
27
25
|
def setup ns
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
26
|
+
ns.assign(:cons , Nydp::Builtin::RubyWrap::Cons.instance )
|
27
|
+
ns.assign(:car , Nydp::Builtin::RubyWrap::Car.instance )
|
28
|
+
ns.assign(:cdr , Nydp::Builtin::RubyWrap::Cdr.instance )
|
29
|
+
ns.assign(:log , Nydp::Builtin::Log.instance )
|
30
|
+
ns.assign(:ln , Nydp::Builtin::RubyWrap::Ln.instance )
|
31
|
+
ns.assign(:mod , Nydp::Builtin::RubyWrap::Modulo.instance )
|
32
|
+
ns.assign(:sqrt , Nydp::Builtin::RubyWrap::Sqrt.instance )
|
33
|
+
ns.assign(:regexp , Nydp::Builtin::RubyWrap::Regexp.instance )
|
34
|
+
ns.assign("string/pad-left" , Nydp::Builtin::RubyWrap::StringPadLeft.instance )
|
35
|
+
ns.assign("string/pad-right" , Nydp::Builtin::RubyWrap::StringPadRight.instance)
|
36
|
+
ns.assign("string/force-encoding", Nydp::Builtin::RubyWrap::StringForceEncoding.instance)
|
37
|
+
ns.assign("to-list" , Nydp::Builtin::RubyWrap::ToList.instance )
|
38
|
+
ns.assign(:+ , Nydp::Builtin::Plus.instance )
|
39
|
+
ns.assign(:- , Nydp::Builtin::Minus.instance )
|
40
|
+
ns.assign(:* , Nydp::Builtin::Times.instance )
|
41
|
+
ns.assign(:/ , Nydp::Builtin::Divide.instance )
|
42
|
+
ns.assign(:> , Nydp::Builtin::GreaterThan.instance )
|
43
|
+
ns.assign(:< , Nydp::Builtin::LessThan.instance )
|
44
|
+
ns.assign(:eval , Nydp::Builtin::Eval.new(ns) )
|
45
|
+
ns.assign(:false , false )
|
46
|
+
ns.assign(:hash , Nydp::Builtin::Hash.instance )
|
47
|
+
ns.assign(:apply , Nydp::Builtin::Apply.instance )
|
48
|
+
ns.assign(:date , Nydp::Builtin::Date.instance )
|
49
|
+
ns.assign(:error , Nydp::Builtin::Error.instance )
|
50
|
+
ns.assign(:parse , Nydp::Builtin::Parse.instance )
|
51
|
+
ns.assign(:p , Nydp::Builtin::Puts.instance )
|
52
|
+
ns.assign(:PI , Math::PI )
|
53
|
+
ns.assign(:"π" , Math::PI )
|
54
|
+
ns.assign(:rand , Nydp::Builtin::Rand.instance )
|
55
|
+
ns.assign(:rng , Nydp::Builtin::RNG.instance )
|
56
|
+
ns.assign(:sort , Nydp::Builtin::Sort.instance )
|
57
|
+
ns.assign(:abs , Nydp::Builtin::Abs.instance )
|
58
|
+
ns.assign(:sym , Nydp::Builtin::Sym.instance )
|
59
|
+
ns.assign(:ensuring , Nydp::Builtin::Ensuring.instance )
|
60
|
+
ns.assign(:inspect , Nydp::Builtin::Inspect.instance )
|
61
|
+
ns.assign(:comment , Nydp::Builtin::Comment.instance )
|
62
|
+
ns.assign("handle-error" , Nydp::Builtin::HandleError.instance )
|
63
|
+
ns.assign("parse-in-string" , Nydp::Builtin::ParseInString.instance )
|
64
|
+
ns.assign("random-string" , Nydp::Builtin::RandomString.instance )
|
65
|
+
ns.assign("to-string" , Nydp::Builtin::ToString.instance )
|
66
|
+
ns.assign("to-integer" , Nydp::Builtin::ToInteger.instance )
|
67
|
+
ns.assign("string-length" , Nydp::Builtin::StringLength.instance )
|
68
|
+
ns.assign("string-replace" , Nydp::Builtin::StringReplace.instance )
|
69
|
+
ns.assign("string-match" , Nydp::Builtin::StringMatch.instance )
|
70
|
+
ns.assign("string-split" , Nydp::Builtin::StringSplit.instance )
|
71
|
+
ns.assign("time" , Nydp::Builtin::Time.instance )
|
72
|
+
ns.assign("thread-locals" , Nydp::Builtin::ThreadLocals.instance )
|
73
|
+
ns.assign("type-of" , Nydp::Builtin::TypeOf.instance )
|
74
|
+
ns.assign(:"eq?" , Nydp::Builtin::IsEqual.instance )
|
75
|
+
ns.assign(:"cdr-set" , Nydp::Builtin::CdrSet.instance )
|
76
|
+
ns.assign(:"hash-get" , Nydp::Builtin::HashGet.instance )
|
77
|
+
ns.assign(:"hash-set" , Nydp::Builtin::HashSet.instance )
|
78
|
+
ns.assign(:"hash-keys" , Nydp::Builtin::HashKeys.instance )
|
79
|
+
ns.assign(:"hash-key?" , Nydp::Builtin::HashKeyPresent.instance )
|
80
|
+
ns.assign(:"hash-merge" , Nydp::Builtin::HashMerge.instance )
|
81
|
+
ns.assign(:"hash-slice" , Nydp::Builtin::HashSlice.instance )
|
82
|
+
ns.assign(:"hash-to-array" , Nydp::Builtin::HashToArray.instance )
|
83
|
+
ns.assign(:"vm-info" , Nydp::Builtin::VmInfo.instance )
|
84
|
+
ns.assign(:"pre-compile-new-expression", Nydp::Builtin::PreCompile.instance )
|
85
|
+
ns.assign(:"script-run" , Nydp::Builtin::ScriptRun.instance )
|
86
|
+
ns.assign(:"**" , Nydp::Builtin::MathPower.instance )
|
87
|
+
ns.assign(:"⌊" , Nydp::Builtin::MathFloor.instance )
|
88
|
+
ns.assign(:"math-floor" , Nydp::Builtin::MathFloor.instance )
|
89
|
+
ns.assign(:"⌈" , Nydp::Builtin::MathCeiling.instance )
|
90
|
+
ns.assign(:"math-ceiling" , Nydp::Builtin::MathCeiling.instance )
|
91
|
+
ns.assign(:"math-round" , Nydp::Builtin::MathRound.instance )
|
92
|
+
ns.assign(:"⋂" , Nydp::Builtin::SetIntersection.instance )
|
93
|
+
ns.assign(:"set-intersection", Nydp::Builtin::SetIntersection.instance )
|
94
|
+
ns.assign(:"⋃" , Nydp::Builtin::SetUnion.instance )
|
95
|
+
ns.assign(:"set-union" , Nydp::Builtin::SetUnion.instance )
|
95
96
|
end
|
96
97
|
end
|
97
98
|
end
|
data/lib/nydp/core_ext.rb
CHANGED
@@ -1,54 +1,118 @@
|
|
1
1
|
class Object
|
2
|
-
def _nydp_get a ; raise "_nydp_get : not gettable: #{a.
|
3
|
-
def _nydp_set a, v ; raise "_nydp_get : not settable: #{a.
|
4
|
-
def _nydp_keys ; []
|
5
|
-
def _nydp_wrapper
|
6
|
-
def
|
2
|
+
def _nydp_get a ; raise "_nydp_get : not gettable: #{a._nydp_inspect} on #{self.class.name}" ; end
|
3
|
+
def _nydp_set a, v ; raise "_nydp_get : not settable: #{a._nydp_inspect} on #{self.class.name}" ; end
|
4
|
+
def _nydp_keys ; [] ; end
|
5
|
+
def _nydp_wrapper ; self ; end
|
6
|
+
def _nydp_inspect ; inspect ; end
|
7
|
+
def _nydp_to_s ; to_s ; end
|
8
|
+
def _nydp_compact_inspect ; _nydp_inspect ; end
|
9
|
+
def lexical_reach n ; n ; end
|
10
|
+
def to_ruby ; self ; end
|
11
|
+
def compile_to_ruby indent, srcs, opts=nil ; "#{indent}#{inspect}" ; end
|
7
12
|
end
|
8
13
|
|
9
14
|
class Method
|
10
15
|
include Nydp::Converter
|
11
|
-
def
|
12
|
-
def invoke_2 vm, a0 ; vm.push_arg call(n2r(a0))._nydp_wrapper ; end
|
13
|
-
def invoke_3 vm, a0, a1 ; vm.push_arg call(n2r(a0), n2r(a1))._nydp_wrapper ; end
|
14
|
-
def invoke_4 vm, a0, a1, a2 ; vm.push_arg call(n2r(a0), n2r(a1), n2r(a2))._nydp_wrapper ; end
|
15
|
-
def invoke vm, args ; vm.push_arg call(*(args.map { |a| n2r a}))._nydp_wrapper ; end
|
16
|
+
def _nydp_call *args ; (call *(rubify args))._nydp_wrapper ; end
|
16
17
|
end
|
17
18
|
|
18
|
-
class
|
19
|
-
|
19
|
+
class Proc
|
20
|
+
alias _nydp_call call
|
20
21
|
end
|
21
22
|
|
22
|
-
class
|
23
|
-
def
|
23
|
+
class TrueClass
|
24
|
+
def _nydp_inspect ; 't' ; end
|
25
|
+
def assign *_ ; self ; end
|
26
|
+
def nydp_type ; :truth ; end
|
27
|
+
def _nydp_get a ; self ; end
|
28
|
+
def _nydp_set a, v ; self ; end
|
29
|
+
def _nydp_to_s ; "t" ; end
|
30
|
+
def compile_to_ruby indent, srcs, opts=nil ; "#{indent}true" ; end
|
24
31
|
end
|
25
32
|
|
26
|
-
class
|
27
|
-
|
33
|
+
class CantCallNil < NoMethodError
|
34
|
+
end
|
35
|
+
|
36
|
+
class NilClass
|
37
|
+
def car ; self ; end
|
38
|
+
def cdr ; self ; end
|
39
|
+
def size ; 0 ; end
|
40
|
+
def is? other ; self.equal? other ; end
|
41
|
+
def isnt? other ; !self.equal? other ; end
|
42
|
+
def + other ; other ; end
|
43
|
+
def copy ; self ; end
|
44
|
+
def assign *_ ; self ; end
|
45
|
+
def nydp_type ; :nil ; end
|
46
|
+
def _nydp_get a ; self ; end
|
47
|
+
def _nydp_set a, v ; self ; end
|
48
|
+
def & other ; self ; end
|
49
|
+
def | other ; other ; end
|
50
|
+
def _nydp_call *_ ; raise CantCallNil ; end
|
51
|
+
def compile_to_ruby i, s, o=nil ; "#{i}nil" ; end
|
52
|
+
end
|
53
|
+
|
54
|
+
class FalseClass
|
55
|
+
def _nydp_wrapper ; nil ; end
|
28
56
|
end
|
29
57
|
|
30
58
|
class ::Symbol
|
31
|
-
def
|
59
|
+
def _nydp_inspect
|
60
|
+
_ins = to_s
|
61
|
+
_nydp_untidy?(_ins) ? "|#{_ins.gsub(/\|/, '\|')}|" : _ins
|
62
|
+
end
|
63
|
+
|
64
|
+
def nydp_type ; :symbol ; end
|
65
|
+
# def execute vm ; self ; end
|
66
|
+
|
67
|
+
alias :inspect_before_nydp :inspect
|
68
|
+
def inspect
|
69
|
+
if self == :"#="
|
70
|
+
':"#="'
|
71
|
+
else
|
72
|
+
inspect_before_nydp
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def _nydp_untidy? s
|
79
|
+
(s == "") || (s == nil) || (s =~ /[\s\|,\(\)"]/)
|
80
|
+
end
|
32
81
|
end
|
33
82
|
|
34
83
|
class ::Date
|
35
|
-
def
|
84
|
+
def _nydp_get key ; _nydp_date.lookup key, self ; end
|
85
|
+
def _nydp_date ; @__nydp_date ||= Nydp::Date.new(self) ; end
|
86
|
+
def nydp_type ; :date ; end
|
87
|
+
end
|
88
|
+
|
89
|
+
class ::Time
|
90
|
+
@@wl = Set.new %i{ year month day hour min sec }
|
91
|
+
def _nydp_time_get key ; send(key) if @@wl.include?(key) ; end
|
92
|
+
def _nydp_get key ; _nydp_time_get(key.to_s.to_sym) ; end
|
93
|
+
def nydp_type ; :time ; end
|
36
94
|
end
|
37
95
|
|
38
96
|
class ::Array
|
39
|
-
def _nydp_wrapper ; Nydp::Pair.from_list map &:_nydp_wrapper
|
97
|
+
def _nydp_wrapper ; Nydp::Pair.from_list map &:_nydp_wrapper ; end
|
98
|
+
def _nydp_inspect ; "[" + map(&:_nydp_inspect).join(" ") + "]" ; end
|
40
99
|
end
|
41
100
|
|
42
101
|
class ::String
|
43
|
-
#
|
102
|
+
# _hex_ord only works for characters whose #ord is < 256, ie #bytes returns a single-element array
|
103
|
+
# this should allow for two-way conversion of names containing the characters in the regexp
|
104
|
+
# even though we don't use two-way conversion anywhere just yet
|
105
|
+
def _nydp_name_to_rb_name ; self.gsub(/[\x00-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]/) { |chr| "_#{chr._hex_ord}"}.to_sym ; end
|
44
106
|
def as_method_name ; self.gsub(/-/, '_').to_sym ; end
|
45
107
|
def nydp_type ; :string ; end
|
46
|
-
def
|
108
|
+
def _hex_ord ; ord.to_s(16).rjust(2, '0') ; end
|
47
109
|
end
|
48
110
|
|
49
111
|
class ::Hash
|
50
112
|
include Nydp::Helper
|
51
|
-
def _nydp_get a ; self[
|
52
|
-
def _nydp_set a, v ; self[
|
53
|
-
def _nydp_keys ; keys
|
113
|
+
def _nydp_get a ; self[a]._nydp_wrapper ; end
|
114
|
+
def _nydp_set a, v ; self[a] = v ; end
|
115
|
+
def _nydp_keys ; keys ; end
|
116
|
+
def _nydp_inspect ; "{" + map { |k,v| [k._nydp_inspect, v._nydp_inspect].join(" ")}.join(" ") + "}" ; end
|
117
|
+
def nydp_type ; :hash ; end
|
54
118
|
end
|
data/lib/nydp/date.rb
CHANGED
@@ -18,19 +18,18 @@ module Nydp
|
|
18
18
|
|
19
19
|
def initialize ruby_date ; @ruby_date = ruby_date ; end
|
20
20
|
|
21
|
-
def to_date
|
22
|
-
def to_s
|
23
|
-
def to_ruby
|
24
|
-
def inspect
|
25
|
-
def
|
26
|
-
def
|
27
|
-
def
|
28
|
-
def
|
29
|
-
def
|
30
|
-
def
|
31
|
-
def
|
32
|
-
def
|
33
|
-
def - other ; r2n(ruby_date - (is_date?(other) ? other.ruby_date : other)) ; end
|
21
|
+
def to_date ; ruby_date ; end
|
22
|
+
def to_s ; ruby_date.to_s ; end
|
23
|
+
def to_ruby ; ruby_date ; end
|
24
|
+
def inspect ; ruby_date.inspect ; end
|
25
|
+
def > other ; is_date?(other) && ruby_date > other ; end
|
26
|
+
def < other ; is_date?(other) && ruby_date < other ; end
|
27
|
+
def == other ; is_date?(other) && ruby_date == other ; end
|
28
|
+
def <=> other ; is_date?(other) && ruby_date <=> other ; end
|
29
|
+
def eql? d ; self == d ; end
|
30
|
+
def hash ; ruby_date.hash ; end
|
31
|
+
def is_date? other ; other.is_a? ::Date ; end
|
32
|
+
def - other ; ruby_date - other ; end
|
34
33
|
def + int ; int.is_a?(Integer) ? r2n(ruby_date + int) : r2n(change(*int.to_ruby)) ; end
|
35
34
|
|
36
35
|
@@pass_through = %i{ monday? tuesday? wednesday? thursday? friday? saturday? sunday? }
|
@@ -39,7 +38,8 @@ module Nydp
|
|
39
38
|
last_year next_year beginning_of_year end_of_year
|
40
39
|
last_month next_month beginning_of_month end_of_month
|
41
40
|
last_week next_week beginning_of_week end_of_week
|
42
|
-
yesterday tomorrow age
|
41
|
+
yesterday tomorrow age past?
|
42
|
+
future?
|
43
43
|
} + @@pass_through
|
44
44
|
|
45
45
|
def year y, m, d, w ; y ; end
|
@@ -47,6 +47,9 @@ module Nydp
|
|
47
47
|
def day y, m, d, w ; d ; end
|
48
48
|
def week_day y, m, d, w ; w ; end
|
49
49
|
|
50
|
+
def future? *_ ; ruby_date > ::Date.today ; end
|
51
|
+
def past? *_ ; ruby_date < ::Date.today ; end
|
52
|
+
|
50
53
|
def last_year y, m, d, w ; ruby_date.prev_year ; end
|
51
54
|
def next_year y, m, d, w ; ruby_date.next_year ; end
|
52
55
|
def beginning_of_year y, m, d, w ; build(y, 1, 1) ; end
|
@@ -76,11 +79,11 @@ module Nydp
|
|
76
79
|
class_eval "def #{n} * ; ruby_date.#{n} ; end"
|
77
80
|
end
|
78
81
|
|
79
|
-
def _nydp_keys ; @@keys.to_a
|
80
|
-
def dispatch key, y, m, d, w ; self.send(key, y, m, d, w) if _nydp_keys.include?(key)
|
81
|
-
def splat date ; [date.year, date.month, date.day, date.wday]
|
82
|
-
def lookup key, date ; r2n(dispatch(key.to_s.gsub(/-/, '_').to_sym, *splat(date)))
|
83
|
-
def _nydp_get key ; lookup key, ruby_date
|
82
|
+
def _nydp_keys ; @@keys.to_a ; end
|
83
|
+
def dispatch key, y, m, d, w ; self.send(key, y, m, d, w) if _nydp_keys.include?(key) ; end
|
84
|
+
def splat date ; [date.year, date.month, date.day, date.wday] ; end
|
85
|
+
def lookup key, date ; r2n(dispatch(key.to_s.gsub(/-/, '_').to_sym, *splat(date))) ; end
|
86
|
+
def _nydp_get key ; lookup key, ruby_date ; end
|
84
87
|
def change amount, attr
|
85
88
|
if attr == :day ; (ruby_date + amount)
|
86
89
|
elsif attr == :week ; (ruby_date + (7 * amount))
|