docile 1.1.5 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -1
- data/.travis.yml +23 -7
- data/Gemfile +8 -0
- data/HISTORY.md +9 -0
- data/LICENSE +1 -1
- data/README.md +122 -13
- data/Rakefile +2 -2
- data/docile.gemspec +10 -8
- data/lib/docile.rb +39 -0
- data/lib/docile/version.rb +1 -1
- data/on_what.rb +10 -2
- data/spec/docile_spec.rb +23 -0
- data/spec/spec_helper.rb +16 -15
- metadata +7 -24
- data/.ruby-gemset +0 -1
- data/.ruby-version +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: efc3f0539f1c253fdc8487bcc23f671e8c74fab5
|
4
|
+
data.tar.gz: 4a6ff57d636604f406e6d19ca27b6fce30110d9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 410b86373972c31e31811dad9dc257501be169d43484023f98a54f63ff1a9c61cc5ac5974aaea384e4373a93eeab763f1f5d7db80803f2d605581963f19c9f4c
|
7
|
+
data.tar.gz: 84dd464b50e7d368c198570370233e8ea1c2fef17e1d114a0b1798a302c0bf7126ff38bfe1a53d6a2e1609f524e689ae6b9233af7c9b5bca6978f0f68fd817e0
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,21 +1,37 @@
|
|
1
1
|
language: ruby
|
2
|
-
|
2
|
+
|
3
|
+
# Apparently sudo is required to test on Rubinius and JRuby-head
|
4
|
+
sudo: required
|
5
|
+
|
6
|
+
# See https://docs.travis-ci.com/user/languages/ruby/#Rubinius
|
7
|
+
dist: trusty
|
8
|
+
|
3
9
|
rvm:
|
10
|
+
# MRI
|
4
11
|
- ruby-head
|
5
|
-
- 2.
|
6
|
-
- 2.
|
7
|
-
- 2.
|
8
|
-
- 2.
|
12
|
+
- 2.4
|
13
|
+
- 2.3
|
14
|
+
- 2.2
|
15
|
+
- 2.1
|
16
|
+
- 2.0
|
17
|
+
- 1.9.2 # allowed to fail until Travis binary for this is fixed
|
9
18
|
- 1.9.3
|
10
|
-
- 1.9.2
|
11
19
|
- 1.8.7
|
12
20
|
- ree
|
21
|
+
# JRuby
|
13
22
|
- jruby-head
|
23
|
+
- jruby-9.1 # allowed to fail due to https://github.com/travis-ci/travis-ci/issues/9049
|
24
|
+
- jruby-9.0
|
14
25
|
- jruby-19mode
|
15
26
|
- jruby-18mode
|
16
|
-
|
27
|
+
# Rubinius
|
28
|
+
- rubinius-3
|
29
|
+
|
17
30
|
matrix:
|
18
31
|
allow_failures:
|
19
32
|
- rvm: ruby-head
|
33
|
+
- rvm: 1.9.2 # See build error https://travis-ci.org/tcrayford/Values/jobs/202728857
|
20
34
|
- rvm: jruby-head
|
35
|
+
- rvm: jruby-9.1 # See build error https://travis-ci.org/ms-ati/docile/jobs/327830706
|
36
|
+
- rvm: rubinius-3
|
21
37
|
fast_finish: true
|
data/Gemfile
CHANGED
@@ -1,4 +1,12 @@
|
|
1
|
+
require File.expand_path('on_what', File.dirname(__FILE__))
|
1
2
|
source 'https://rubygems.org'
|
2
3
|
|
4
|
+
# Travis-only dependencies go here
|
5
|
+
if on_travis? && !on_1_8?
|
6
|
+
group :test do
|
7
|
+
gem 'codecov', '>= 0.0.9', :require => false
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
3
11
|
# Specify gem's dependencies in docile.gemspec
|
4
12
|
gemspec
|
data/HISTORY.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# HISTORY
|
2
2
|
|
3
|
+
## [Unreleased changes](http://github.com/ms-ati/docile/compare/v1.2.0...master)
|
4
|
+
|
5
|
+
## [v1.2.0 (Jan 11, 2018)](http://github.com/ms-ati/docile/compare/v1.1.5...v1.2.0)
|
6
|
+
|
7
|
+
- Special thanks to Christina Koller (@cmkoller)
|
8
|
+
- add DSL evaluation returning *return value of the block* (see `.dsl_eval_with_block_return`)
|
9
|
+
- add an example to README
|
10
|
+
- keep travis builds passing on old ruby versions
|
11
|
+
|
3
12
|
## [v1.1.5 (Jun 15, 2014)](http://github.com/ms-ati/docile/compare/v1.1.4...v1.1.5)
|
4
13
|
|
5
14
|
- as much as possible, loosen version restrictions on development dependencies
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,11 +1,16 @@
|
|
1
1
|
# Docile
|
2
|
-
|
3
|
-
[![
|
4
|
-
[![
|
5
|
-
|
6
|
-
[![
|
7
|
-
[![
|
8
|
-
[![
|
2
|
+
|
3
|
+
[![Gem Version](https://img.shields.io/gem/v/docile.svg)](https://rubygems.org/gems/docile)
|
4
|
+
[![Gem Downloads](https://img.shields.io/gem/dt/docile.svg)](https://rubygems.org/gems/docile)
|
5
|
+
|
6
|
+
[![Join the chat at https://gitter.im/ms-ati/docile](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/ms-ati/docile?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
7
|
+
[![Yard Docs](http://img.shields.io/badge/yard-docs-blue.svg)](http://rubydoc.info/github/ms-ati/docile)
|
8
|
+
[![Docs Coverage](http://inch-ci.org/github/ms-ati/docile.png)](http://inch-ci.org/github/ms-ati/docile)
|
9
|
+
|
10
|
+
[![Build Status](https://img.shields.io/travis/ms-ati/docile/master.svg)](https://travis-ci.org/ms-ati/docile)
|
11
|
+
[![Dependency Status](https://gemnasium.com/ms-ati/docile.svg)](https://gemnasium.com/ms-ati/docile)
|
12
|
+
[![Code Climate](https://img.shields.io/codeclimate/github/ms-ati/docile.svg)](https://codeclimate.com/github/ms-ati/docile)
|
13
|
+
[![Code Coverage](https://img.shields.io/codecov/c/github/ms-ati/docile.svg)](https://codecov.io/github/ms-ati/docile)
|
9
14
|
|
10
15
|
Ruby makes it possible to create very expressive **Domain Specific
|
11
16
|
Languages**, or **DSL**'s for short. However, it requires some deep knowledge and
|
@@ -20,7 +25,7 @@ coding a bit more docile...
|
|
20
25
|
|
21
26
|
## Usage
|
22
27
|
|
23
|
-
### Basic
|
28
|
+
### Basic: Ruby [Array](http://ruby-doc.org/core-2.2.2/Array.html) as DSL
|
24
29
|
|
25
30
|
Let's say that we want to make a DSL for modifying Array objects.
|
26
31
|
Wouldn't it be great if we could just treat the methods of Array as a DSL?
|
@@ -43,9 +48,54 @@ def with_array(arr=[], &block)
|
|
43
48
|
end
|
44
49
|
```
|
45
50
|
|
46
|
-
Easy
|
51
|
+
**Easy!**
|
52
|
+
|
53
|
+
### Wait! Can't I do that with just `instance_eval` or `instance_exec`?
|
54
|
+
|
55
|
+
Good question!
|
56
|
+
|
57
|
+
Let's be very specific. Docile internally uses `instance_exec` (see [execution.rb#25](lib/docile/execution.rb#L25)), adding a small layer to support referencing *local variables*, *instance variables*, and *methods* from the _block's context_ **or** the target _object's context_, interchangeably. This is "the **hard part**", where most folks making a DSL in Ruby throw up their hands.
|
58
|
+
|
59
|
+
For example:
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
class ContextOfBlock
|
63
|
+
def example_of_contexts
|
64
|
+
@block_instance_var = 1
|
65
|
+
block_local_var = 2
|
66
|
+
|
67
|
+
with_array do
|
68
|
+
push @block_instance_var
|
69
|
+
push block_local_var
|
70
|
+
pop
|
71
|
+
push block_sees_this_method
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def block_sees_this_method
|
76
|
+
3
|
77
|
+
end
|
78
|
+
|
79
|
+
def with_array(&block)
|
80
|
+
{
|
81
|
+
docile: Docile.dsl_eval([], &block),
|
82
|
+
instance_eval: ([].instance_eval(&block) rescue $!),
|
83
|
+
instance_exec: ([].instance_exec(&block) rescue $!)
|
84
|
+
}
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
ContextOfBlock.new.example_of_contexts
|
89
|
+
#=> {
|
90
|
+
:docile=>[1, 3],
|
91
|
+
:instance_eval=>#<NameError: undefined local variable or method `block_sees_this_method' for [nil]:Array>,
|
92
|
+
:instance_exec=>#<NameError: undefined local variable or method `block_sees_this_method' for [nil]:Array>
|
93
|
+
}
|
94
|
+
```
|
95
|
+
|
96
|
+
As you can see, it won't be possible to call methods or access instance variables defined in the block's context using just the raw `instance_eval` or `instance_exec` methods. And in fact, Docile goes further, making it easy to maintain this support even in multi-layered DSLs.
|
47
97
|
|
48
|
-
###
|
98
|
+
### Build a Pizza
|
49
99
|
|
50
100
|
Mutating (changing) an Array instance is fine, but what usually makes a good DSL is a [Builder Pattern][2].
|
51
101
|
|
@@ -83,7 +133,7 @@ PizzaBuilder.new.cheese.pepperoni.sauce(:extra).build
|
|
83
133
|
|
84
134
|
Then implement your DSL like this:
|
85
135
|
|
86
|
-
```
|
136
|
+
```ruby
|
87
137
|
def pizza(&block)
|
88
138
|
Docile.dsl_eval(PizzaBuilder.new, &block).build
|
89
139
|
end
|
@@ -93,6 +143,38 @@ It's just that easy!
|
|
93
143
|
|
94
144
|
[2]: http://stackoverflow.com/questions/328496/when-would-you-use-the-builder-pattern "Builder Pattern"
|
95
145
|
|
146
|
+
### Multi-level and Recursive DSLs
|
147
|
+
|
148
|
+
Docile is a very easy way to write a multi-level DSL in Ruby, even for
|
149
|
+
a [recursive data structure such as a tree][4]:
|
150
|
+
|
151
|
+
```ruby
|
152
|
+
Person = Struct.new(:name, :mother, :father)
|
153
|
+
|
154
|
+
person {
|
155
|
+
name 'John Smith'
|
156
|
+
mother {
|
157
|
+
name 'Mary Smith'
|
158
|
+
}
|
159
|
+
father {
|
160
|
+
name 'Tom Smith'
|
161
|
+
mother {
|
162
|
+
name 'Jane Smith'
|
163
|
+
}
|
164
|
+
}
|
165
|
+
}
|
166
|
+
|
167
|
+
#=> #<struct Person name="John Smith",
|
168
|
+
# mother=#<struct Person name="Mary Smith", mother=nil, father=nil>,
|
169
|
+
# father=#<struct Person name="Tom Smith",
|
170
|
+
# mother=#<struct Person name="Jane Smith", mother=nil, father=nil>,
|
171
|
+
# father=nil>>
|
172
|
+
```
|
173
|
+
|
174
|
+
See the full [person tree example][4] for details.
|
175
|
+
|
176
|
+
[4]: https://gist.github.com/ms-ati/2bb17bdf10a430faba98
|
177
|
+
|
96
178
|
### Block parameters
|
97
179
|
|
98
180
|
Parameters can be passed to the DSL block.
|
@@ -153,7 +235,7 @@ end
|
|
153
235
|
|
154
236
|
[3]: http://www.sinatrarb.com "Sinatra"
|
155
237
|
|
156
|
-
### Functional-Style DSL Objects
|
238
|
+
### Functional-Style Immutable DSL Objects
|
157
239
|
|
158
240
|
Sometimes, you want to use an object as a DSL, but it doesn't quite fit the
|
159
241
|
[imperative](http://en.wikipedia.org/wiki/Imperative_programming) pattern shown
|
@@ -192,6 +274,33 @@ end
|
|
192
274
|
|
193
275
|
All set!
|
194
276
|
|
277
|
+
### Accessing the block's return value
|
278
|
+
|
279
|
+
Sometimes you might want to access the return value of your provided block,
|
280
|
+
as opposed to the DSL object itself. In these cases, use
|
281
|
+
`dsl_eval_with_block_return`. It behaves exactly like `dsl_eval`, but returns
|
282
|
+
the output from executing the block, rather than the DSL object.
|
283
|
+
|
284
|
+
```ruby
|
285
|
+
arr = []
|
286
|
+
with_array(arr) do
|
287
|
+
push "a"
|
288
|
+
push "b"
|
289
|
+
push "c"
|
290
|
+
length
|
291
|
+
end
|
292
|
+
#=> 3
|
293
|
+
|
294
|
+
arr
|
295
|
+
#=> ["a", "b", "c"]
|
296
|
+
```
|
297
|
+
|
298
|
+
```ruby
|
299
|
+
def with_array(arr=[], &block)
|
300
|
+
Docile.dsl_eval_with_block_return(arr, &block)
|
301
|
+
end
|
302
|
+
```
|
303
|
+
|
195
304
|
## Features
|
196
305
|
|
197
306
|
1. Method lookup falls back from the DSL object to the block's context
|
@@ -234,7 +343,7 @@ Used by some pretty cool gems to implement their DSLs, notably including [Simple
|
|
234
343
|
|
235
344
|
## Copyright & License
|
236
345
|
|
237
|
-
Copyright (c) 2012-
|
346
|
+
Copyright (c) 2012-2018 Marc Siegel.
|
238
347
|
|
239
348
|
Licensed under the [MIT License](http://choosealicense.com/licenses/mit/), see [LICENSE](LICENSE) for details.
|
240
349
|
|
data/Rakefile
CHANGED
@@ -13,8 +13,8 @@ RSpec::Core::RakeTask.new
|
|
13
13
|
CLOBBER.include('pkg', 'doc', 'coverage')
|
14
14
|
|
15
15
|
# To limit needed compatibility with versions of dependencies, only configure
|
16
|
-
# yard doc generation when *not* on Travis, JRuby, or
|
17
|
-
if !on_travis? && !on_jruby? && !
|
16
|
+
# yard doc generation when *not* on Travis, JRuby, or < 2.0
|
17
|
+
if !on_travis? && !on_jruby? && !on_less_than_2_0?
|
18
18
|
require 'github/markup'
|
19
19
|
require 'redcarpet'
|
20
20
|
require 'yard'
|
data/docile.gemspec
CHANGED
@@ -22,22 +22,24 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.required_ruby_version = '>= 1.8.7'
|
23
23
|
|
24
24
|
# Run rspec tests from rake
|
25
|
-
s.add_development_dependency 'rake'
|
25
|
+
s.add_development_dependency 'rake', '~> 10.5.0' if on_less_than_1_9_3? # Pin compatible rake on old rubies, see: https://github.com/travis-ci/travis.rb/issues/380
|
26
|
+
s.add_development_dependency 'rake', '< 11.0' unless on_less_than_1_9_3? # See http://stackoverflow.com/questions/35893584/nomethoderror-undefined-method-last-comment-after-upgrading-to-rake-11
|
26
27
|
s.add_development_dependency 'rspec', '~> 3.0.0'
|
27
28
|
|
28
|
-
#
|
29
|
-
s.add_development_dependency '
|
29
|
+
# Pin versions for Travis builds on 1.9
|
30
|
+
s.add_development_dependency 'json', '< 2.0' if on_less_than_2_0?
|
31
|
+
|
32
|
+
# Pin versions for Travis builds on 1.8
|
33
|
+
s.add_development_dependency 'mime-types' , '~> 1.25.1' if on_1_8?
|
34
|
+
s.add_development_dependency 'rest-client', '~> 1.6.8' if on_1_8?
|
30
35
|
|
31
36
|
# To limit needed compatibility with versions of dependencies, only configure
|
32
|
-
# yard doc generation when *not* on Travis, JRuby, or
|
33
|
-
if !on_travis? && !on_jruby? && !
|
37
|
+
# yard doc generation when *not* on Travis, JRuby, or < 2.0
|
38
|
+
if !on_travis? && !on_jruby? && !on_less_than_2_0?
|
34
39
|
# Github flavored markdown in YARD documentation
|
35
40
|
# http://blog.nikosd.com/2011/11/github-flavored-markdown-in-yard.html
|
36
41
|
s.add_development_dependency 'yard'
|
37
42
|
s.add_development_dependency 'redcarpet'
|
38
43
|
s.add_development_dependency 'github-markup'
|
39
44
|
end
|
40
|
-
|
41
|
-
# Coveralls test coverage tool, basically hosted SimpleCov
|
42
|
-
s.add_development_dependency 'coveralls'
|
43
45
|
end
|
data/lib/docile.rb
CHANGED
@@ -45,6 +45,45 @@ module Docile
|
|
45
45
|
end
|
46
46
|
module_function :dsl_eval
|
47
47
|
|
48
|
+
# Execute a block in the context of an object whose methods represent the
|
49
|
+
# commands in a DSL, and return *the block's return value*.
|
50
|
+
#
|
51
|
+
# @note Use with an *imperative* DSL (commands modify the context object)
|
52
|
+
#
|
53
|
+
# Use this method to execute an *imperative* DSL, which means that:
|
54
|
+
#
|
55
|
+
# 1. Each command mutates the state of the DSL context object
|
56
|
+
# 2. The return value of each command is ignored
|
57
|
+
# 3. The final return value is the original context object
|
58
|
+
#
|
59
|
+
# @example Use a String as a DSL
|
60
|
+
# Docile.dsl_eval_with_block_return("Hello, world!") do
|
61
|
+
# reverse!
|
62
|
+
# upcase!
|
63
|
+
# first
|
64
|
+
# end
|
65
|
+
# #=> "!"
|
66
|
+
#
|
67
|
+
# @example Use an Array as a DSL
|
68
|
+
# Docile.dsl_eval_with_block_return([]) do
|
69
|
+
# push "a"
|
70
|
+
# push "b"
|
71
|
+
# pop
|
72
|
+
# push "c"
|
73
|
+
# length
|
74
|
+
# end
|
75
|
+
# #=> 2
|
76
|
+
#
|
77
|
+
# @param dsl [Object] context object whose methods make up the DSL
|
78
|
+
# @param args [Array] arguments to be passed to the block
|
79
|
+
# @param block [Proc] the block of DSL commands to be executed against the
|
80
|
+
# `dsl` context object
|
81
|
+
# @return [Object] the return value from executing the block
|
82
|
+
def dsl_eval_with_block_return(dsl, *args, &block)
|
83
|
+
exec_in_proxy_context(dsl, FallbackContextProxy, *args, &block)
|
84
|
+
end
|
85
|
+
module_function :dsl_eval_with_block_return
|
86
|
+
|
48
87
|
# Execute a block in the context of an immutable object whose methods,
|
49
88
|
# and the methods of their return values, represent the commands in a DSL.
|
50
89
|
#
|
data/lib/docile/version.rb
CHANGED
data/on_what.rb
CHANGED
@@ -6,9 +6,17 @@ def on_travis?
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def on_jruby?
|
9
|
-
|
9
|
+
defined?(RUBY_ENGINE) && 'jruby' == RUBY_ENGINE
|
10
10
|
end
|
11
11
|
|
12
12
|
def on_1_8?
|
13
13
|
RUBY_VERSION.start_with? '1.8'
|
14
|
-
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def on_less_than_1_9_3?
|
17
|
+
RUBY_VERSION < '1.9.3'
|
18
|
+
end
|
19
|
+
|
20
|
+
def on_less_than_2_0?
|
21
|
+
RUBY_VERSION < '2.0.0'
|
22
|
+
end
|
data/spec/docile_spec.rb
CHANGED
@@ -263,6 +263,29 @@ describe Docile do
|
|
263
263
|
|
264
264
|
end
|
265
265
|
|
266
|
+
describe '.dsl_eval_with_block_return' do
|
267
|
+
let(:array) { [] }
|
268
|
+
let!(:result) { execute_dsl_against_array }
|
269
|
+
|
270
|
+
def execute_dsl_against_array
|
271
|
+
Docile.dsl_eval_with_block_return(array) do
|
272
|
+
push 1
|
273
|
+
push 2
|
274
|
+
pop
|
275
|
+
push 3
|
276
|
+
'Return me!'
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
it 'executes the block against the DSL context object' do
|
281
|
+
expect(array).to eq([1, 3])
|
282
|
+
end
|
283
|
+
|
284
|
+
it "returns the block's return value" do
|
285
|
+
expect(result).to eq('Return me!')
|
286
|
+
end
|
287
|
+
end
|
288
|
+
|
266
289
|
describe '.dsl_eval_immutable' do
|
267
290
|
|
268
291
|
context 'when DSL context object is a frozen String' do
|
data/spec/spec_helper.rb
CHANGED
@@ -1,26 +1,27 @@
|
|
1
1
|
require File.expand_path('on_what', File.dirname(File.dirname(__FILE__)))
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
# On Ruby 1.9+ use SimpleCov and publish to Coveralls.io
|
8
|
-
if !on_1_8?
|
9
|
-
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
10
|
-
SimpleCov::Formatter::HTMLFormatter,
|
11
|
-
Coveralls::SimpleCov::Formatter
|
12
|
-
]
|
3
|
+
# Code coverage (via SimpleCov) on Ruby 1.9+
|
4
|
+
unless on_1_8?
|
5
|
+
begin
|
6
|
+
require 'simplecov'
|
13
7
|
SimpleCov.start do
|
14
|
-
add_filter '/spec/'
|
15
|
-
add_filter '/vendor/'
|
8
|
+
add_filter '/spec/' # exclude test code
|
9
|
+
add_filter '/vendor/' # exclude gems which are vendored on Travis CI
|
10
|
+
add_filter '/on_what.rb' # exclude help used only in gemspec
|
11
|
+
end
|
12
|
+
|
13
|
+
# On CI we publish simplecov results to codecov.io
|
14
|
+
if on_travis?
|
15
|
+
require 'codecov'
|
16
|
+
SimpleCov.formatter = SimpleCov::Formatter::Codecov
|
16
17
|
end
|
17
18
|
|
18
|
-
#
|
19
|
+
# Due to circular dependency (simplecov depends on docile), remove docile and require again below
|
19
20
|
Object.send(:remove_const, :Docile)
|
20
21
|
$LOADED_FEATURES.reject! { |f| f =~ /\/docile\// }
|
22
|
+
rescue LoadError
|
23
|
+
warn 'warning: simplecov or codecov gems not found; skipping coverage'
|
21
24
|
end
|
22
|
-
rescue LoadError
|
23
|
-
warn 'warning: simplecov/coveralls gems not found; skipping coverage'
|
24
25
|
end
|
25
26
|
|
26
27
|
lib_dir = File.join(File.dirname(File.dirname(__FILE__)), 'lib')
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docile
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marc Siegel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "<"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
19
|
+
version: '11.0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "<"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
26
|
+
version: '11.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,20 +80,6 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: coveralls
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
83
|
description: Docile turns any Ruby object into a DSL. Especially useful with the Builder
|
98
84
|
pattern.
|
99
85
|
email: marc@usainnov.com
|
@@ -103,8 +89,6 @@ extra_rdoc_files: []
|
|
103
89
|
files:
|
104
90
|
- ".gitignore"
|
105
91
|
- ".rspec"
|
106
|
-
- ".ruby-gemset"
|
107
|
-
- ".ruby-version"
|
108
92
|
- ".travis.yml"
|
109
93
|
- ".yardopts"
|
110
94
|
- Gemfile
|
@@ -141,11 +125,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
125
|
version: '0'
|
142
126
|
requirements: []
|
143
127
|
rubyforge_project:
|
144
|
-
rubygems_version: 2.
|
128
|
+
rubygems_version: 2.6.13
|
145
129
|
signing_key:
|
146
130
|
specification_version: 4
|
147
131
|
summary: Docile keeps your Ruby DSLs tame and well-behaved
|
148
132
|
test_files:
|
149
133
|
- spec/docile_spec.rb
|
150
134
|
- spec/spec_helper.rb
|
151
|
-
has_rdoc:
|
data/.ruby-gemset
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
docile
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
ruby-2.1.0
|