power_converter 0.1.1 → 0.1.2
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/README.md +73 -8
- data/lib/power_converter.rb +5 -4
- data/lib/power_converter/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 46a424e45fa5ebb32f2e1557980b89967c9a6db3
|
4
|
+
data.tar.gz: 7ccecfc19c6d9e779d7b4e50e0e67139d6a98373
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9cf362ee48fa1d258a795a84136502e547237edd0324e1f645d6fa7e8e282cbb4815f8f22715bf8ac628e279f84fe8240945f1153c0d2eb1840600f4804ad043
|
7
|
+
data.tar.gz: f2cbd9f9eac056c661dfed996fb9cd94616703dab897d4e85b8aa385bafe19eed3d4eb9b07bcc743df69b4ea5201539c9961a79dd454425319d63b1abf7705fc
|
data/README.md
CHANGED
@@ -11,6 +11,26 @@
|
|
11
11
|
|
12
12
|
**PowerConverter** exposes a means for defining a named conversion method.
|
13
13
|
|
14
|
+
## Brief Example
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
PowerConverter.define_conversion_for(:boolean) do |input|
|
18
|
+
case input
|
19
|
+
when false, 0, '0', /\A(false|no)\Z/i, nil then false
|
20
|
+
when String
|
21
|
+
input.empty? ? nil : true
|
22
|
+
else
|
23
|
+
true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
expect(PowerConverter.convert('no', to: :boolean)).to eq(false)
|
28
|
+
expect(PowerConverter.convert('yes', to: :boolean)).to eq(true)
|
29
|
+
expect { PowerConverter.convert('', to: :boolean) }.to raise_error(PowerConverter::ConversionError)
|
30
|
+
```
|
31
|
+
|
32
|
+
## Details
|
33
|
+
|
14
34
|
*What is a conversion method?*
|
15
35
|
|
16
36
|
> A well-established Ruby idiom for methods which "do the right thing" to
|
@@ -44,18 +64,63 @@ reduces the number surprises when interacting with conversion methods.
|
|
44
64
|
|
45
65
|
## Usage
|
46
66
|
|
67
|
+
Name and define conversions via a block.
|
68
|
+
|
69
|
+
```ruby
|
70
|
+
PowerConverter.define_conversion_for(:always_true) { true }
|
71
|
+
PowerConverter.define_conversion_for(:always_nil) { nil }
|
72
|
+
PowerConverter.define_conversion_for(:boolean) { |value| !!value }
|
73
|
+
```
|
74
|
+
|
75
|
+
Call the conversions via a couple of methods:
|
76
|
+
|
77
|
+
```ruby
|
78
|
+
PowerConverter.convert(nil, to: :always_true)
|
79
|
+
# or
|
80
|
+
PowerConverter.convert_to_always_true(nil)
|
81
|
+
```
|
82
|
+
|
83
|
+
When you call a conversion, if the conversion block evaluates to `nil`, PowerConverter will fail with a `PowerConverter::ConversionError` exception.
|
84
|
+
|
47
85
|
```ruby
|
48
|
-
PowerConverter.
|
86
|
+
assert_raises(PowerConverter::ConversionError) { PowerConverter.convert(true, to: :always_nil) }
|
87
|
+
```
|
88
|
+
|
89
|
+
If you call the conversion and pass a block, the block will be the fallback for an evaluated `nil`.
|
90
|
+
|
91
|
+
```ruby
|
92
|
+
assert_equal('FALLBACK', PowerConverter.convert(true, to: :always_nil) { 'FALLBACK'} )
|
93
|
+
```
|
94
|
+
|
95
|
+
If the object you are attempting to convert responds to the `to_<conversion_name>` method, that method will be called.
|
96
|
+
|
97
|
+
```ruby
|
98
|
+
Thing = Struct.new(:to_always_nil)
|
99
|
+
thing = Thing.new("result of to_always_nil")
|
100
|
+
assert_equal("result of to_always_nil", PowerConverter.convert(thing, to: :always_nil))
|
101
|
+
```
|
102
|
+
|
103
|
+
You can also declare an alias for a registered `PowerConverter`.
|
104
|
+
|
105
|
+
```ruby
|
106
|
+
PowerConverter.define_alias(:true_or_false, is_alias_of: :boolean)
|
107
|
+
PowerConverter.convert("Hello", to: :boolean)
|
108
|
+
```
|
109
|
+
|
110
|
+
At times, a conversion may need additional information to be successful.
|
111
|
+
|
112
|
+
```ruby
|
113
|
+
PowerConverter.define_conversion_for(:user_action) do |input, user|
|
49
114
|
case input
|
50
|
-
when
|
51
|
-
|
52
|
-
|
115
|
+
when String, Symbol then user.actions.find_by(name: input)
|
116
|
+
when Model::Action
|
117
|
+
input.user == user ? input : nil
|
53
118
|
end
|
54
119
|
end
|
55
120
|
|
56
|
-
PowerConverter.convert(
|
121
|
+
PowerConverter.convert('start', to: :user_action, scope: a_user)
|
122
|
+
```
|
57
123
|
|
58
|
-
|
124
|
+
### TODO
|
59
125
|
|
60
|
-
|
61
|
-
```
|
126
|
+
* Write about module declaration
|
data/lib/power_converter.rb
CHANGED
@@ -159,7 +159,7 @@ module PowerConverter
|
|
159
159
|
returning_value = converter_for(named_converter).call(value, *scope)
|
160
160
|
return returning_value unless returning_value.nil?
|
161
161
|
return yield if block_given?
|
162
|
-
|
162
|
+
raise ConversionError.new(value, options)
|
163
163
|
end
|
164
164
|
|
165
165
|
# When building a dynamic conversion method this is its prefix.
|
@@ -219,7 +219,7 @@ module PowerConverter
|
|
219
219
|
key = named_conversion.to_s
|
220
220
|
return defined_conversions[key] if defined_conversions.key?(key)
|
221
221
|
return converter_for(aliased_conversions[key]) if aliased_conversions.key?(key)
|
222
|
-
|
222
|
+
raise ConverterNotFoundError.new(named_conversion, defined_converter_names)
|
223
223
|
end
|
224
224
|
|
225
225
|
# @api public
|
@@ -249,13 +249,14 @@ module PowerConverter
|
|
249
249
|
#
|
250
250
|
# @param method_name [Symbol]
|
251
251
|
# @param args [Array] splat arguements that would be passed on-ward
|
252
|
+
# @param kwargs [Hash] keyword arguements
|
252
253
|
# @param block [#call]
|
253
254
|
#
|
254
255
|
# @see PowerConverter::CONVERSION_METHOD_PREFIX
|
255
|
-
def method_missing(method_name, *args, &block)
|
256
|
+
def method_missing(method_name, *args, **kwargs, &block)
|
256
257
|
named_converter = extract_named_converter_from(method_name)
|
257
258
|
if named_converter
|
258
|
-
convert(*args, to: named_converter, &block)
|
259
|
+
convert(*args, kwargs.merge(to: named_converter), &block)
|
259
260
|
else
|
260
261
|
super
|
261
262
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: power_converter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Friesen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -126,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
126
126
|
version: '0'
|
127
127
|
requirements: []
|
128
128
|
rubyforge_project:
|
129
|
-
rubygems_version: 2.5
|
129
|
+
rubygems_version: 2.4.5
|
130
130
|
signing_key:
|
131
131
|
specification_version: 4
|
132
132
|
summary: A lightweight library to define object conversion methods/modules.
|