matthewtodd-doily 0.1.1 → 0.1.2

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/Rakefile CHANGED
@@ -5,7 +5,7 @@ require 'cucumber/rake/task'
5
5
 
6
6
  spec = Gem::Specification.new do |s|
7
7
  s.name = 'doily'
8
- s.version = '0.1.1'
8
+ s.version = '0.1.2'
9
9
  s.summary = 'A Javascript (function) interpreter for Ruby.'
10
10
  s.files = FileList['Rakefile', '*.rdoc', 'features/**/*', 'lib/**/*', 'test/**/*'].to_a
11
11
  s.rdoc_options = %W[--main README.rdoc --title #{s.name}-#{s.version} --inline-source --line-numbers --all]
@@ -11,10 +11,18 @@ Feature: Chef Nodes
11
11
  | 'node' | 'thulucandra' | { 'fqdn' => 'thulucandra.example.com' } | nil |
12
12
  | 'openid_registration' | 'glarb_example_com' | 'do not matter' | 'does not matter' |
13
13
 
14
+ Scenario: Parsing the Node Design Document
15
+ When I parse the design document for 'Node'
16
+ Then I should see
17
+ | key |
18
+ | 'language' |
19
+ | 'version' |
20
+ | 'views' |
21
+
14
22
  Scenario: Coverage
15
23
  When I list all the views for 'Node'
16
24
  Then I should see
17
- | name |
25
+ | key |
18
26
  | 'all' |
19
27
  | 'all_id' |
20
28
  | 'by_run_list' |
@@ -10,10 +10,18 @@ Feature: Chef OpenID Registrations
10
10
  | 'openid_registration' | 'validated_org' | true |
11
11
  | 'role' | 'foo' | 'does not matter' |
12
12
 
13
+ Scenario: Parsing the OpenIDRegistration Design Document
14
+ When I parse the design document for 'OpenIDRegistration'
15
+ Then I should see
16
+ | key |
17
+ | 'language' |
18
+ | 'version' |
19
+ | 'views' |
20
+
13
21
  Scenario: Coverage
14
22
  When I list all the views for 'OpenIDRegistration'
15
23
  Then I should see
16
- | name |
24
+ | key |
17
25
  | 'all' |
18
26
  | 'all_id' |
19
27
  | 'unvalidated' |
@@ -10,12 +10,20 @@ Feature: Chef Roles
10
10
  | 'role' | 'database server' |
11
11
  | 'openid_registration' | 'glarb_example_com' |
12
12
 
13
+ Scenario: Parsing the Role Design Document
14
+ When I parse the design document for 'Role'
15
+ Then I should see
16
+ | key |
17
+ | 'language' |
18
+ | 'version' |
19
+ | 'views' |
20
+
13
21
  Scenario: Coverage
14
22
  When I list all the views for 'Role'
15
23
  Then I should see
16
- | name |
17
- | 'all' |
18
- | 'all_id' |
24
+ | key |
25
+ | 'all' |
26
+ | 'all_id' |
19
27
 
20
28
  Scenario: Getting all Roles
21
29
  When I get the 'all' view for 'Role'
@@ -3,9 +3,12 @@ Given /^these documents$/ do |table|
3
3
  @documents = table.hashes
4
4
  end
5
5
 
6
+ When /^I parse the design document for '(.+)'$/ do |klass|
7
+ @results = sorted_keys(Doily(chef_design_document(klass).to_json))
8
+ end
9
+
6
10
  When /^I list all the views for '(.+)'$/ do |klass|
7
- @results = []
8
- chef_view_functions(klass).keys.sort.each { |key| @results.push('name' => key)}
11
+ @results = sorted_keys(chef_view_functions(klass))
9
12
  end
10
13
 
11
14
  When /^I get the '(.+)' view for '(.+)'$/ do |name, klass|
@@ -17,4 +20,4 @@ end
17
20
  Then /^I should see$/ do |table|
18
21
  evaluate_table_values(table)
19
22
  @results.should == table.hashes
20
- end
23
+ end
@@ -14,8 +14,12 @@ class CouchDBView
14
14
  end
15
15
  end
16
16
 
17
+ def chef_design_document(klass)
18
+ Chef.const_get(klass)::DESIGN_DOCUMENT
19
+ end
20
+
17
21
  def chef_view_functions(klass)
18
- Chef.const_get(klass)::DESIGN_DOCUMENT.fetch('views')
22
+ chef_design_document(klass).fetch('views')
19
23
  end
20
24
 
21
25
  def chef_view(klass, name)
@@ -25,3 +29,9 @@ end
25
29
  def evaluate_table_values(table)
26
30
  table.raw[0].each { |column| table.map_column!(column) { |value| eval(value) }}
27
31
  end
32
+
33
+ def sorted_keys(hash)
34
+ results = []
35
+ hash.keys.sort.each { |key| results.push('key' => key)}
36
+ results
37
+ end
data/lib/doily/parser.rb CHANGED
@@ -13,7 +13,7 @@ module Doily
13
13
 
14
14
  class Parser < Racc::Parser
15
15
 
16
- module_eval <<'..end lib/doily/parser.y modeval..id2fd58564af', 'lib/doily/parser.y', 115
16
+ module_eval <<'..end lib/doily/parser.y modeval..idcb4ebcabfd', 'lib/doily/parser.y', 116
17
17
 
18
18
  def self.parse(string)
19
19
  new.parse(string)
@@ -47,11 +47,13 @@ module_eval <<'..end lib/doily/parser.y modeval..id2fd58564af', 'lib/doily/parse
47
47
  @tokens.push [m, m]
48
48
  when m = scanner.scan(/[a-zA-Z_]+/)
49
49
  @tokens.push [:IDENTIFIER, m]
50
- when m = scanner.scan(/"([^"])*"/)
50
+ when m = scanner.scan(/"(?:\\.|[^"])*"/)
51
51
  @tokens.push [:STRING_LITERAL, m]
52
- when m = scanner.scan(/'([^'])*'/)
52
+ when m = scanner.scan(/'(?:\\.|[^'])*'/)
53
53
  @tokens.push [:STRING_LITERAL, m]
54
- when m = scanner.scan(/\d+/)
54
+ when m = scanner.scan(/(?:-)?\d+\.\d+/)
55
+ @tokens.push [:FLOATING_POINT_LITERAL, m]
56
+ when m = scanner.scan(/(?:-)?\d+/)
55
57
  @tokens.push [:INTEGER_LITERAL, m]
56
58
  else
57
59
  raise ParseError.new(scanner)
@@ -65,146 +67,153 @@ module_eval <<'..end lib/doily/parser.y modeval..id2fd58564af', 'lib/doily/parse
65
67
  def next_token
66
68
  @tokens.shift
67
69
  end
68
- ..end lib/doily/parser.y modeval..id2fd58564af
70
+ ..end lib/doily/parser.y modeval..idcb4ebcabfd
69
71
 
70
72
  ##### racc 1.4.5 generates ###
71
73
 
72
74
  racc_reduce_table = [
73
75
  0, 0, :racc_error,
74
- 1, 25, :_reduce_none,
75
- 3, 25, :_reduce_2,
76
- 5, 26, :_reduce_3,
77
- 0, 28, :_reduce_4,
78
- 1, 28, :_reduce_5,
79
- 3, 28, :_reduce_6,
80
- 2, 29, :_reduce_7,
81
- 3, 29, :_reduce_8,
82
- 1, 30, :_reduce_9,
83
- 2, 30, :_reduce_10,
84
- 1, 31, :_reduce_none,
85
- 1, 31, :_reduce_none,
86
- 2, 31, :_reduce_none,
87
- 5, 32, :_reduce_14,
88
- 7, 32, :_reduce_15,
89
- 9, 33, :_reduce_16,
90
- 1, 34, :_reduce_none,
91
- 1, 34, :_reduce_none,
92
- 1, 34, :_reduce_none,
93
- 1, 34, :_reduce_none,
94
- 1, 34, :_reduce_none,
76
+ 1, 26, :_reduce_none,
77
+ 3, 26, :_reduce_2,
78
+ 5, 27, :_reduce_3,
79
+ 0, 29, :_reduce_4,
80
+ 1, 29, :_reduce_5,
81
+ 3, 29, :_reduce_6,
82
+ 2, 30, :_reduce_7,
83
+ 3, 30, :_reduce_8,
84
+ 1, 31, :_reduce_9,
85
+ 2, 31, :_reduce_10,
86
+ 1, 32, :_reduce_none,
87
+ 1, 32, :_reduce_none,
88
+ 2, 32, :_reduce_none,
89
+ 5, 33, :_reduce_14,
90
+ 7, 33, :_reduce_15,
91
+ 9, 34, :_reduce_16,
95
92
  1, 35, :_reduce_none,
96
- 1, 35, :_reduce_23,
97
- 1, 35, :_reduce_24,
98
93
  1, 35, :_reduce_none,
99
- 3, 35, :_reduce_26,
100
- 3, 35, :_reduce_27,
101
- 3, 35, :_reduce_28,
102
- 4, 35, :_reduce_29,
103
- 4, 35, :_reduce_30,
104
- 1, 40, :_reduce_31,
94
+ 1, 35, :_reduce_none,
95
+ 1, 35, :_reduce_none,
96
+ 1, 35, :_reduce_none,
97
+ 1, 36, :_reduce_none,
98
+ 1, 36, :_reduce_23,
99
+ 1, 36, :_reduce_24,
100
+ 1, 36, :_reduce_25,
101
+ 1, 36, :_reduce_none,
102
+ 3, 36, :_reduce_27,
103
+ 3, 36, :_reduce_28,
104
+ 3, 36, :_reduce_29,
105
+ 4, 36, :_reduce_30,
106
+ 4, 36, :_reduce_31,
105
107
  1, 41, :_reduce_32,
106
- 0, 27, :_reduce_33,
107
- 1, 27, :_reduce_34,
108
- 3, 27, :_reduce_35,
109
- 3, 44, :_reduce_36,
110
- 0, 42, :_reduce_37,
111
- 1, 42, :_reduce_38,
112
- 3, 42, :_reduce_39,
113
- 0, 43, :_reduce_40,
114
- 1, 43, :_reduce_41,
115
- 3, 43, :_reduce_42,
116
- 3, 37, :_reduce_43,
117
- 2, 36, :_reduce_44,
118
- 3, 38, :_reduce_45,
119
- 2, 39, :_reduce_46 ]
120
-
121
- racc_reduce_n = 47
122
-
123
- racc_shift_n = 87
108
+ 1, 42, :_reduce_33,
109
+ 0, 28, :_reduce_34,
110
+ 1, 28, :_reduce_35,
111
+ 3, 28, :_reduce_36,
112
+ 3, 45, :_reduce_37,
113
+ 0, 43, :_reduce_38,
114
+ 1, 43, :_reduce_39,
115
+ 3, 43, :_reduce_40,
116
+ 0, 44, :_reduce_41,
117
+ 1, 44, :_reduce_42,
118
+ 3, 44, :_reduce_43,
119
+ 3, 38, :_reduce_44,
120
+ 2, 37, :_reduce_45,
121
+ 3, 39, :_reduce_46,
122
+ 2, 40, :_reduce_47 ]
123
+
124
+ racc_reduce_n = 48
125
+
126
+ racc_shift_n = 88
124
127
 
125
128
  racc_action_table = [
126
- 54, 2, 55, 43, 21, 23, 8, 25, 78, 18,
127
- 62, 1, 63, 59, 54, 20, 55, 43, 21, 23,
128
- 8, 25, 67, 18, 53, 64, 50, 59, 85, 20,
129
- 43, 21, 23, 8, 25, 59, 18, 43, 21, 23,
130
- 8, 25, 20, 18, 43, 21, 23, 8, 25, 20,
131
- 18, 43, 21, 23, 8, 25, 20, 18, 43, 21,
132
- 23, 8, 25, 20, 18, 43, 21, 23, 8, 25,
133
- 20, 18, 77, 21, 23, 8, 25, 20, 18, 59,
134
- 21, 23, 8, 25, 20, 18, 48, 21, 23, 8,
135
- 25, 20, 18, 37, 21, 23, 8, 25, 20, 18,
136
- 68, 21, 23, 8, 25, 20, 18, 69, 21, 23,
137
- 8, 25, 20, 18, 61, 70, 60, 29, 15, 20,
138
- 29, 30, 59, 31, 30, 29, 31, 34, 29, 30,
139
- 8, 31, 30, 65, 31, 29, 29, 49, 82, 30,
140
- 30, 31, 31, 59, 27, 26, 8, 16, 15, 13,
141
- 12, 34, 11, 81, 10, 34, 9, 8, 34 ]
129
+ 42, 1, 46, 47, 23, 24, 9, 28, 20, 79,
130
+ 21, 63, 2, 64, 60, 42, 25, 46, 47, 23,
131
+ 24, 9, 28, 20, 33, 21, 43, 65, 34, 71,
132
+ 35, 25, 47, 23, 24, 9, 28, 20, 33, 21,
133
+ 66, 67, 34, 59, 35, 25, 47, 23, 24, 9,
134
+ 28, 20, 33, 21, 69, 57, 34, 53, 35, 25,
135
+ 47, 23, 24, 9, 28, 20, 33, 21, 58, 9,
136
+ 34, 12, 35, 25, 47, 23, 24, 9, 28, 20,
137
+ 70, 21, 29, 9, 18, 17, 60, 25, 47, 23,
138
+ 24, 9, 28, 20, 33, 21, 16, 15, 34, 14,
139
+ 35, 25, 47, 23, 24, 9, 28, 20, 13, 21,
140
+ 23, 24, 9, 28, 20, 25, 21, 23, 24, 9,
141
+ 28, 20, 25, 21, 23, 24, 9, 28, 20, 25,
142
+ 21, 23, 24, 9, 28, 20, 25, 21, 23, 24,
143
+ 9, 28, 20, 25, 21, 23, 24, 9, 28, 20,
144
+ 25, 21, 62, 86, 29, 33, 78, 25, 12, 34,
145
+ 60, 35, 61, 60, 83, 82, 10, 60, 29, 60,
146
+ 9, 5, 29 ]
142
147
 
143
148
  racc_action_check = [
144
- 57, 0, 57, 57, 57, 57, 57, 57, 76, 57,
145
- 43, 0, 45, 76, 34, 57, 34, 34, 34, 34,
146
- 34, 34, 52, 34, 34, 46, 33, 52, 84, 34,
147
- 60, 60, 60, 60, 60, 84, 60, 78, 78, 78,
148
- 78, 78, 60, 78, 68, 68, 68, 68, 68, 78,
149
- 68, 69, 69, 69, 69, 69, 68, 69, 29, 29,
150
- 29, 29, 29, 69, 29, 82, 82, 82, 82, 82,
151
- 29, 82, 75, 59, 59, 59, 59, 82, 59, 75,
152
- 30, 30, 30, 30, 59, 30, 31, 13, 13, 13,
153
- 13, 30, 13, 28, 49, 49, 49, 49, 13, 49,
154
- 54, 61, 61, 61, 61, 49, 61, 55, 20, 20,
155
- 20, 20, 61, 20, 39, 56, 38, 39, 27, 20,
156
- 74, 39, 38, 39, 74, 72, 74, 26, 47, 72,
157
- 18, 72, 47, 47, 47, 32, 19, 32, 80, 32,
158
- 19, 32, 19, 80, 15, 14, 11, 10, 9, 7,
159
- 6, 77, 5, 79, 3, 81, 2, 1, 85 ]
149
+ 52, 0, 52, 52, 52, 52, 52, 52, 52, 76,
150
+ 52, 42, 0, 46, 76, 29, 52, 29, 29, 29,
151
+ 29, 29, 29, 29, 56, 29, 29, 47, 56, 56,
152
+ 56, 29, 79, 79, 79, 79, 79, 79, 74, 79,
153
+ 50, 51, 74, 37, 74, 79, 64, 64, 64, 64,
154
+ 64, 64, 22, 64, 54, 35, 22, 32, 22, 64,
155
+ 83, 83, 83, 83, 83, 83, 36, 83, 36, 21,
156
+ 36, 18, 36, 83, 33, 33, 33, 33, 33, 33,
157
+ 55, 33, 17, 13, 12, 11, 55, 33, 63, 63,
158
+ 63, 63, 63, 63, 73, 63, 10, 8, 73, 7,
159
+ 73, 63, 70, 70, 70, 70, 70, 70, 6, 70,
160
+ 25, 25, 25, 25, 25, 70, 25, 58, 58, 58,
161
+ 58, 58, 25, 58, 34, 34, 34, 34, 34, 58,
162
+ 34, 62, 62, 62, 62, 62, 34, 62, 15, 15,
163
+ 15, 15, 15, 62, 15, 60, 60, 60, 60, 60,
164
+ 15, 60, 41, 85, 78, 41, 75, 60, 5, 41,
165
+ 85, 41, 40, 75, 81, 80, 3, 40, 82, 81,
166
+ 2, 1, 86 ]
160
167
 
161
168
  racc_action_pointer = [
162
- -1, 148, 142, 154, nil, 136, 137, 128, nil, 140,
163
- 147, 137, nil, 80, 130, 128, nil, nil, 121, 122,
164
- 101, nil, nil, nil, nil, nil, 115, 110, 80, 52,
165
- 73, 78, 121, 7, 11, nil, nil, nil, 100, 103,
166
- nil, nil, nil, 2, nil, -11, 10, 114, nil, 87,
167
- nil, nil, 5, nil, 86, 93, 102, -3, nil, 66,
168
- 24, 94, nil, nil, nil, nil, nil, nil, 38, 45,
169
- nil, nil, 111, nil, 106, 57, -9, 139, 31, 149,
170
- 121, 143, 59, nil, 13, 146, nil ]
169
+ -1, 156, 161, 166, nil, 150, 91, 85, 75, nil,
170
+ 96, 69, 67, 74, nil, 131, nil, 69, 63, nil,
171
+ nil, 60, 37, nil, nil, 103, nil, nil, nil, 12,
172
+ nil, nil, 43, 68, 117, 47, 51, 23, nil, nil,
173
+ 144, 140, -4, nil, nil, nil, -2, 19, nil, nil,
174
+ 16, 27, -3, nil, 38, 63, 9, nil, 110, nil,
175
+ 138, nil, 124, 82, 40, nil, nil, nil, nil, nil,
176
+ 96, nil, nil, 79, 23, 140, -9, nil, 141, 26,
177
+ 161, 146, 155, 54, nil, 137, 159, nil ]
171
178
 
172
179
  racc_action_default = [
173
- -47, -33, -47, -47, -1, -34, -47, -47, -32, -4,
174
- -47, -33, -2, -47, -47, -5, 87, -35, -33, -36,
175
- -37, -24, -22, -31, -25, -23, -47, -4, -47, -40,
176
- -47, -47, -38, -47, -47, -3, -6, -26, -41, -17,
177
- -18, -19, -20, -47, -21, -22, -47, -47, -28, -37,
178
- -27, -12, -47, -7, -47, -47, -47, -9, -11, -47,
179
- -40, -47, -44, -46, -30, -29, -39, -13, -47, -47,
180
- -8, -10, -43, -42, -45, -47, -47, -47, -47, -14,
181
- -47, -47, -47, -15, -47, -47, -16 ]
180
+ -48, -48, -34, -48, -1, -4, -35, -48, -48, -33,
181
+ -48, -48, -5, -34, -2, -48, 88, -48, -4, -36,
182
+ -24, -34, -37, -25, -32, -38, -22, -26, -23, -48,
183
+ -3, -6, -48, -41, -48, -48, -39, -48, -11, -12,
184
+ -48, -17, -48, -7, -18, -19, -48, -48, -20, -21,
185
+ -22, -48, -9, -27, -48, -42, -48, -29, -38, -28,
186
+ -48, -13, -48, -48, -48, -45, -47, -8, -10, -31,
187
+ -41, -30, -40, -44, -46, -48, -48, -43, -48, -48,
188
+ -14, -48, -48, -48, -15, -48, -48, -16 ]
182
189
 
183
190
  racc_goto_table = [
184
- 35, 19, 22, 46, 56, 14, 33, 6, 32, 22,
185
- 52, 7, 4, 3, nil, nil, nil, 17, 47, 22,
186
- nil, 7, nil, 36, 28, nil, nil, 71, 7, nil,
187
- nil, nil, nil, 52, 73, 66, nil, 32, 22, nil,
188
- nil, nil, nil, nil, 75, 76, nil, 72, 22, 74,
189
- 22, 79, nil, nil, 80, 83, nil, nil, 84, 86 ]
191
+ 30, 55, 54, 26, 37, 7, 51, 8, 11, 22,
192
+ 4, 3, nil, 26, nil, nil, 19, nil, 8, 36,
193
+ nil, 31, 26, nil, 32, nil, 8, nil, 56, 68,
194
+ nil, 75, 76, nil, nil, nil, nil, 72, 55, 77,
195
+ nil, nil, nil, nil, nil, nil, 26, 81, 26, nil,
196
+ 26, 85, 36, nil, 73, nil, 74, nil, nil, nil,
197
+ nil, 80, nil, nil, nil, 84, nil, nil, nil, 87 ]
190
198
 
191
199
  racc_goto_check = [
192
- 5, 11, 16, 19, 6, 4, 18, 3, 11, 16,
193
- 10, 17, 2, 1, nil, nil, nil, 3, 11, 16,
194
- nil, 17, nil, 4, 3, nil, nil, 6, 17, nil,
195
- nil, nil, nil, 10, 19, 18, nil, 11, 16, nil,
196
- nil, nil, nil, nil, 10, 10, nil, 11, 16, 11,
197
- 16, 5, nil, nil, 10, 5, nil, nil, 10, 5 ]
200
+ 5, 10, 19, 16, 18, 3, 6, 17, 4, 11,
201
+ 2, 1, nil, 16, nil, nil, 3, nil, 17, 11,
202
+ nil, 4, 16, nil, 3, nil, 17, nil, 11, 6,
203
+ nil, 10, 10, nil, nil, nil, nil, 18, 10, 19,
204
+ nil, nil, nil, nil, nil, nil, 16, 10, 16, nil,
205
+ 16, 10, 11, nil, 11, nil, 11, nil, nil, nil,
206
+ nil, 5, nil, nil, nil, 5, nil, nil, nil, 5 ]
198
207
 
199
208
  racc_goto_pointer = [
200
- nil, 13, 12, 6, -4, -26, -30, nil, nil, nil,
201
- -24, -12, nil, nil, nil, nil, -11, 10, -14, -26,
209
+ nil, 11, 10, 3, 3, -17, -23, nil, nil, nil,
210
+ -32, -6, nil, nil, nil, nil, -12, 5, -21, -31,
202
211
  nil ]
203
212
 
204
213
  racc_goto_default = [
205
- nil, nil, nil, nil, nil, nil, nil, 57, 58, 51,
206
- 38, 39, 40, 41, 42, 44, 45, 24, nil, nil,
207
- 5 ]
214
+ nil, nil, nil, nil, nil, nil, nil, 52, 38, 39,
215
+ 40, 41, 44, 45, 48, 49, 50, 27, nil, nil,
216
+ 6 ]
208
217
 
209
218
  racc_token_table = {
210
219
  false => 0,
@@ -217,24 +226,25 @@ racc_token_table = {
217
226
  :BOOLEAN_LITERAL => 7,
218
227
  :IDENTIFIER => 8,
219
228
  :STRING_LITERAL => 9,
220
- :INTEGER_LITERAL => 10,
221
- :BINARY_OPERATOR => 11,
222
- "{" => 12,
223
- "}" => 13,
224
- "(" => 14,
225
- ")" => 15,
226
- "," => 16,
227
- ";" => 17,
228
- "[" => 18,
229
- "]" => 19,
230
- "." => 20,
231
- ":" => 21,
232
- "=" => 22,
233
- "++" => 23 }
229
+ :FLOATING_POINT_LITERAL => 10,
230
+ :INTEGER_LITERAL => 11,
231
+ :BINARY_OPERATOR => 12,
232
+ "{" => 13,
233
+ "}" => 14,
234
+ "(" => 15,
235
+ ")" => 16,
236
+ "," => 17,
237
+ ";" => 18,
238
+ "[" => 19,
239
+ "]" => 20,
240
+ "." => 21,
241
+ ":" => 22,
242
+ "=" => 23,
243
+ "++" => 24 }
234
244
 
235
245
  racc_use_result_var = true
236
246
 
237
- racc_nt_base = 24
247
+ racc_nt_base = 25
238
248
 
239
249
  Racc_arg = [
240
250
  racc_action_table,
@@ -263,6 +273,7 @@ Racc_token_to_s_table = [
263
273
  'BOOLEAN_LITERAL',
264
274
  'IDENTIFIER',
265
275
  'STRING_LITERAL',
276
+ 'FLOATING_POINT_LITERAL',
266
277
  'INTEGER_LITERAL',
267
278
  'BINARY_OPERATOR',
268
279
  '"{"',
@@ -411,162 +422,169 @@ module_eval <<'.,.,', 'lib/doily/parser.y', 42
411
422
 
412
423
  module_eval <<'.,.,', 'lib/doily/parser.y', 55
413
424
  def _reduce_23( val, _values, result )
414
- result = Literal.new(val[0].to_i)
425
+ result = Literal.new(val[0].to_f)
415
426
  result
416
427
  end
417
428
  .,.,
418
429
 
419
430
  module_eval <<'.,.,', 'lib/doily/parser.y', 56
420
431
  def _reduce_24( val, _values, result )
421
- result = Literal.new(eval(val[0]))
432
+ result = Literal.new(val[0].to_i)
422
433
  result
423
434
  end
424
435
  .,.,
425
436
 
426
- # reduce 25 omitted
427
-
428
- module_eval <<'.,.,', 'lib/doily/parser.y', 58
429
- def _reduce_26( val, _values, result )
430
- result = Object.new(val[1])
437
+ module_eval <<'.,.,', 'lib/doily/parser.y', 57
438
+ def _reduce_25( val, _values, result )
439
+ result = Literal.new(eval(val[0]))
431
440
  result
432
441
  end
433
442
  .,.,
434
443
 
444
+ # reduce 26 omitted
445
+
435
446
  module_eval <<'.,.,', 'lib/doily/parser.y', 59
436
447
  def _reduce_27( val, _values, result )
437
- result = Array.new(val[1])
448
+ result = Object.new(val[1])
438
449
  result
439
450
  end
440
451
  .,.,
441
452
 
442
453
  module_eval <<'.,.,', 'lib/doily/parser.y', 60
443
454
  def _reduce_28( val, _values, result )
444
- result = Access.new(val[0], Literal.new(val[2]))
455
+ result = Array.new(val[1])
445
456
  result
446
457
  end
447
458
  .,.,
448
459
 
449
460
  module_eval <<'.,.,', 'lib/doily/parser.y', 61
450
461
  def _reduce_29( val, _values, result )
451
- result = Access.new(val[0], val[2])
462
+ result = Access.new(val[0], Literal.new(val[2]))
452
463
  result
453
464
  end
454
465
  .,.,
455
466
 
456
467
  module_eval <<'.,.,', 'lib/doily/parser.y', 62
457
468
  def _reduce_30( val, _values, result )
458
- result = Call.new(val[0], val[2])
469
+ result = Access.new(val[0], val[2])
459
470
  result
460
471
  end
461
472
  .,.,
462
473
 
463
- module_eval <<'.,.,', 'lib/doily/parser.y', 66
474
+ module_eval <<'.,.,', 'lib/doily/parser.y', 63
464
475
  def _reduce_31( val, _values, result )
465
- result = Reference.new(val[0])
476
+ result = Call.new(val[0], val[2])
466
477
  result
467
478
  end
468
479
  .,.,
469
480
 
470
- module_eval <<'.,.,', 'lib/doily/parser.y', 70
481
+ module_eval <<'.,.,', 'lib/doily/parser.y', 67
471
482
  def _reduce_32( val, _values, result )
472
- result = Literal.new(eval(val[0]))
483
+ result = Reference.new(val[0])
473
484
  result
474
485
  end
475
486
  .,.,
476
487
 
477
- module_eval <<'.,.,', 'lib/doily/parser.y', 74
488
+ module_eval <<'.,.,', 'lib/doily/parser.y', 71
478
489
  def _reduce_33( val, _values, result )
479
- result = {}
490
+ result = Literal.new(eval(val[0]))
480
491
  result
481
492
  end
482
493
  .,.,
483
494
 
484
495
  module_eval <<'.,.,', 'lib/doily/parser.y', 75
485
496
  def _reduce_34( val, _values, result )
486
- result = val[0]
497
+ result = {}
487
498
  result
488
499
  end
489
500
  .,.,
490
501
 
491
502
  module_eval <<'.,.,', 'lib/doily/parser.y', 76
492
503
  def _reduce_35( val, _values, result )
493
- result = val[0].merge(val[2])
504
+ result = val[0]
494
505
  result
495
506
  end
496
507
  .,.,
497
508
 
498
- module_eval <<'.,.,', 'lib/doily/parser.y', 80
509
+ module_eval <<'.,.,', 'lib/doily/parser.y', 77
499
510
  def _reduce_36( val, _values, result )
500
- result = { val[0] => val[2] }
511
+ result = val[0].merge(val[2])
501
512
  result
502
513
  end
503
514
  .,.,
504
515
 
505
- module_eval <<'.,.,', 'lib/doily/parser.y', 84
516
+ module_eval <<'.,.,', 'lib/doily/parser.y', 81
506
517
  def _reduce_37( val, _values, result )
507
- result = []
518
+ result = { val[0] => val[2] }
508
519
  result
509
520
  end
510
521
  .,.,
511
522
 
512
523
  module_eval <<'.,.,', 'lib/doily/parser.y', 85
513
524
  def _reduce_38( val, _values, result )
514
- result = [val[0]]
525
+ result = []
515
526
  result
516
527
  end
517
528
  .,.,
518
529
 
519
530
  module_eval <<'.,.,', 'lib/doily/parser.y', 86
520
531
  def _reduce_39( val, _values, result )
521
- result = [val[0]] + val[2]
532
+ result = [val[0]]
522
533
  result
523
534
  end
524
535
  .,.,
525
536
 
526
- module_eval <<'.,.,', 'lib/doily/parser.y', 90
537
+ module_eval <<'.,.,', 'lib/doily/parser.y', 87
527
538
  def _reduce_40( val, _values, result )
528
- result = []
539
+ result = [val[0]] + val[2]
529
540
  result
530
541
  end
531
542
  .,.,
532
543
 
533
544
  module_eval <<'.,.,', 'lib/doily/parser.y', 91
534
545
  def _reduce_41( val, _values, result )
535
- result = [val[0]]
546
+ result = []
536
547
  result
537
548
  end
538
549
  .,.,
539
550
 
540
551
  module_eval <<'.,.,', 'lib/doily/parser.y', 92
541
552
  def _reduce_42( val, _values, result )
542
- result = [val[0]] + val[2]
553
+ result = [val[0]]
543
554
  result
544
555
  end
545
556
  .,.,
546
557
 
547
- module_eval <<'.,.,', 'lib/doily/parser.y', 96
558
+ module_eval <<'.,.,', 'lib/doily/parser.y', 93
548
559
  def _reduce_43( val, _values, result )
549
- result = Assignment.new(val[0], val[2])
560
+ result = [val[0]] + val[2]
550
561
  result
551
562
  end
552
563
  .,.,
553
564
 
554
- module_eval <<'.,.,', 'lib/doily/parser.y', 100
565
+ module_eval <<'.,.,', 'lib/doily/parser.y', 97
555
566
  def _reduce_44( val, _values, result )
556
- result = Declaration.new(val[1])
567
+ result = Assignment.new(val[0], val[2])
557
568
  result
558
569
  end
559
570
  .,.,
560
571
 
561
- module_eval <<'.,.,', 'lib/doily/parser.y', 104
572
+ module_eval <<'.,.,', 'lib/doily/parser.y', 101
562
573
  def _reduce_45( val, _values, result )
563
- result = Call.new(Access.new(val[0], Literal.new(val[1])), [val[2]])
574
+ result = Declaration.new(val[1])
564
575
  result
565
576
  end
566
577
  .,.,
567
578
 
568
- module_eval <<'.,.,', 'lib/doily/parser.y', 108
579
+ module_eval <<'.,.,', 'lib/doily/parser.y', 105
569
580
  def _reduce_46( val, _values, result )
581
+ result = Call.new(Access.new(val[0], Literal.new(val[1])), [val[2]])
582
+ result
583
+ end
584
+ .,.,
585
+
586
+ module_eval <<'.,.,', 'lib/doily/parser.y', 109
587
+ def _reduce_47( val, _values, result )
570
588
  result = Assignment.new(val[0], Call.new(Access.new(val[0], Literal.new('+')), [Literal.new(1)]))
571
589
  result
572
590
  end
data/lib/doily/parser.y CHANGED
@@ -1,6 +1,6 @@
1
1
  class Doily::Parser
2
2
 
3
- token FUNCTION IF ELSE FOR VAR BOOLEAN_LITERAL IDENTIFIER STRING_LITERAL INTEGER_LITERAL BINARY_OPERATOR
3
+ token FUNCTION IF ELSE FOR VAR BOOLEAN_LITERAL IDENTIFIER STRING_LITERAL FLOATING_POINT_LITERAL INTEGER_LITERAL BINARY_OPERATOR
4
4
 
5
5
  rule
6
6
  target
@@ -53,6 +53,7 @@ rule
53
53
 
54
54
  reference
55
55
  : variable
56
+ | FLOATING_POINT_LITERAL { result = Literal.new(val[0].to_f) }
56
57
  | INTEGER_LITERAL { result = Literal.new(val[0].to_i) }
57
58
  | BOOLEAN_LITERAL { result = Literal.new(eval(val[0])) }
58
59
  | string_literal
@@ -145,11 +146,13 @@ require 'strscan'
145
146
  @tokens.push [m, m]
146
147
  when m = scanner.scan(/[a-zA-Z_]+/)
147
148
  @tokens.push [:IDENTIFIER, m]
148
- when m = scanner.scan(/"([^"])*"/)
149
+ when m = scanner.scan(/"(?:\\.|[^"])*"/)
149
150
  @tokens.push [:STRING_LITERAL, m]
150
- when m = scanner.scan(/'([^'])*'/)
151
+ when m = scanner.scan(/'(?:\\.|[^'])*'/)
151
152
  @tokens.push [:STRING_LITERAL, m]
152
- when m = scanner.scan(/\d+/)
153
+ when m = scanner.scan(/(?:-)?\d+\.\d+/)
154
+ @tokens.push [:FLOATING_POINT_LITERAL, m]
155
+ when m = scanner.scan(/(?:-)?\d+/)
153
156
  @tokens.push [:INTEGER_LITERAL, m]
154
157
  else
155
158
  raise ParseError.new(scanner)
@@ -1,6 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), 'test_helper')
2
2
 
3
- class DoilyFunctionTest < Test::Unit::TestCase
3
+ class DoilyTest < Test::Unit::TestCase
4
4
  should 'handle nothing' do
5
5
  Doily('function() {}').call.should == nil
6
6
  end
@@ -101,6 +101,37 @@ class DoilyFunctionTest < Test::Unit::TestCase
101
101
  Doily('function() { false; }').call.should == false
102
102
  end
103
103
 
104
+ should 'handle floating-point literals' do
105
+ Doily('function() { 1.2; }').call.should == 1.2
106
+ end
107
+
108
+ should 'handle negative integer literals' do
109
+ Doily('function() { -1; }').call.should == -1
110
+ end
111
+
112
+ should 'handle negative floating-point literals' do
113
+ Doily('function() { -1.2; }').call.should == -1.2
114
+ end
115
+
116
+ context 'escape sequences' do
117
+ context 'ruby' do
118
+ should 'require escaping backslashes in a single-quoted string' do
119
+ string = '\\"'
120
+ string.length.should == 2
121
+ string[0..0].should == '\\'
122
+ string[1..1].should == '"'
123
+ end
124
+ end
125
+
126
+ should 'handle escape sequences in single-quoted strings' do
127
+ Doily('function() { \'\\\'\'; }').call.should == '\''
128
+ end
129
+
130
+ should 'handle escape sequences in double-quoted strings' do
131
+ Doily('function() { "\\""; }').call.should == '"'
132
+ end
133
+ end
134
+
104
135
  should 'handle single-quoted strings' do
105
136
  Doily("function() { 'foo'; }").call.should == 'foo'
106
137
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: matthewtodd-doily
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Todd
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-29 00:00:00 -07:00
12
+ date: 2009-06-30 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -81,8 +81,8 @@ files:
81
81
  - lib/doily/types/reference.rb
82
82
  - lib/doily/types.rb
83
83
  - lib/doily.rb
84
- - test/doily_function_test.rb
85
84
  - test/doily_hash_test.rb
85
+ - test/doily_test.rb
86
86
  - test/test_helper.rb
87
87
  has_rdoc: false
88
88
  homepage:
@@ -91,7 +91,7 @@ rdoc_options:
91
91
  - --main
92
92
  - README.rdoc
93
93
  - --title
94
- - doily-0.1.1
94
+ - doily-0.1.2
95
95
  - --inline-source
96
96
  - --line-numbers
97
97
  - --all