docile 1.1.5 → 1.2.0
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/.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
|
-
[](https://rubygems.org/gems/docile)
|
4
|
+
[](https://rubygems.org/gems/docile)
|
5
|
+
|
6
|
+
[](https://gitter.im/ms-ati/docile?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
7
|
+
[](http://rubydoc.info/github/ms-ati/docile)
|
8
|
+
[](http://inch-ci.org/github/ms-ati/docile)
|
9
|
+
|
10
|
+
[](https://travis-ci.org/ms-ati/docile)
|
11
|
+
[](https://gemnasium.com/ms-ati/docile)
|
12
|
+
[](https://codeclimate.com/github/ms-ati/docile)
|
13
|
+
[](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
|