dslh 0.3.3 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/dslh.rb +54 -27
- data/lib/dslh/version.rb +1 -1
- data/spec/dslh_spec.rb +223 -191
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 23606816e11bb7d500a3d596f1d7a9d0402e7019
|
4
|
+
data.tar.gz: dc4b77c1763562bfc9fe2f7cab15881b93239d11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 18595e8bc2cd2cb93ebb1905957010af282ad3405e216972b1861317c341ee02599c3799725a83702213a5927c548bdcb15035da31308e39b0b4c9e4831e9697
|
7
|
+
data.tar.gz: 1e012c9cbb59d168111f362104af69656c1d0b8b57e58bde707eb338a928bcd40c6a45893a2c15891b14c8eed9a42339de27667a0b404c48e9870343c8fc4c46
|
data/lib/dslh.rb
CHANGED
@@ -39,7 +39,8 @@ class Dslh
|
|
39
39
|
|
40
40
|
def initialize(options = {})
|
41
41
|
@options = {
|
42
|
-
:time_inspecter => method(:inspect_time)
|
42
|
+
:time_inspecter => method(:inspect_time),
|
43
|
+
:dump_old_hash_array_format => false,
|
43
44
|
}.merge(options)
|
44
45
|
|
45
46
|
@options[:key_conv] ||= (@options[:conv] || proc {|i| i.to_s })
|
@@ -118,12 +119,12 @@ class Dslh
|
|
118
119
|
buf.puts(indent + key_value)
|
119
120
|
else
|
120
121
|
buf.print(indent + key)
|
121
|
-
value_proc(value, depth, buf)
|
122
|
+
value_proc(value, depth, buf, true, key)
|
122
123
|
end
|
123
124
|
end
|
124
125
|
end
|
125
126
|
|
126
|
-
def value_proc(value, depth, value_buf, newline = true)
|
127
|
+
def value_proc(value, depth, value_buf, newline = true, curr_key = nil)
|
127
128
|
indent = (INDENT_SPACES * depth)
|
128
129
|
next_indent = (INDENT_SPACES * (depth + 1))
|
129
130
|
value_conv = @options[:value_conv]
|
@@ -142,28 +143,47 @@ class Dslh
|
|
142
143
|
when Array
|
143
144
|
if value.any? {|v| [Array, Hash].any? {|c| v.kind_of?(c) }}
|
144
145
|
nested = true
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
146
|
+
|
147
|
+
if not @options[:dump_old_hash_array_format] and value.all? {|i| i.kind_of?(Hash) }
|
148
|
+
value_buf.puts(' do |*|')
|
149
|
+
|
150
|
+
value.each_with_index do |v, i|
|
151
|
+
deval0(v, depth + 1, value_buf)
|
152
|
+
|
153
|
+
if i < (value.length - 1)
|
154
|
+
value_buf.puts(indent + "end\n" + indent + curr_key + ' do |*|')
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
if newline
|
159
|
+
value_buf.puts(indent + 'end')
|
156
160
|
else
|
157
|
-
value_buf.print(
|
161
|
+
value_buf.print(indent + 'end')
|
158
162
|
end
|
163
|
+
else
|
164
|
+
value_buf.puts(' [')
|
165
|
+
|
166
|
+
value.each_with_index do |v, i|
|
167
|
+
case v
|
168
|
+
when Hash
|
169
|
+
value_buf.puts(next_indent + '_{')
|
170
|
+
deval0(v, depth + 2, value_buf)
|
171
|
+
value_buf.print(next_indent + '}')
|
172
|
+
when Array
|
173
|
+
value_buf.print(next_indent.slice(0...-1))
|
174
|
+
value_proc(v, depth + 1, value_buf, false)
|
175
|
+
else
|
176
|
+
value_buf.print(next_indent + v.pretty_inspect.strip.gsub("\n", "\n" + next_indent))
|
177
|
+
end
|
159
178
|
|
160
|
-
|
161
|
-
|
179
|
+
value_buf.puts(i < (value.length - 1) ? ',' : '')
|
180
|
+
end
|
162
181
|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
182
|
+
if newline
|
183
|
+
value_buf.puts(indent + ']')
|
184
|
+
else
|
185
|
+
value_buf.print(indent + ']')
|
186
|
+
end
|
167
187
|
end
|
168
188
|
elsif value.length == 1
|
169
189
|
value_buf.puts(' ' + value.inspect)
|
@@ -239,22 +259,29 @@ class Dslh
|
|
239
259
|
nested_hash = block ? ScopeBlock.nest(binding, 'block', method_name) : nil
|
240
260
|
method_name = key_conv.call(method_name) if key_conv
|
241
261
|
|
242
|
-
if not @__options__[:allow_duplicate] and @__hash__.has_key?(method_name)
|
262
|
+
if not @__options__[:allow_duplicate] and @__hash__.has_key?(method_name) and not (block and block.arity == -1)
|
243
263
|
raise "duplicate key #{method_name.inspect}"
|
244
264
|
end
|
245
265
|
|
266
|
+
push_to_hash = proc do |v|
|
267
|
+
if block and block.arity == -1
|
268
|
+
@__hash__[method_name] ||= []
|
269
|
+
@__hash__[method_name] << v
|
270
|
+
else
|
271
|
+
@__hash__[method_name] = v
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
246
275
|
if args.empty?
|
247
|
-
|
276
|
+
push_to_hash.call(nested_hash)
|
248
277
|
else
|
249
278
|
args = args.map {|i| value_conv.call(i) } if value_conv
|
250
279
|
value = args.length > 1 ? args : args[0]
|
251
280
|
|
252
281
|
if nested_hash
|
253
|
-
|
254
|
-
value => nested_hash
|
255
|
-
}
|
282
|
+
push_to_hash.call(value => nested_hash)
|
256
283
|
else
|
257
|
-
|
284
|
+
push_to_hash.call(value)
|
258
285
|
end
|
259
286
|
|
260
287
|
return @__hash__
|
data/lib/dslh/version.rb
CHANGED
data/spec/dslh_spec.rb
CHANGED
@@ -767,6 +767,14 @@ end
|
|
767
767
|
expect(evaluated).to eq(template)
|
768
768
|
end
|
769
769
|
|
770
|
+
it 'should convert json to dsl (old format)' do
|
771
|
+
template = JSON.parse(drupal_multi_az_template)
|
772
|
+
|
773
|
+
dsl = Dslh.deval(template)
|
774
|
+
evaluated = Dslh.eval(dsl, :key_conv => proc {|i| i.to_s }, :dump_old_hash_array_format => true)
|
775
|
+
expect(evaluated).to eq(template)
|
776
|
+
end
|
777
|
+
|
770
778
|
it 'should convert json to dsl with key_conf' do
|
771
779
|
template = JSON.parse(drupal_multi_az_template)
|
772
780
|
|
@@ -935,30 +943,28 @@ Resources do
|
|
935
943
|
PolicyDocument do
|
936
944
|
Version "2008-10-17"
|
937
945
|
Id "UploadPolicy"
|
938
|
-
Statement
|
939
|
-
|
940
|
-
|
941
|
-
|
942
|
-
|
943
|
-
|
944
|
-
|
945
|
-
|
946
|
-
|
947
|
-
|
948
|
-
|
949
|
-
|
950
|
-
|
951
|
-
"/*"
|
952
|
-
]
|
946
|
+
Statement do |*|
|
947
|
+
Sid "EnableReadWrite"
|
948
|
+
Action "s3:GetObject", "s3:PutObject", "s3:PutObjectACL"
|
949
|
+
Effect "Allow"
|
950
|
+
Resource do
|
951
|
+
Fn__Join [
|
952
|
+
"",
|
953
|
+
[
|
954
|
+
"arn:aws:s3:::",
|
955
|
+
_{
|
956
|
+
Ref "S3Bucket"
|
957
|
+
},
|
958
|
+
"/*"
|
953
959
|
]
|
960
|
+
]
|
961
|
+
end
|
962
|
+
Principal do
|
963
|
+
AWS do
|
964
|
+
Fn__GetAtt "S3User", "Arn"
|
954
965
|
end
|
955
|
-
|
956
|
-
|
957
|
-
Fn__GetAtt "S3User", "Arn"
|
958
|
-
end
|
959
|
-
end
|
960
|
-
}
|
961
|
-
]
|
966
|
+
end
|
967
|
+
end
|
962
968
|
end
|
963
969
|
Bucket do
|
964
970
|
Ref "S3Bucket"
|
@@ -969,20 +975,16 @@ Resources do
|
|
969
975
|
Type "AWS::IAM::User"
|
970
976
|
Properties do
|
971
977
|
Path "/"
|
972
|
-
Policies
|
973
|
-
|
974
|
-
|
975
|
-
|
976
|
-
|
977
|
-
|
978
|
-
|
979
|
-
Action "s3:*"
|
980
|
-
Resource "*"
|
981
|
-
}
|
982
|
-
]
|
978
|
+
Policies do |*|
|
979
|
+
PolicyName "root"
|
980
|
+
PolicyDocument do
|
981
|
+
Statement do |*|
|
982
|
+
Effect "Allow"
|
983
|
+
Action "s3:*"
|
984
|
+
Resource "*"
|
983
985
|
end
|
984
|
-
|
985
|
-
|
986
|
+
end
|
987
|
+
end
|
986
988
|
end
|
987
989
|
end
|
988
990
|
S3Keys do
|
@@ -1002,20 +1004,16 @@ Resources do
|
|
1002
1004
|
AvailabilityZones do
|
1003
1005
|
Fn__GetAZs ""
|
1004
1006
|
end
|
1005
|
-
LBCookieStickinessPolicy
|
1006
|
-
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1010
|
-
|
1011
|
-
|
1012
|
-
|
1013
|
-
|
1014
|
-
|
1015
|
-
Protocol "HTTP"
|
1016
|
-
PolicyNames ["CookieBasedPolicy"]
|
1017
|
-
}
|
1018
|
-
]
|
1007
|
+
LBCookieStickinessPolicy do |*|
|
1008
|
+
PolicyName "CookieBasedPolicy"
|
1009
|
+
CookieExpirationPeriod "30"
|
1010
|
+
end
|
1011
|
+
Listeners do |*|
|
1012
|
+
LoadBalancerPort "80"
|
1013
|
+
InstancePort "80"
|
1014
|
+
Protocol "HTTP"
|
1015
|
+
PolicyNames ["CookieBasedPolicy"]
|
1016
|
+
end
|
1019
1017
|
HealthCheck do
|
1020
1018
|
Target "HTTP:80/"
|
1021
1019
|
HealthyThreshold "2"
|
@@ -1039,11 +1037,9 @@ Resources do
|
|
1039
1037
|
DesiredCapacity do
|
1040
1038
|
Ref "WebServerCapacity"
|
1041
1039
|
end
|
1042
|
-
LoadBalancerNames
|
1043
|
-
|
1044
|
-
|
1045
|
-
}
|
1046
|
-
]
|
1040
|
+
LoadBalancerNames do |*|
|
1041
|
+
Ref "ElasticLoadBalancer"
|
1042
|
+
end
|
1047
1043
|
end
|
1048
1044
|
end
|
1049
1045
|
LaunchConfig do
|
@@ -1166,11 +1162,9 @@ Resources do
|
|
1166
1162
|
InstanceType do
|
1167
1163
|
Ref "InstanceType"
|
1168
1164
|
end
|
1169
|
-
SecurityGroups
|
1170
|
-
|
1171
|
-
|
1172
|
-
}
|
1173
|
-
]
|
1165
|
+
SecurityGroups do |*|
|
1166
|
+
Ref "WebServerSecurityGroup"
|
1167
|
+
end
|
1174
1168
|
KeyName do
|
1175
1169
|
Ref "KeyName"
|
1176
1170
|
end
|
@@ -1316,11 +1310,9 @@ Resources do
|
|
1316
1310
|
DBInstanceClass do
|
1317
1311
|
Ref "DBClass"
|
1318
1312
|
end
|
1319
|
-
DBSecurityGroups
|
1320
|
-
|
1321
|
-
|
1322
|
-
}
|
1323
|
-
]
|
1313
|
+
DBSecurityGroups do |*|
|
1314
|
+
Ref "DBSecurityGroup"
|
1315
|
+
end
|
1324
1316
|
AllocatedStorage do
|
1325
1317
|
Ref "DBAllocatedStorage"
|
1326
1318
|
end
|
@@ -1344,27 +1336,25 @@ Resources do
|
|
1344
1336
|
Type "AWS::EC2::SecurityGroup"
|
1345
1337
|
Properties do
|
1346
1338
|
GroupDescription "Enable HTTP access via port 80, locked down to requests from the load balancer only and SSH access"
|
1347
|
-
SecurityGroupIngress
|
1348
|
-
|
1349
|
-
|
1350
|
-
|
1351
|
-
|
1352
|
-
|
1353
|
-
|
1354
|
-
|
1355
|
-
|
1356
|
-
|
1357
|
-
|
1358
|
-
|
1359
|
-
|
1360
|
-
|
1361
|
-
|
1362
|
-
|
1363
|
-
|
1364
|
-
|
1365
|
-
|
1366
|
-
}
|
1367
|
-
]
|
1339
|
+
SecurityGroupIngress do |*|
|
1340
|
+
IpProtocol "tcp"
|
1341
|
+
FromPort "80"
|
1342
|
+
ToPort "80"
|
1343
|
+
SourceSecurityGroupOwnerId do
|
1344
|
+
Fn__GetAtt "ElasticLoadBalancer", "SourceSecurityGroup.OwnerAlias"
|
1345
|
+
end
|
1346
|
+
SourceSecurityGroupName do
|
1347
|
+
Fn__GetAtt "ElasticLoadBalancer", "SourceSecurityGroup.GroupName"
|
1348
|
+
end
|
1349
|
+
end
|
1350
|
+
SecurityGroupIngress do |*|
|
1351
|
+
IpProtocol "tcp"
|
1352
|
+
FromPort "22"
|
1353
|
+
ToPort "22"
|
1354
|
+
CidrIp do
|
1355
|
+
Ref "SSHLocation"
|
1356
|
+
end
|
1357
|
+
end
|
1368
1358
|
end
|
1369
1359
|
end
|
1370
1360
|
end
|
@@ -1572,30 +1562,28 @@ Resources do
|
|
1572
1562
|
PolicyDocument do
|
1573
1563
|
Version "2008-10-17"
|
1574
1564
|
Id "UploadPolicy"
|
1575
|
-
Statement
|
1576
|
-
|
1577
|
-
|
1578
|
-
|
1579
|
-
|
1580
|
-
|
1581
|
-
|
1582
|
-
|
1583
|
-
|
1584
|
-
|
1585
|
-
|
1586
|
-
|
1587
|
-
|
1588
|
-
"/*"
|
1589
|
-
]
|
1565
|
+
Statement do |*|
|
1566
|
+
Sid "EnableReadWrite"
|
1567
|
+
Action "s3:GetObject", "s3:PutObject", "s3:PutObjectACL"
|
1568
|
+
Effect "Allow"
|
1569
|
+
Resource do
|
1570
|
+
Fn__Join [
|
1571
|
+
"",
|
1572
|
+
[
|
1573
|
+
"arn:aws:s3:::",
|
1574
|
+
_{
|
1575
|
+
Ref "S3Bucket"
|
1576
|
+
},
|
1577
|
+
"/*"
|
1590
1578
|
]
|
1579
|
+
]
|
1580
|
+
end
|
1581
|
+
Principal do
|
1582
|
+
AWS do
|
1583
|
+
Fn__GetAtt "S3User", "Arn"
|
1591
1584
|
end
|
1592
|
-
|
1593
|
-
|
1594
|
-
Fn__GetAtt "S3User", "Arn"
|
1595
|
-
end
|
1596
|
-
end
|
1597
|
-
}
|
1598
|
-
]
|
1585
|
+
end
|
1586
|
+
end
|
1599
1587
|
end
|
1600
1588
|
Bucket do
|
1601
1589
|
Ref "S3Bucket"
|
@@ -1606,20 +1594,16 @@ Resources do
|
|
1606
1594
|
Type "AWS::IAM::User"
|
1607
1595
|
Properties do
|
1608
1596
|
Path "/"
|
1609
|
-
Policies
|
1610
|
-
|
1611
|
-
|
1612
|
-
|
1613
|
-
|
1614
|
-
|
1615
|
-
|
1616
|
-
Action "s3:*"
|
1617
|
-
Resource "*"
|
1618
|
-
}
|
1619
|
-
]
|
1597
|
+
Policies do |*|
|
1598
|
+
PolicyName "root"
|
1599
|
+
PolicyDocument do
|
1600
|
+
Statement do |*|
|
1601
|
+
Effect "Allow"
|
1602
|
+
Action "s3:*"
|
1603
|
+
Resource "*"
|
1620
1604
|
end
|
1621
|
-
|
1622
|
-
|
1605
|
+
end
|
1606
|
+
end
|
1623
1607
|
end
|
1624
1608
|
end
|
1625
1609
|
S3Keys do
|
@@ -1639,20 +1623,16 @@ Resources do
|
|
1639
1623
|
AvailabilityZones do
|
1640
1624
|
Fn__GetAZs ""
|
1641
1625
|
end
|
1642
|
-
LBCookieStickinessPolicy
|
1643
|
-
|
1644
|
-
|
1645
|
-
|
1646
|
-
|
1647
|
-
|
1648
|
-
|
1649
|
-
|
1650
|
-
|
1651
|
-
|
1652
|
-
Protocol "HTTP"
|
1653
|
-
PolicyNames ["CookieBasedPolicy"]
|
1654
|
-
}
|
1655
|
-
]
|
1626
|
+
LBCookieStickinessPolicy do |*|
|
1627
|
+
PolicyName "CookieBasedPolicy"
|
1628
|
+
CookieExpirationPeriod "30"
|
1629
|
+
end
|
1630
|
+
Listeners do |*|
|
1631
|
+
LoadBalancerPort "80"
|
1632
|
+
InstancePort "80"
|
1633
|
+
Protocol "HTTP"
|
1634
|
+
PolicyNames ["CookieBasedPolicy"]
|
1635
|
+
end
|
1656
1636
|
HealthCheck do
|
1657
1637
|
Target "HTTP:80/"
|
1658
1638
|
HealthyThreshold "2"
|
@@ -1676,11 +1656,9 @@ Resources do
|
|
1676
1656
|
DesiredCapacity do
|
1677
1657
|
Ref "WebServerCapacity"
|
1678
1658
|
end
|
1679
|
-
LoadBalancerNames
|
1680
|
-
|
1681
|
-
|
1682
|
-
}
|
1683
|
-
]
|
1659
|
+
LoadBalancerNames do |*|
|
1660
|
+
Ref "ElasticLoadBalancer"
|
1661
|
+
end
|
1684
1662
|
end
|
1685
1663
|
end
|
1686
1664
|
LaunchConfig do
|
@@ -1829,11 +1807,9 @@ Resources do
|
|
1829
1807
|
InstanceType do
|
1830
1808
|
Ref "InstanceType"
|
1831
1809
|
end
|
1832
|
-
SecurityGroups
|
1833
|
-
|
1834
|
-
|
1835
|
-
}
|
1836
|
-
]
|
1810
|
+
SecurityGroups do |*|
|
1811
|
+
Ref "WebServerSecurityGroup"
|
1812
|
+
end
|
1837
1813
|
KeyName do
|
1838
1814
|
Ref "KeyName"
|
1839
1815
|
end
|
@@ -1979,11 +1955,9 @@ Resources do
|
|
1979
1955
|
DBInstanceClass do
|
1980
1956
|
Ref "DBClass"
|
1981
1957
|
end
|
1982
|
-
DBSecurityGroups
|
1983
|
-
|
1984
|
-
|
1985
|
-
}
|
1986
|
-
]
|
1958
|
+
DBSecurityGroups do |*|
|
1959
|
+
Ref "DBSecurityGroup"
|
1960
|
+
end
|
1987
1961
|
AllocatedStorage do
|
1988
1962
|
Ref "DBAllocatedStorage"
|
1989
1963
|
end
|
@@ -2007,27 +1981,25 @@ Resources do
|
|
2007
1981
|
Type "AWS::EC2::SecurityGroup"
|
2008
1982
|
Properties do
|
2009
1983
|
GroupDescription "Enable HTTP access via port 80, locked down to requests from the load balancer only and SSH access"
|
2010
|
-
SecurityGroupIngress
|
2011
|
-
|
2012
|
-
|
2013
|
-
|
2014
|
-
|
2015
|
-
|
2016
|
-
|
2017
|
-
|
2018
|
-
|
2019
|
-
|
2020
|
-
|
2021
|
-
|
2022
|
-
|
2023
|
-
|
2024
|
-
|
2025
|
-
|
2026
|
-
|
2027
|
-
|
2028
|
-
|
2029
|
-
}
|
2030
|
-
]
|
1984
|
+
SecurityGroupIngress do |*|
|
1985
|
+
IpProtocol "tcp"
|
1986
|
+
FromPort "80"
|
1987
|
+
ToPort "80"
|
1988
|
+
SourceSecurityGroupOwnerId do
|
1989
|
+
Fn__GetAtt "ElasticLoadBalancer", "SourceSecurityGroup.OwnerAlias"
|
1990
|
+
end
|
1991
|
+
SourceSecurityGroupName do
|
1992
|
+
Fn__GetAtt "ElasticLoadBalancer", "SourceSecurityGroup.GroupName"
|
1993
|
+
end
|
1994
|
+
end
|
1995
|
+
SecurityGroupIngress do |*|
|
1996
|
+
IpProtocol "tcp"
|
1997
|
+
FromPort "22"
|
1998
|
+
ToPort "22"
|
1999
|
+
CidrIp do
|
2000
|
+
Ref "SSHLocation"
|
2001
|
+
end
|
2002
|
+
end
|
2031
2003
|
end
|
2032
2004
|
end
|
2033
2005
|
end
|
@@ -2305,11 +2277,9 @@ Resources do
|
|
2305
2277
|
InstanceType do
|
2306
2278
|
Ref "InstanceType"
|
2307
2279
|
end
|
2308
|
-
SecurityGroups
|
2309
|
-
|
2310
|
-
|
2311
|
-
}
|
2312
|
-
]
|
2280
|
+
SecurityGroups do |*|
|
2281
|
+
Ref "WebServerSecurityGroup"
|
2282
|
+
end
|
2313
2283
|
KeyName do
|
2314
2284
|
Ref "KeyName"
|
2315
2285
|
end
|
@@ -2420,22 +2390,20 @@ Resources do
|
|
2420
2390
|
Type "AWS::EC2::SecurityGroup"
|
2421
2391
|
Properties do
|
2422
2392
|
GroupDescription "Enable HTTP access via port 80 and SSH access"
|
2423
|
-
SecurityGroupIngress
|
2424
|
-
|
2425
|
-
|
2426
|
-
|
2427
|
-
|
2428
|
-
|
2429
|
-
|
2430
|
-
|
2431
|
-
|
2432
|
-
|
2433
|
-
|
2434
|
-
|
2435
|
-
|
2436
|
-
|
2437
|
-
}
|
2438
|
-
]
|
2393
|
+
SecurityGroupIngress do |*|
|
2394
|
+
IpProtocol "tcp"
|
2395
|
+
FromPort "80"
|
2396
|
+
ToPort "80"
|
2397
|
+
CidrIp "0.0.0.0/0"
|
2398
|
+
end
|
2399
|
+
SecurityGroupIngress do |*|
|
2400
|
+
IpProtocol "tcp"
|
2401
|
+
FromPort "22"
|
2402
|
+
ToPort "22"
|
2403
|
+
CidrIp do
|
2404
|
+
Ref "SSHLocation"
|
2405
|
+
end
|
2406
|
+
end
|
2439
2407
|
end
|
2440
2408
|
end
|
2441
2409
|
end
|
@@ -2676,4 +2644,68 @@ end
|
|
2676
2644
|
end
|
2677
2645
|
EOS
|
2678
2646
|
end
|
2647
|
+
|
2648
|
+
it 'should convert hash to dsl (include hash array)' do
|
2649
|
+
h = {:glossary=>[
|
2650
|
+
{:title=>"example glossary",
|
2651
|
+
:date=>Time.parse('2016/05/21 00:00 UTC')},
|
2652
|
+
{:title=>"example glossary2",
|
2653
|
+
:date=>Time.parse('2016/05/21 00:01 UTC')}],
|
2654
|
+
:glossary2=>[
|
2655
|
+
{:title=>"example glossary",
|
2656
|
+
:date=>Time.parse('2016/05/21 00:00 UTC')}]}
|
2657
|
+
|
2658
|
+
dsl = Dslh.deval(h, :time_inspecter => proc {|i| i.to_s.inspect })
|
2659
|
+
expect(dsl).to eq(<<-EOS)
|
2660
|
+
glossary do |*|
|
2661
|
+
title "example glossary"
|
2662
|
+
date "2016-05-21 00:00:00 UTC"
|
2663
|
+
end
|
2664
|
+
glossary do |*|
|
2665
|
+
title "example glossary2"
|
2666
|
+
date "2016-05-21 00:01:00 UTC"
|
2667
|
+
end
|
2668
|
+
glossary2 do |*|
|
2669
|
+
title "example glossary"
|
2670
|
+
date "2016-05-21 00:00:00 UTC"
|
2671
|
+
end
|
2672
|
+
EOS
|
2673
|
+
end
|
2674
|
+
|
2675
|
+
it 'should convert dsl to hash (include hash array)' do
|
2676
|
+
h = {:glossary=>[
|
2677
|
+
{:title=>"example glossary",
|
2678
|
+
:date=>Time.parse('2016/05/21 00:00 UTC')},
|
2679
|
+
{:title=>"example glossary2",
|
2680
|
+
:date=>Time.parse('2016/05/21 00:01 UTC')}],
|
2681
|
+
:glossary2=>[
|
2682
|
+
{:title=>"example glossary",
|
2683
|
+
:date=>Time.parse('2016/05/21 00:00 UTC')}]}
|
2684
|
+
|
2685
|
+
hash = Dslh.eval do
|
2686
|
+
glossary do |*|
|
2687
|
+
title "example glossary"
|
2688
|
+
date "2016-05-21 00:00:00 UTC"
|
2689
|
+
end
|
2690
|
+
glossary do |*|
|
2691
|
+
title "example glossary2"
|
2692
|
+
date "2016-05-21 00:01:00 UTC"
|
2693
|
+
end
|
2694
|
+
glossary2 do |*|
|
2695
|
+
title "example glossary"
|
2696
|
+
date "2016-05-21 00:00:00 UTC"
|
2697
|
+
end
|
2698
|
+
end
|
2699
|
+
|
2700
|
+
expect(hash).to eq(
|
2701
|
+
{"glossary"=>[
|
2702
|
+
{"title"=>"example glossary",
|
2703
|
+
"date"=>'2016-05-21 00:00:00 UTC'},
|
2704
|
+
{"title"=>"example glossary2",
|
2705
|
+
"date"=>'2016-05-21 00:01:00 UTC'}],
|
2706
|
+
"glossary2"=>[
|
2707
|
+
{"title"=>"example glossary",
|
2708
|
+
"date"=>'2016-05-21 00:00:00 UTC'}]}
|
2709
|
+
)
|
2710
|
+
end
|
2679
2711
|
end
|