power_converter 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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.