typed_operation 0.4.0 → 0.4.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
  SHA256:
3
- metadata.gz: c80a027434c29b23257b43e03eeb8acb61a3ac300a59e0c04068ffada1dd4aa6
4
- data.tar.gz: 6b78a70b2a46710746129f8dac3a403bdc692c761c93f3ec111bf09efec8a70e
3
+ metadata.gz: a5af7163e167fa37ba366469393a59d8ea25d4eede88472a7c739bee91e987d7
4
+ data.tar.gz: fb1de81a7eb3ce710c36355474c7f3b01e970c4696a82ede8fd680273cae1cb2
5
5
  SHA512:
6
- metadata.gz: 35baa03191cfa29e1786de975d7f8d2baf62040859922544f0d79109a8f088996521e85e3dce0c66bde1f7dd5bb2b62a5332cb7841a63a1ebe4b369d48005bb6
7
- data.tar.gz: ebf8aea46fb0d3dcd72aa846b772f228aca21be2e04695989266218e9303e9b7760770d67f53f57ca231b41b7f502ad5145bf621a0648c6706b6e741a8e6c80e
6
+ metadata.gz: fd8a364079683dbe13c02c6090a707499db4f847bf86c395baa80ffed3e7bc997b11ae545c2a7f20d9b2c46e66f9e4b3b5496776524fe70b276eef46eff33f88
7
+ data.tar.gz: 7a7cf690621318b56b44cfe8cf4d4231694d65befd2ee62dd1cfb53d283be653b41011de4ad77f9f46636eb0b4146093f37162f4059aa74afc8190f9a789b68e
@@ -4,8 +4,8 @@
4
4
  module <%= namespace_name %>
5
5
  class <%= name %> < ::ApplicationOperation
6
6
  # Replace with implementation...
7
- param :my_param, String, convert: true
8
- param :an_optional_param, Integer, allow_nil: true
7
+ param :required_param, String
8
+ param :an_optional_param, Integer, convert: true, allow_nil: true
9
9
 
10
10
  def prepare
11
11
  # Prepare...
@@ -20,8 +20,8 @@ end
20
20
  <% else %>
21
21
  class <%= name %> < ::ApplicationOperation
22
22
  # Replace with implementation...
23
- param :my_param, String, convert: true
24
- param :an_optional_param, Integer, allow_nil: true
23
+ param :required_param, String
24
+ param :an_optional_param, Integer, convert: true, allow_nil: true
25
25
 
26
26
  def prepare
27
27
  # Prepare...
@@ -1,45 +1,47 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "test_helper"
4
+
3
5
  <% if namespace_name.present? %>
4
6
  module <%= namespace_name %>
5
7
  class <%= name %>Test < ActiveSupport::TestCase
6
8
  def setup
7
- @operation = <%= name %>.new(my_param: "test")
9
+ @operation = <%= name %>.new(required_param: "test")
8
10
  end
9
11
 
10
- test 'should raise ParameterError if my_param is nil' do
12
+ test "should raise ParameterError if required param is nil" do
11
13
  assert_raises(ParameterError) do
12
- <%= name %>.new(my_param: nil)
14
+ <%= name %>.new(required_param: nil)
13
15
  end
14
16
  end
15
17
 
16
- test 'should convert my_param if it is not a string' do
17
- assert_equal <%= name %>.new(my_param: 123).my_param, "123"
18
+ test "should convert optional_param if it is not a string" do
19
+ assert_equal <%= name %>.new(required_param: "foo", optional_param: 123).converts_param, "123"
18
20
  end
19
21
 
20
- test 'call returns after operation' do
22
+ test "call returns after operation" do
21
23
  result = @operation.call
22
24
  assert_equal result, "Hello World!"
23
25
  end
24
26
  end
25
27
  end
26
28
  <% else %>
27
- class <%= name %>Test < ActiveSupport::TestCase
28
- def setup
29
- @operation = <%= name %>.new(my_param: "test")
30
- end
29
+ class <%= name %>Test < ActiveSupport::TestCase
30
+ def setup
31
+ @operation = <%= name %>.new(required_param: "test")
32
+ end
31
33
 
32
- test 'should raise ParameterError if my_param is nil' do
33
- assert_raises(ParameterError) do
34
- <%= name %>.new(my_param: nil)
35
- end
34
+ test "should raise ParameterError if required param is nil" do
35
+ assert_raises(ParameterError) do
36
+ <%= name %>.new(required_param: nil)
36
37
  end
38
+ end
37
39
 
38
- test 'should convert my_param if it is not a string' do
39
- assert_equal <%= name %>.new(my_param: 123).my_param, "123"
40
+ test "should convert optional_param if it is not a string" do
41
+ assert_equal <%= name %>.new(required_param: "foo", optional_param: 123).converts_param, "123"
40
42
  end
41
43
 
42
- test 'call returns after operation' do
44
+ test "call returns after operation" do
43
45
  result = @operation.call
44
46
  assert_equal result, "Hello World!"
45
47
  end
@@ -42,7 +42,7 @@ module TypedOperation
42
42
  end
43
43
 
44
44
  def call
45
- raise NotImplementedError, "You must implement #call"
45
+ raise InvalidOperationError, "You must implement #call"
46
46
  end
47
47
 
48
48
  def to_proc
@@ -10,7 +10,10 @@ module TypedOperation
10
10
  def curry(**params)
11
11
  all_args = @applied_args.merge(params)
12
12
  # check if required attrs are in @applied_args
13
- required_keys = @operation.attribute_names.select { |name| @operation.attribute_metadata(name)[:required] != false }
13
+ required_keys = @operation.attribute_names.select do |name|
14
+ meta = @operation.attribute_metadata(name)
15
+ meta[:required] != false && !meta[:typed_attribute_options].key?(:default)
16
+ end
14
17
  missing_keys = required_keys - all_args.keys
15
18
 
16
19
  if missing_keys.size > 0
@@ -26,7 +29,7 @@ module TypedOperation
26
29
  def call(...)
27
30
  prepared = curry(...)
28
31
  return prepared.operation.call if prepared.is_a?(Prepared)
29
- raise "Cannot call PartiallyApplied operation #{@operation.name} (key: #{@operation.operation_key}), are you expecting it to be Prepared?"
32
+ raise TypedOperation::MissingParameterError, "Cannot call PartiallyApplied operation #{@operation.name} (key: #{@operation.operation_key}), are you expecting it to be Prepared?"
30
33
  end
31
34
  end
32
35
  end
@@ -1,3 +1,3 @@
1
1
  module TypedOperation
2
- VERSION = "0.4.0"
2
+ VERSION = "0.4.2"
3
3
  end
@@ -5,5 +5,7 @@ require "typed_operation/partially_applied"
5
5
  require "typed_operation/prepared"
6
6
 
7
7
  module TypedOperation
8
- class ParameterError < StandardError; end
8
+ class InvalidOperationError < StandardError; end
9
+ class MissingParameterError < ArgumentError; end
10
+ class ParameterError < TypeError; end
9
11
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: typed_operation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Ierodiaconou
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-22 00:00:00.000000000 Z
11
+ date: 2023-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails