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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4df64881f4215d866d038e00f55d5b1ca2a45cb2
4
- data.tar.gz: 26a8de33f8bf657873666a2754bf09f605334e9d
3
+ metadata.gz: efc3f0539f1c253fdc8487bcc23f671e8c74fab5
4
+ data.tar.gz: 4a6ff57d636604f406e6d19ca27b6fce30110d9f
5
5
  SHA512:
6
- metadata.gz: 75669d4f578d70ba4c8be7dd6c19676041506e0f9408ba26ea0b1ad7931cf59636ccf36a4363ae709a1476464caba5ca1c429b07233dda7d797d5007f3c0af10
7
- data.tar.gz: e0e0e7364436ce92f4ab5efc52c2782e5da098d302652ca8698d74bcccc27c695b269c04ced3d224eec1a5b3833ba91c44232a2cc4c55fe061504246a715ef49
6
+ metadata.gz: 410b86373972c31e31811dad9dc257501be169d43484023f98a54f63ff1a9c61cc5ac5974aaea384e4373a93eeab763f1f5d7db80803f2d605581963f19c9f4c
7
+ data.tar.gz: 84dd464b50e7d368c198570370233e8ea1c2fef17e1d114a0b1798a302c0bf7126ff38bfe1a53d6a2e1609f524e689ae6b9233af7c9b5bca6978f0f68fd817e0
data/.gitignore CHANGED
@@ -6,4 +6,6 @@ pkg
6
6
  doc
7
7
  .yardoc
8
8
  coverage
9
- vendor
9
+ vendor
10
+ .ruby-gemset
11
+ .ruby-version
@@ -1,21 +1,37 @@
1
1
  language: ruby
2
- cache: bundler
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.1.2
6
- - 2.1.1
7
- - 2.1.0
8
- - 2.0.0
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
- - rbx-2
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
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2012-2014 Marc Siegel
3
+ Copyright (c) 2012-2018 Marc Siegel
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,11 +1,16 @@
1
1
  # Docile
2
- [![Gem Version](https://badge.fury.io/rb/docile.png)](http://badge.fury.io/rb/docile)
3
- [![Build Status](https://travis-ci.org/ms-ati/docile.png)](https://travis-ci.org/ms-ati/docile)
4
- [![Dependency Status](https://gemnasium.com/ms-ati/docile.png)](https://gemnasium.com/ms-ati/docile)
5
- [![Code Climate](https://codeclimate.com/github/ms-ati/docile.png)](https://codeclimate.com/github/ms-ati/docile)
6
- [![Coverage Status](https://coveralls.io/repos/ms-ati/docile/badge.png)](https://coveralls.io/r/ms-ati/docile)
7
- [![Inline docs](http://inch-ci.org/github/ms-ati/docile.png)](http://inch-ci.org/github/ms-ati/docile)
8
- [![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/ms-ati/docile/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
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
- ### Advanced
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
- ``` ruby
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-2014 Marc Siegel.
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 1.8
17
- if !on_travis? && !on_jruby? && !on_1_8?
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'
@@ -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
- # NOTE: needed for Travis builds on 1.8, but can't yet reproduce failure locally
29
- s.add_development_dependency 'mime-types', '~> 1.25.1' if on_1_8?
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 1.8
33
- if !on_travis? && !on_jruby? && !on_1_8?
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
@@ -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
  #
@@ -1,4 +1,4 @@
1
1
  module Docile
2
2
  # The current version of this library
3
- VERSION = '1.1.5'
3
+ VERSION = '1.2.0'
4
4
  end
data/on_what.rb CHANGED
@@ -6,9 +6,17 @@ def on_travis?
6
6
  end
7
7
 
8
8
  def on_jruby?
9
- (defined?(RUBY_ENGINE) && 'jruby' == RUBY_ENGINE)
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
@@ -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
@@ -1,26 +1,27 @@
1
1
  require File.expand_path('on_what', File.dirname(File.dirname(__FILE__)))
2
2
 
3
- begin
4
- require 'simplecov'
5
- require 'coveralls'
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/' # exclude test code
15
- add_filter '/vendor/' # exclude gems which are vendored on Travis CI
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
- # Remove Docile, which was required by SimpleCov, to require again later
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.1.5
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: 2014-06-15 00:00:00.000000000 Z
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.2.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:
@@ -1 +0,0 @@
1
- docile
@@ -1 +0,0 @@
1
- ruby-2.1.0