q-language 1.0.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.
- data/.gemtest +0 -0
- data/Rakefile +10 -0
- data/lib/q-language.rb +9 -0
- data/lib/q-language/device.rb +166 -0
- data/lib/q-language/environment.rb +358 -0
- data/lib/q-language/methods/array.rb +523 -0
- data/lib/q-language/methods/block.rb +26 -0
- data/lib/q-language/methods/class.rb +24 -0
- data/lib/q-language/methods/dynamic.rb +82 -0
- data/lib/q-language/methods/false.rb +47 -0
- data/lib/q-language/methods/hash.rb +351 -0
- data/lib/q-language/methods/implicit.rb +345 -0
- data/lib/q-language/methods/module.rb +39 -0
- data/lib/q-language/methods/nil.rb +47 -0
- data/lib/q-language/methods/number.rb +118 -0
- data/lib/q-language/methods/object.rb +155 -0
- data/lib/q-language/methods/string.rb +157 -0
- data/lib/q-language/methods/time.rb +110 -0
- data/lib/q-language/methods/token.rb +72 -0
- data/lib/q-language/methods/true.rb +14 -0
- data/lib/q-language/node.rb +45 -0
- data/lib/q-language/object.rb +125 -0
- data/lib/q-language/parser.rb +104 -0
- data/lib/q-language/writer.rb +90 -0
- data/test/methods/test_array.rb +191 -0
- data/test/methods/test_block.rb +66 -0
- data/test/methods/test_class.rb +34 -0
- data/test/methods/test_dynamic.rb +158 -0
- data/test/methods/test_false.rb +60 -0
- data/test/methods/test_hash.rb +10 -0
- data/test/methods/test_implicit.rb +332 -0
- data/test/methods/test_module.rb +55 -0
- data/test/methods/test_nil.rb +60 -0
- data/test/methods/test_number.rb +10 -0
- data/test/methods/test_object.rb +157 -0
- data/test/methods/test_string.rb +271 -0
- data/test/methods/test_time.rb +181 -0
- data/test/methods/test_token.rb +92 -0
- data/test/methods/test_true.rb +16 -0
- data/test/test.rb +23 -0
- metadata +103 -0
@@ -0,0 +1,155 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Copyright © 2010-2011 Jesse Sielaff
|
4
|
+
#
|
5
|
+
|
6
|
+
class QObject < Q_Object
|
7
|
+
def and (object)
|
8
|
+
object
|
9
|
+
end
|
10
|
+
|
11
|
+
def array?
|
12
|
+
false
|
13
|
+
end
|
14
|
+
|
15
|
+
def block?
|
16
|
+
false
|
17
|
+
end
|
18
|
+
|
19
|
+
def break_if (&block)
|
20
|
+
if result = yield
|
21
|
+
env::break!
|
22
|
+
return value
|
23
|
+
end
|
24
|
+
|
25
|
+
result
|
26
|
+
end
|
27
|
+
|
28
|
+
def break_unless (&block)
|
29
|
+
unless result = yield
|
30
|
+
env::break!
|
31
|
+
return value
|
32
|
+
end
|
33
|
+
|
34
|
+
result
|
35
|
+
end
|
36
|
+
|
37
|
+
def choose (object_1, object_2)
|
38
|
+
object_1
|
39
|
+
end
|
40
|
+
|
41
|
+
def class?
|
42
|
+
false
|
43
|
+
end
|
44
|
+
|
45
|
+
def dup
|
46
|
+
value.dup
|
47
|
+
rescue TypeError
|
48
|
+
# Duplication is disallowed
|
49
|
+
value
|
50
|
+
end
|
51
|
+
|
52
|
+
def dynamic?
|
53
|
+
false
|
54
|
+
end
|
55
|
+
|
56
|
+
def eq? (object)
|
57
|
+
value == object
|
58
|
+
end
|
59
|
+
|
60
|
+
def eqq? (object)
|
61
|
+
value === object
|
62
|
+
end
|
63
|
+
|
64
|
+
def false?
|
65
|
+
false
|
66
|
+
end
|
67
|
+
|
68
|
+
def hash?
|
69
|
+
false
|
70
|
+
end
|
71
|
+
|
72
|
+
def if (&block)
|
73
|
+
env::jump! # skip the rest of the block
|
74
|
+
yield
|
75
|
+
end
|
76
|
+
|
77
|
+
def jump_if (&block)
|
78
|
+
if result = yield
|
79
|
+
env::jump!
|
80
|
+
return value
|
81
|
+
end
|
82
|
+
|
83
|
+
result
|
84
|
+
end
|
85
|
+
|
86
|
+
def jump_unless (&block)
|
87
|
+
unless result = yield
|
88
|
+
env::jump!
|
89
|
+
return value
|
90
|
+
end
|
91
|
+
|
92
|
+
result
|
93
|
+
end
|
94
|
+
|
95
|
+
def module?
|
96
|
+
false
|
97
|
+
end
|
98
|
+
|
99
|
+
def neq? (object)
|
100
|
+
value != object
|
101
|
+
end
|
102
|
+
|
103
|
+
def nil?
|
104
|
+
false
|
105
|
+
end
|
106
|
+
|
107
|
+
def not
|
108
|
+
false
|
109
|
+
end
|
110
|
+
|
111
|
+
def number?
|
112
|
+
false
|
113
|
+
end
|
114
|
+
|
115
|
+
def or (object)
|
116
|
+
value
|
117
|
+
end
|
118
|
+
|
119
|
+
def same? (object)
|
120
|
+
value.object_id == object.object_id
|
121
|
+
end
|
122
|
+
|
123
|
+
def string?
|
124
|
+
false
|
125
|
+
end
|
126
|
+
|
127
|
+
def tally
|
128
|
+
1
|
129
|
+
end
|
130
|
+
|
131
|
+
def time?
|
132
|
+
false
|
133
|
+
end
|
134
|
+
|
135
|
+
def token?
|
136
|
+
false
|
137
|
+
end
|
138
|
+
|
139
|
+
def true?
|
140
|
+
false
|
141
|
+
end
|
142
|
+
|
143
|
+
def unless (&block)
|
144
|
+
nil
|
145
|
+
end
|
146
|
+
|
147
|
+
def use (&block)
|
148
|
+
yield value
|
149
|
+
value
|
150
|
+
end
|
151
|
+
|
152
|
+
def xor (object)
|
153
|
+
!object
|
154
|
+
end
|
155
|
+
end
|
@@ -0,0 +1,157 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Copyright © 2010-2011 Jesse Sielaff
|
4
|
+
#
|
5
|
+
|
6
|
+
class QString < QObject
|
7
|
+
def QString.from_s (string)
|
8
|
+
string
|
9
|
+
end
|
10
|
+
|
11
|
+
def add (string)
|
12
|
+
value + string
|
13
|
+
end
|
14
|
+
|
15
|
+
def add_all (*every_string)
|
16
|
+
value + every_string.join('')
|
17
|
+
end
|
18
|
+
|
19
|
+
def at (number)
|
20
|
+
value.slice(number)
|
21
|
+
end
|
22
|
+
|
23
|
+
def between? (string_1, string_2)
|
24
|
+
value.between?(string_1, string_2)
|
25
|
+
end
|
26
|
+
|
27
|
+
def capitalize
|
28
|
+
value.capitalize
|
29
|
+
end
|
30
|
+
|
31
|
+
def capitalize!
|
32
|
+
value.capitalize!
|
33
|
+
end
|
34
|
+
|
35
|
+
def clear
|
36
|
+
value.clear
|
37
|
+
end
|
38
|
+
|
39
|
+
def downcase
|
40
|
+
value.downcase
|
41
|
+
end
|
42
|
+
|
43
|
+
def downcase!
|
44
|
+
value.downcase!
|
45
|
+
end
|
46
|
+
|
47
|
+
def each (&block)
|
48
|
+
value.each_char do |obj|
|
49
|
+
result = yield obj
|
50
|
+
break result if env::break?
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def each_line (&block)
|
55
|
+
value.each_line do |obj|
|
56
|
+
result = yield obj
|
57
|
+
break result if env::break?
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def empty?
|
62
|
+
value.empty?
|
63
|
+
end
|
64
|
+
|
65
|
+
def end_with? (string)
|
66
|
+
value.end_with? string
|
67
|
+
end
|
68
|
+
|
69
|
+
def include? (string)
|
70
|
+
value.include? string
|
71
|
+
end
|
72
|
+
|
73
|
+
def index (string)
|
74
|
+
value.index(string)
|
75
|
+
end
|
76
|
+
|
77
|
+
def length
|
78
|
+
value.length
|
79
|
+
end
|
80
|
+
|
81
|
+
def next
|
82
|
+
value.next
|
83
|
+
end
|
84
|
+
|
85
|
+
def next!
|
86
|
+
value.next!
|
87
|
+
end
|
88
|
+
|
89
|
+
def partition (string)
|
90
|
+
value.partition(string)
|
91
|
+
end
|
92
|
+
|
93
|
+
def push (string)
|
94
|
+
value << string
|
95
|
+
end
|
96
|
+
|
97
|
+
def push_all (*every_string)
|
98
|
+
value << every_string.join('')
|
99
|
+
end
|
100
|
+
|
101
|
+
def replace (string)
|
102
|
+
value.replace(string)
|
103
|
+
end
|
104
|
+
|
105
|
+
def reverse
|
106
|
+
value.reverse
|
107
|
+
end
|
108
|
+
|
109
|
+
def reverse!
|
110
|
+
value.reverse!
|
111
|
+
end
|
112
|
+
|
113
|
+
def split (string)
|
114
|
+
value.split(string)
|
115
|
+
end
|
116
|
+
|
117
|
+
def start_with? (string)
|
118
|
+
value.start_with? string
|
119
|
+
end
|
120
|
+
|
121
|
+
def string?
|
122
|
+
value
|
123
|
+
end
|
124
|
+
|
125
|
+
def stringify
|
126
|
+
value.dup
|
127
|
+
end
|
128
|
+
|
129
|
+
def strip
|
130
|
+
value.strip
|
131
|
+
end
|
132
|
+
|
133
|
+
def strip!
|
134
|
+
value.strip!
|
135
|
+
value
|
136
|
+
end
|
137
|
+
|
138
|
+
def swapcase
|
139
|
+
value.swapcase
|
140
|
+
end
|
141
|
+
|
142
|
+
def swapcase!
|
143
|
+
value.swapcase!
|
144
|
+
end
|
145
|
+
|
146
|
+
def tokenize
|
147
|
+
value.to_sym
|
148
|
+
end
|
149
|
+
|
150
|
+
def upcase
|
151
|
+
value.upcase
|
152
|
+
end
|
153
|
+
|
154
|
+
def upcase!
|
155
|
+
value.upcase!
|
156
|
+
end
|
157
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Copyright © 2010-2011 Jesse Sielaff
|
4
|
+
#
|
5
|
+
|
6
|
+
class QTime < QObject
|
7
|
+
def add (number)
|
8
|
+
value + number
|
9
|
+
end
|
10
|
+
|
11
|
+
def after? (time)
|
12
|
+
value > time
|
13
|
+
end
|
14
|
+
|
15
|
+
def before? (time)
|
16
|
+
value < time
|
17
|
+
end
|
18
|
+
|
19
|
+
def between? (time_1, time_2)
|
20
|
+
value.between?(*[time_1, time_2].sort)
|
21
|
+
end
|
22
|
+
|
23
|
+
def difference (time)
|
24
|
+
value - time
|
25
|
+
end
|
26
|
+
|
27
|
+
def friday?
|
28
|
+
value.friday?
|
29
|
+
end
|
30
|
+
|
31
|
+
def hour
|
32
|
+
value.hour
|
33
|
+
end
|
34
|
+
|
35
|
+
def minute
|
36
|
+
value.min
|
37
|
+
end
|
38
|
+
|
39
|
+
def monday?
|
40
|
+
value.monday?
|
41
|
+
end
|
42
|
+
|
43
|
+
def month
|
44
|
+
value.month
|
45
|
+
end
|
46
|
+
|
47
|
+
def next
|
48
|
+
value + 1
|
49
|
+
end
|
50
|
+
|
51
|
+
def round
|
52
|
+
value.round
|
53
|
+
end
|
54
|
+
|
55
|
+
def saturday?
|
56
|
+
value.saturday?
|
57
|
+
end
|
58
|
+
|
59
|
+
def second
|
60
|
+
value.sec
|
61
|
+
end
|
62
|
+
|
63
|
+
def split
|
64
|
+
value.to_a.first(6).reverse
|
65
|
+
end
|
66
|
+
|
67
|
+
def subtract (number)
|
68
|
+
value - number
|
69
|
+
end
|
70
|
+
|
71
|
+
def sunday?
|
72
|
+
value.sunday?
|
73
|
+
end
|
74
|
+
|
75
|
+
def thursday?
|
76
|
+
value.thursday?
|
77
|
+
end
|
78
|
+
|
79
|
+
def time?
|
80
|
+
value
|
81
|
+
end
|
82
|
+
|
83
|
+
def to_number
|
84
|
+
value.to_f
|
85
|
+
end
|
86
|
+
|
87
|
+
def tuesday?
|
88
|
+
value.tuesday?
|
89
|
+
end
|
90
|
+
|
91
|
+
def wednesday?
|
92
|
+
value.wednesday?
|
93
|
+
end
|
94
|
+
|
95
|
+
def weekday
|
96
|
+
value.wday
|
97
|
+
end
|
98
|
+
|
99
|
+
def year_day
|
100
|
+
value.yday
|
101
|
+
end
|
102
|
+
|
103
|
+
def year
|
104
|
+
value.year
|
105
|
+
end
|
106
|
+
|
107
|
+
def yesterday
|
108
|
+
value - 86400
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# Copyright © 2010-2011 Jesse Sielaff
|
4
|
+
#
|
5
|
+
|
6
|
+
class QToken < QObject
|
7
|
+
def QToken.from_s (string)
|
8
|
+
string.to_sym
|
9
|
+
end
|
10
|
+
|
11
|
+
def at (number)
|
12
|
+
value[number]
|
13
|
+
end
|
14
|
+
|
15
|
+
def capitalize
|
16
|
+
value.capitalize
|
17
|
+
end
|
18
|
+
|
19
|
+
def downcase
|
20
|
+
value.downcase
|
21
|
+
end
|
22
|
+
|
23
|
+
def empty?
|
24
|
+
value.empty?
|
25
|
+
end
|
26
|
+
|
27
|
+
def get
|
28
|
+
env::get(value)
|
29
|
+
end
|
30
|
+
|
31
|
+
def iget
|
32
|
+
env::self.instance_variable_get(:"@#{value}")
|
33
|
+
rescue NameError
|
34
|
+
# Illegal name for instance variable
|
35
|
+
nil
|
36
|
+
end
|
37
|
+
|
38
|
+
def iset (object)
|
39
|
+
env::self.instance_variable_set(:"@#{value}", object)
|
40
|
+
rescue NameError
|
41
|
+
# Illegal name for instance variable
|
42
|
+
nil
|
43
|
+
end
|
44
|
+
|
45
|
+
def length
|
46
|
+
value.length
|
47
|
+
end
|
48
|
+
|
49
|
+
def next
|
50
|
+
value.next
|
51
|
+
end
|
52
|
+
|
53
|
+
def set (object)
|
54
|
+
env::set(value, object)
|
55
|
+
end
|
56
|
+
|
57
|
+
def stringify
|
58
|
+
value.to_s
|
59
|
+
end
|
60
|
+
|
61
|
+
def swapcase
|
62
|
+
value.swapcase
|
63
|
+
end
|
64
|
+
|
65
|
+
def token?
|
66
|
+
value
|
67
|
+
end
|
68
|
+
|
69
|
+
def upcase
|
70
|
+
value.upcase
|
71
|
+
end
|
72
|
+
end
|