dsl_maker 1.0.0 → 1.0.1
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.
- 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
|