inquisitive 2.0.0 → 2.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/.coveralls.yml +1 -0
- data/.gitignore +1 -0
- data/.travis.yml +42 -0
- data/CHANGELOG.md +17 -6
- data/Gemfile +10 -2
- data/Gemfile.ActiveSupport +16 -0
- data/README.md +75 -1
- data/inquisitive.gemspec +3 -4
- data/lib/inquisitive/environment.rb +7 -2
- data/test/inquisitive/combinatorial_environment_test.rb +2 -0
- data/test/inquisitive/environment_test.rb +8 -0
- data/test/inquisitive/hash_with_indifferent_access_test.rb +1 -1
- data/test/test_helper.rb +16 -4
- metadata +14 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae129b66c1055352e43e907ac246009511ef0cd2
|
4
|
+
data.tar.gz: 4cc0713d97d9ed273f904a186bd12cc2d8bdf8b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82aa740e308e0cc964700818ce3ea10446a90c586788ea8e856102a89ec00676a23ccfb60de5b3670ef48333c720e6dc20cc6c15ff66a3b46e854579eb76f368
|
7
|
+
data.tar.gz: b6d575e5815e3ee08fb6c933779604288f5a6995f6ad7d03ac78f01f3fbf91a6b766b45169fad54fdf2463d401aeafda30701f53643da9919891b0ed3d450b96
|
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
service_name: travis-ci
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
language: ruby
|
2
|
+
|
3
|
+
rvm:
|
4
|
+
- 1.9.3
|
5
|
+
- 2.0.0
|
6
|
+
- 2.1
|
7
|
+
- ruby-head
|
8
|
+
- rbx-2
|
9
|
+
- jruby
|
10
|
+
|
11
|
+
gemfile:
|
12
|
+
- Gemfile
|
13
|
+
- Gemfile.ActiveSupport
|
14
|
+
|
15
|
+
env:
|
16
|
+
- ""
|
17
|
+
- "activesupport=3.2.18"
|
18
|
+
- "activesupport=4.1.1"
|
19
|
+
- "activesupport=master"
|
20
|
+
|
21
|
+
matrix:
|
22
|
+
fast_finish: true
|
23
|
+
allow_failures:
|
24
|
+
- rvm: rbx-2
|
25
|
+
- rvm: jruby
|
26
|
+
- rvm: ruby-head
|
27
|
+
exclude:
|
28
|
+
- gemfile: Gemfile.ActiveSupport
|
29
|
+
env: ""
|
30
|
+
- gemfile: Gemfile
|
31
|
+
env: "activesupport=3.2.18"
|
32
|
+
- gemfile: Gemfile
|
33
|
+
env: "activesupport=4.1.1"
|
34
|
+
- gemfile: Gemfile
|
35
|
+
env: "activesupport=master"
|
36
|
+
|
37
|
+
branches:
|
38
|
+
except:
|
39
|
+
- gh-pages
|
40
|
+
|
41
|
+
after_success:
|
42
|
+
- coveralls
|
data/CHANGELOG.md
CHANGED
@@ -8,12 +8,23 @@ Starting with **[2.0.0](#2.0.0)**, Inquisitive follows [symantic versioning](sym
|
|
8
8
|
Releases
|
9
9
|
--------
|
10
10
|
|
11
|
+
[2.0.1]: https://github.com/christhekeele/inquisitive/tree/2.0.1
|
11
12
|
[2.0.0]: https://github.com/christhekeele/inquisitive/tree/2.0.0
|
12
13
|
[1.2.0]: https://github.com/christhekeele/inquisitive/tree/f314eaf84f7c3d9a2d56ae684d031dd81d2f7b85
|
13
14
|
|
14
15
|
- [2.0.0](#2.0.0)
|
15
16
|
- [1.2.0](#1.2.0)
|
16
17
|
|
18
|
+
2.0.1 - [2014.09.24][2.0.1]
|
19
|
+
---------------------------
|
20
|
+
|
21
|
+
### Non-breaking
|
22
|
+
|
23
|
+
- `Inquisitive::Environment.truthy`: **helper regex**
|
24
|
+
|
25
|
+
The `truthy` method provides an easy way to handle various command-line representations of truthiness.
|
26
|
+
|
27
|
+
|
17
28
|
2.0.0 - [2014.06.19][2.0.0]
|
18
29
|
---------------------------
|
19
30
|
|
@@ -22,7 +33,7 @@ Releases
|
|
22
33
|
- `Inquisitive::Environment`: **hash detection**
|
23
34
|
|
24
35
|
Previously `inquires_about` needed a special syntax to detect when you want to parse a group of environment variables as a hash. This was accomplished by leaving a trailing `_` in the declaration, such as:
|
25
|
-
|
36
|
+
|
26
37
|
```ruby
|
27
38
|
ENV['PREFIX_KEY1'] = "value1"
|
28
39
|
ENV['PREFIX_KEY2'] = "value2"
|
@@ -33,9 +44,9 @@ Releases
|
|
33
44
|
Mine.prefix
|
34
45
|
#=> { 'key1' => 'value1', 'key2' => 'value2' }
|
35
46
|
```
|
36
|
-
|
47
|
+
|
37
48
|
Now it auto-detects hash groupings by looking for a double-`_` in the key itself:
|
38
|
-
|
49
|
+
|
39
50
|
```ruby
|
40
51
|
ENV['PREFIX__KEY1'] = "value1"
|
41
52
|
ENV['PREFIX__KEY2'] = "value2"
|
@@ -52,11 +63,11 @@ Releases
|
|
52
63
|
- `Inquisitive::Environment`: **default modes**
|
53
64
|
|
54
65
|
Previously the default mode was `:dynamic`. This was mostly to prevent unexpected behaviour for newcomers.
|
55
|
-
|
66
|
+
|
56
67
|
Now `:static` is the default. This is because `Inquisitive::Environment` is meant to be loaded immediately after a boot script that prepares your environment variables, and queried often later. `:static` optimizes to this usecase.
|
57
|
-
|
68
|
+
|
58
69
|
To reproduce the old behaviour, you must explicitly pass `mode: :dynamic` each to `inquires_about` invocation. Alternatively, `mode: :lazy` might be a viable way to get the benefits of `:static` without refactoring your boot process.
|
59
|
-
|
70
|
+
|
60
71
|
### Non-breaking
|
61
72
|
|
62
73
|
- `Inquisitive::Environment`: **cached mode now lazy mode**
|
data/Gemfile
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
# Specify your gem's dependencies in inquisitive.gemspec
|
4
3
|
gemspec
|
5
4
|
|
6
|
-
gem 'pry'
|
5
|
+
gem 'pry',
|
6
|
+
group: [:development, :test]
|
7
|
+
|
8
|
+
gem 'simplecov', '>= 0.7.0',
|
9
|
+
require: false,
|
10
|
+
group: :test
|
11
|
+
|
12
|
+
gem 'coveralls',
|
13
|
+
require: false,
|
14
|
+
group: :test
|
data/README.md
CHANGED
@@ -3,12 +3,47 @@ Inquisitive
|
|
3
3
|
|
4
4
|
> **Predicate methods for those curious about their datastructures.**
|
5
5
|
|
6
|
+
|
7
|
+
Synopsis
|
8
|
+
--------
|
9
|
+
|
6
10
|
Inquisitive provides String, Array, and Hash subclasses with dynamic predicate methods that allow you to interrogate the most common Ruby datastructures in a readable, friendly fashion. It's the inevitable evolution of ActiveSupport's `StringInquirer`.
|
7
11
|
|
8
12
|
It also allows you to auto-instanciate and read inquisitive datastructures straight from your `ENV` hash through the `Inquisitive::Environment` module.
|
9
13
|
|
10
14
|
Inquisitive will try to use ActiveSupport's `HashWithIndifferentAccess`, but if that cannot be found it will bootstrap itself with a minimal, well-tested version extracted from ActiveSupport 4.0.
|
11
15
|
|
16
|
+
|
17
|
+
Status
|
18
|
+
------
|
19
|
+
|
20
|
+
[status]: https://travis-ci.org/christhekeele/inquisitive
|
21
|
+
|
22
|
+
[version]: https://rubygems.org/gems/inquisitive/versions
|
23
|
+
[version-image]: https://badge.fury.io/rb/inquisitive@2x.svg
|
24
|
+
|
25
|
+
[quality]: https://codeclimate.com/github/christhekeele/inquisitive
|
26
|
+
[quality-image]: https://img.shields.io/codeclimate/github/christhekeele/inquisitive.svg
|
27
|
+
|
28
|
+
[dependencies]: https://gemnasium.com/christhekeele/inquisitive
|
29
|
+
[dependencies-image]: http://img.shields.io/gemnasium/christhekeele/inquisitive.svg
|
30
|
+
|
31
|
+
[master]: https://github.com/christhekeele/inquisitive/tree/master
|
32
|
+
[master-status]: https://img.shields.io/travis/christhekeele/inquisitive/master.svg
|
33
|
+
[master-coverage]: https://img.shields.io/coveralls/christhekeele/inquisitive/master.svg
|
34
|
+
|
35
|
+
[development]: https://github.com/christhekeele/inquisitive/tree/development
|
36
|
+
[development-status]: https://img.shields.io/travis/christhekeele/inquisitive/development.svg
|
37
|
+
[development-coverage]: https://img.shields.io/coveralls/christhekeele/inquisitive/development.svg
|
38
|
+
|
39
|
+
[![Version][version-image]][version] [![Quality][quality-image]][quality] [![Dependencies][dependencies-image]][dependencies]
|
40
|
+
|
41
|
+
| :thumbsup: | [Continuous Integration][status] | Test Coverage |
|
42
|
+
|:--------------------------:|:-----------------------------------:|:----------------------------------------:|
|
43
|
+
| [Master][master] | ![Build Status][master-status] | ![Coverage Status][master-coverage] |
|
44
|
+
| [Development][development] | ![Build Status][development-status] | ![Coverage Status][development-coverage] |
|
45
|
+
|
46
|
+
|
12
47
|
Installation
|
13
48
|
------------
|
14
49
|
|
@@ -22,9 +57,10 @@ $ bundle install
|
|
22
57
|
Otherwise:
|
23
58
|
|
24
59
|
```bash
|
25
|
-
gem install inquisitive
|
60
|
+
$ gem install inquisitive
|
26
61
|
```
|
27
62
|
|
63
|
+
|
28
64
|
Usage
|
29
65
|
-----
|
30
66
|
|
@@ -236,6 +272,43 @@ This only works on top-level inquirers, so there's no way to get our nested `MyG
|
|
236
272
|
|
237
273
|
The `present_if` check uses `===` under the covers for maximum expressiveness, so you can also use it to match against regexs, classes, and other constructs.
|
238
274
|
|
275
|
+
##### Truthy Booleans
|
276
|
+
|
277
|
+
`Inquisitive::Environment.truthy` contains a regex useful for reading booleans from environment variables.
|
278
|
+
|
279
|
+
```ruby
|
280
|
+
ENV['NO'] = 'no'
|
281
|
+
ENV['YES'] = 'yes'
|
282
|
+
ENV['TRUTHY'] = 'TrUe'
|
283
|
+
ENV['FALSEY'] = 'FaLsE'
|
284
|
+
ENV['BOOLEAN'] = '1'
|
285
|
+
ENV['BOOLENOPE'] = '0'
|
286
|
+
class MyCli
|
287
|
+
extend Inquisitive::Environment
|
288
|
+
inquires_about 'NO', present_if: truthy
|
289
|
+
inquires_about 'YES', present_if: truthy
|
290
|
+
inquires_about 'TRUTHY', present_if: truthy
|
291
|
+
inquires_about 'FALSEY', present_if: truthy
|
292
|
+
inquires_about 'BOOLEAN', present_if: truthy
|
293
|
+
inquires_about 'BOOLENOPE', present_if: truthy
|
294
|
+
end
|
295
|
+
|
296
|
+
MyGame.no?
|
297
|
+
#=> false
|
298
|
+
MyGame.yes?
|
299
|
+
#=> true
|
300
|
+
|
301
|
+
MyGame.truthy?
|
302
|
+
#=> true
|
303
|
+
MyGame.falsey?
|
304
|
+
#=> false
|
305
|
+
|
306
|
+
MyGame.boolean?
|
307
|
+
#=> true
|
308
|
+
MyGame.boolenope?
|
309
|
+
#=> false
|
310
|
+
```
|
311
|
+
|
239
312
|
#### Inquiry mode
|
240
313
|
|
241
314
|
Environment inquirers have three configurable modes, defaulting to `:static`.
|
@@ -265,6 +338,7 @@ end
|
|
265
338
|
|
266
339
|
Use if your application is well-behaved and doesn't go mucking around with the environment at runtime.
|
267
340
|
|
341
|
+
|
268
342
|
Contributing
|
269
343
|
------------
|
270
344
|
|
data/inquisitive.gemspec
CHANGED
@@ -4,17 +4,17 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "inquisitive"
|
7
|
-
spec.version = "2.0.
|
7
|
+
spec.version = "2.0.1"
|
8
8
|
spec.authors = ["Chris Keele"]
|
9
9
|
spec.email = ["dev@chriskeele.com"]
|
10
10
|
spec.summary = "Predicate methods for those curious about their datastructures."
|
11
11
|
spec.description = <<-DESC
|
12
12
|
Predicate methods for those curious about their datastructures.
|
13
|
-
|
13
|
+
|
14
14
|
Provides String, Array, and Hash subclasses with dynamic predicate methods that
|
15
15
|
allow you to interrogate the contents of the most common Ruby datastructures
|
16
16
|
in a readable, friendly fashion.
|
17
|
-
|
17
|
+
|
18
18
|
Also allows you to auto-instanciate and read inquisitive datastructures straight
|
19
19
|
from your `ENV` hash.
|
20
20
|
DESC
|
@@ -28,5 +28,4 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_development_dependency "bundler", ">= 1.3"
|
29
29
|
spec.add_development_dependency "rake", ">= 10.0"
|
30
30
|
spec.add_development_dependency "minitest", ">= 5.0"
|
31
|
-
spec.add_development_dependency "simplecov", ">= 0.7"
|
32
31
|
end
|
@@ -2,6 +2,10 @@ module Inquisitive
|
|
2
2
|
module Environment
|
3
3
|
include Inquisitive
|
4
4
|
|
5
|
+
def truthy
|
6
|
+
/true|yes|1/i
|
7
|
+
end
|
8
|
+
|
5
9
|
def inquires_about(env_var, opts={})
|
6
10
|
|
7
11
|
env_accessor = opts.fetch(:with, env_var.downcase[/(.*?)(?=(?:_$|$))/])
|
@@ -43,6 +47,7 @@ module Inquisitive
|
|
43
47
|
Inquisitive.present? send(predication(__method__))
|
44
48
|
end
|
45
49
|
end
|
50
|
+
|
46
51
|
end
|
47
52
|
|
48
53
|
private
|
@@ -52,7 +57,7 @@ module Inquisitive
|
|
52
57
|
|
53
58
|
def [](var_name)
|
54
59
|
if ENV.has_key? var_name
|
55
|
-
|
60
|
+
|
56
61
|
env_var = ENV[var_name]
|
57
62
|
if env_var.include? ','
|
58
63
|
env_var.split(',').map(&:strip)
|
@@ -71,7 +76,7 @@ module Inquisitive
|
|
71
76
|
""
|
72
77
|
end
|
73
78
|
end
|
74
|
-
|
79
|
+
|
75
80
|
def can_find_env_keys_from(var_name)
|
76
81
|
found = env_keys_from(var_name)
|
77
82
|
found.empty? ? nil : found
|
@@ -43,4 +43,12 @@ class InquisitiveEnvironmentTest < EnvironmentTest
|
|
43
43
|
refute App.authorizable?
|
44
44
|
end
|
45
45
|
|
46
|
+
%w[true True TrUe TRUE yes Yes YeS YES 1].each do |truthy_var|
|
47
|
+
define_method :"test_truthy_var_#{truthy_var}" do
|
48
|
+
ENV['TRUTHY'] = truthy_var
|
49
|
+
App.inquires_about 'TRUTHY', present_if: App.truthy
|
50
|
+
assert App.truthy?
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
46
54
|
end
|
@@ -336,7 +336,7 @@ class InquisitiveHashWithIndifferentAccessTest < Test
|
|
336
336
|
|
337
337
|
# Should preserve the default proc.
|
338
338
|
mixed_with_default_proc = @mixed.dup
|
339
|
-
mixed_with_default_proc.default_proc =
|
339
|
+
mixed_with_default_proc.default_proc = lambda { |h, k| '1234' }
|
340
340
|
roundtrip = HashWithIndifferentAccess.new(mixed_with_default_proc).to_hash
|
341
341
|
assert_equal @strings, roundtrip
|
342
342
|
assert_equal '1234', roundtrip.default
|
data/test/test_helper.rb
CHANGED
@@ -1,11 +1,23 @@
|
|
1
1
|
require "rubygems"
|
2
|
-
require "simplecov"
|
3
|
-
require "minitest/autorun"
|
4
2
|
|
5
|
-
|
6
|
-
|
3
|
+
begin
|
4
|
+
require 'simplecov'
|
5
|
+
SimpleCov.coverage_dir '.coverage'
|
6
|
+
if ENV['CI']
|
7
|
+
require 'coveralls'
|
8
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
9
|
+
SimpleCov::Formatter::HTMLFormatter,
|
10
|
+
Coveralls::SimpleCov::Formatter
|
11
|
+
]
|
12
|
+
end
|
13
|
+
SimpleCov.start do
|
14
|
+
add_filter "/test"
|
15
|
+
add_filter "/vendor"
|
16
|
+
end
|
7
17
|
end
|
8
18
|
|
19
|
+
require "minitest/autorun"
|
20
|
+
|
9
21
|
class Test < MiniTest::Test
|
10
22
|
|
11
23
|
def assert_change(lambda_getter)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inquisitive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Keele
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,34 +52,27 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '5.0'
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0.7'
|
69
|
-
description: " Predicate methods for those curious about their datastructures.\n
|
70
|
-
\ \n Provides String, Array, and Hash subclasses with dynamic predicate methods
|
71
|
-
that\n allow you to interrogate the contents of the most common Ruby datastructures\n
|
72
|
-
\ in a readable, friendly fashion.\n \n Also allows you to auto-instanciate
|
73
|
-
and read inquisitive datastructures straight\n from your `ENV` hash.\n"
|
55
|
+
description: |2
|
56
|
+
Predicate methods for those curious about their datastructures.
|
57
|
+
|
58
|
+
Provides String, Array, and Hash subclasses with dynamic predicate methods that
|
59
|
+
allow you to interrogate the contents of the most common Ruby datastructures
|
60
|
+
in a readable, friendly fashion.
|
61
|
+
|
62
|
+
Also allows you to auto-instanciate and read inquisitive datastructures straight
|
63
|
+
from your `ENV` hash.
|
74
64
|
email:
|
75
65
|
- dev@chriskeele.com
|
76
66
|
executables: []
|
77
67
|
extensions: []
|
78
68
|
extra_rdoc_files: []
|
79
69
|
files:
|
70
|
+
- ".coveralls.yml"
|
80
71
|
- ".gitignore"
|
72
|
+
- ".travis.yml"
|
81
73
|
- CHANGELOG.md
|
82
74
|
- Gemfile
|
75
|
+
- Gemfile.ActiveSupport
|
83
76
|
- LICENSE.md
|
84
77
|
- README.md
|
85
78
|
- Rakefile
|
@@ -139,4 +132,3 @@ test_files:
|
|
139
132
|
- test/shared/hash_tests.rb
|
140
133
|
- test/shared/string_tests.rb
|
141
134
|
- test/test_helper.rb
|
142
|
-
has_rdoc:
|