dsl_maker 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -12
- data/Changes +3 -0
- data/README.md +4 -3
- data/lib/dsl/maker.rb +43 -3
- data/lib/dsl/maker/version.rb +1 -1
- data/spec/spec_helper.rb +2 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 85f97d8d73eceeca3b40c4ad156e69b236ffa5f5
|
4
|
+
data.tar.gz: 603975a69ba6f163e24928aac73ef12c5cdfcb1a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 37fd0149a8290377dbc7033b5ffa0fcd9b5c771c5649120c9c1746c4b063f757c8b3b00e5e2383f5fcb3442276035feac06ab82c87e95eb793ea37a3a9c56d7d
|
7
|
+
data.tar.gz: 129b55c93089a927e022904d9683c050f9da2351eabd8654ccef2d81b969e23247d1dacba920e84a45a4bf86815fb65cf472071a18c17ede686120b32c55e0ac
|
data/.travis.yml
CHANGED
@@ -2,20 +2,9 @@ language: ruby
|
|
2
2
|
cache: bundler
|
3
3
|
rvm:
|
4
4
|
- ruby-head
|
5
|
+
- 2.4
|
5
6
|
- 2.3
|
6
7
|
- 2.2
|
7
8
|
- 2.1
|
8
9
|
- 2.0.0
|
9
10
|
- 1.9.3
|
10
|
-
- rbx-2
|
11
|
-
matrix:
|
12
|
-
include:
|
13
|
-
- rvm: jruby-head
|
14
|
-
env: JRUBY_OPTS="$JRUBY_OPTS -Xcli.debug=true --debug" # for simplecov
|
15
|
-
- rvm: jruby-21mode
|
16
|
-
env: JRUBY_OPTS="$JRUBY_OPTS -Xcli.debug=true --debug" # for simplecov
|
17
|
-
- rvm: jruby-20mode
|
18
|
-
env: JRUBY_OPTS="$JRUBY_OPTS -Xcli.debug=true --debug" # for simplecov
|
19
|
-
- rvm: jruby-19mode
|
20
|
-
env: JRUBY_OPTS="$JRUBY_OPTS -Xcli.debug=true --debug" # for simplecov
|
21
|
-
fast_finish: true
|
data/Changes
CHANGED
data/README.md
CHANGED
@@ -57,9 +57,9 @@ Then, use it as so:
|
|
57
57
|
```ruby
|
58
58
|
#!/usr/bin/env ruby
|
59
59
|
|
60
|
-
require
|
60
|
+
require 'vehicle/dsl'
|
61
61
|
|
62
|
-
filename = ARGV.shift || raise
|
62
|
+
filename = ARGV.shift || raise 'No filename provided.'
|
63
63
|
|
64
64
|
# This raises the error
|
65
65
|
vehicles = Vehicle::DSL.parse_dsl(
|
@@ -408,13 +408,14 @@ encountered.
|
|
408
408
|
|
409
409
|
### Type Coercions
|
410
410
|
|
411
|
-
There are
|
411
|
+
There are five pre-defined standard type coercions available for `generate_dsl()`:
|
412
412
|
|
413
413
|
Standard coercions:
|
414
414
|
* Any - This takes whatever you give it and returns it back.
|
415
415
|
* String - This takes whatever you give it and returns the string within it.
|
416
416
|
* Integer - This takes whatever you give it and returns the integer within it.
|
417
417
|
* Boolean - This takes whatever you give it and returns the truthiness of it.
|
418
|
+
* Hash - This takes a block and returns a Hash of the method calls.
|
418
419
|
|
419
420
|
You can add additional standard type coercions using `add_type()` as described
|
420
421
|
above.
|
data/lib/dsl/maker.rb
CHANGED
@@ -97,6 +97,20 @@ class DSL::Maker
|
|
97
97
|
type.instance_of? ArrayType
|
98
98
|
end
|
99
99
|
|
100
|
+
class HashType
|
101
|
+
def initialize(rv)
|
102
|
+
@rv = rv
|
103
|
+
end
|
104
|
+
|
105
|
+
def respond_to_missing?(*args)
|
106
|
+
true
|
107
|
+
end
|
108
|
+
|
109
|
+
def method_missing(methname, *args)
|
110
|
+
@rv[methname.to_s] = args[0] unless methname.to_s =~ /__.*__/
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
100
114
|
# Parse the DSL provided in the parameter.
|
101
115
|
#
|
102
116
|
# @param dsl [String] The DSL to be parsed by this class.
|
@@ -350,6 +364,28 @@ class DSL::Maker
|
|
350
364
|
instance_exec('@' + name.to_s, *args, &@@types[type])
|
351
365
|
end
|
352
366
|
end
|
367
|
+
elsif is_hash?(type)
|
368
|
+
as_attr = '@' + name.to_s
|
369
|
+
|
370
|
+
klass.class_eval do
|
371
|
+
define_method(name.to_sym) do |*args, &dsl_block|
|
372
|
+
if (!args.empty? || dsl_block)
|
373
|
+
rv = {}
|
374
|
+
Docile.dsl_eval(HashType.new(rv), &dsl_block) if dsl_block
|
375
|
+
|
376
|
+
# This is the one place where we pull out the entrypoint results and
|
377
|
+
# put them into the control class.
|
378
|
+
if klass.parent_class
|
379
|
+
# Use the full instance_variable_get() in order to avoid having to
|
380
|
+
# create accessors that could be misused outside this class.
|
381
|
+
klass.parent_class.instance_variable_get(:@accumulator).push(rv)
|
382
|
+
end
|
383
|
+
|
384
|
+
___set(as_attr, rv)
|
385
|
+
end
|
386
|
+
___get(as_attr)
|
387
|
+
end
|
388
|
+
end
|
353
389
|
elsif is_dsl?(type)
|
354
390
|
as_attr = '@' + name.to_s
|
355
391
|
klass.class_eval do
|
@@ -426,9 +462,9 @@ class DSL::Maker
|
|
426
462
|
end
|
427
463
|
|
428
464
|
def self.run_dsl()
|
429
|
-
# build_dsl_element() will use @accumulator to handle multiple entrypoints
|
430
|
-
# the class in question is a root DSL class. Reset it here so that we're
|
431
|
-
# handling the values from this run.
|
465
|
+
# build_dsl_element() will use @accumulator to handle multiple entrypoints
|
466
|
+
# if the class in question is a root DSL class. Reset it here so that we're
|
467
|
+
# only handling the values from this run.
|
432
468
|
@accumulator = []
|
433
469
|
|
434
470
|
yield
|
@@ -436,6 +472,10 @@ class DSL::Maker
|
|
436
472
|
return @accumulator
|
437
473
|
end
|
438
474
|
|
475
|
+
def self.is_hash?(proto)
|
476
|
+
proto == Hash
|
477
|
+
end
|
478
|
+
|
439
479
|
def self.is_dsl?(proto)
|
440
480
|
proto.is_a?(Class) && proto.ancestors.include?(DSL::Maker::Base)
|
441
481
|
end
|
data/lib/dsl/maker/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dsl_maker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rob Kinyon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-11-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: docile
|