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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9af949b836d81ad21409034d5ed9c4afc7a4ba78
4
- data.tar.gz: 3ceae004ad7dfe14efec14805ead1e8434cddd24
3
+ metadata.gz: 46a424e45fa5ebb32f2e1557980b89967c9a6db3
4
+ data.tar.gz: 7ccecfc19c6d9e779d7b4e50e0e67139d6a98373
5
5
  SHA512:
6
- metadata.gz: e87246d16e6875e248e7bea55fa7f8dd8634781bff0d1e50a09b849e6302c351b4005c3ef912c257fbee71571d8eb3289b00ccd7ae21f2dfb0b87a5e95f6144e
7
- data.tar.gz: eb093b614b5385916db8e2307945e076403ccf246453972a40cdc71f52b594b4fc291f8e9a5948967e7b5fe1b5ec7b02e8dcd7f747221a2956a898f82c28db07
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.define_conversion_for :boolean do |input|
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 false, 0, '0', 'false', 'no', nil then false
51
- else
52
- true
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(object, to: :boolean)
121
+ PowerConverter.convert('start', to: :user_action, scope: a_user)
122
+ ```
57
123
 
58
- # OR
124
+ ### TODO
59
125
 
60
- PowerConverter.convert_to_boolean(object)
61
- ```
126
+ * Write about module declaration
@@ -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
- fail ConversionError.new(value, options)
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
- fail ConverterNotFoundError.new(named_conversion, defined_converter_names)
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
@@ -2,5 +2,5 @@
2
2
  # :nodoc:
3
3
  module PowerConverter
4
4
  # :nodoc:
5
- VERSION = "0.1.1".freeze
5
+ VERSION = "0.1.2".freeze
6
6
  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.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-01-21 00:00:00.000000000 Z
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.1
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.