interface-dsl 0.1.5 → 0.1.6

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: 6e8e9d4a6a3e4193121aa9810bb856eaa9b4b55f
4
- data.tar.gz: b57a5f53fb5f71e1f429d1e2fb29ece754fb93aa
3
+ metadata.gz: 9b66e4dfaed7be7b755c120bd3cbf66dc7de8887
4
+ data.tar.gz: b26c5cb82f8e783cb8f3423261bd66b452da8716
5
5
  SHA512:
6
- metadata.gz: c531aa1457a25afca68e02a7c79ca0abeec3d2d0e3a4fe29d2dcf2932e9934c0bec2197771afd42b4e5a2d23ddc51d48432fa7885bcfdd9a68d3efbefe3ce38f
7
- data.tar.gz: 0e140c323d173e97f18fb2df08ef9b8ffcdc678d25986e665183ada64deb3f87a2205011b6690d2e6a60de951bd63fffc26db067d8571550a979f9ceab62ce9f
6
+ metadata.gz: a14b2f8b4e9182d30ebf9d9c0fd226b0b4ab9da17b0d58bc3d7b4d8df6741aca6a7894d6ccd6fda801777fc35fcd46b26541e0c938e62d6e326362ae1b22c030
7
+ data.tar.gz: cc0809845b843ab66b1fed39cc0caa76354c22698ef7bbc67b9f6587ac230f2f7609ddd0a0d8dd4f1f19e4d919fb5e650cece73ef72c99cf223584314b61c647
@@ -1,10 +1,6 @@
1
1
  module Interface
2
2
  class DefaultAdapter
3
- CallingError = Class.new(StandardError)
4
- InterfaceError = Class.new(StandardError)
5
-
6
3
  extend FactoryMethods
7
-
8
4
  deffactory :call
9
5
 
10
6
  def initialize(callable)
@@ -13,7 +9,7 @@ module Interface
13
9
 
14
10
  def call(*args, &block)
15
11
  unless callable.respond_to?(:call)
16
- fail(InterfaceError("#{callable.class} is not callable!"))
12
+ fail(Interface::Errors::AdaptationError.new("#{callable.class} is not callable!"))
17
13
  end
18
14
 
19
15
  _call(*args, &block)
@@ -24,14 +20,24 @@ module Interface
24
20
  attr_reader :callable
25
21
 
26
22
  def _call(*args, &block)
27
- result = callable.call(*args, &block)
28
- if result.is_a?(Array)
29
- status, _result = result
30
- status == :ok || fail(CallingError("Error while calling #{callable.class}: #{_result}"))
31
- _result
32
- else
33
- result
34
- end
23
+ status, _result = _handle_request(*args, &block)
24
+
25
+ # Response.__ok__(_result)
26
+ # Response.__error__(_result)
27
+ Response.public_send("__#{status}__", _result)
28
+ end
29
+
30
+ def _handle_request(*args, &block)
31
+ _wrap(callable.call(*args, &block))
32
+ rescue => e
33
+ [:error, e]
34
+ end
35
+
36
+ def _wrap(result)
37
+ return [:ok, result] unless result.is_a?(Array)
38
+
39
+ status, _result = result
40
+ status == :ok ? [:ok, _result] : [:error, _result]
35
41
  end
36
42
  end
37
43
  end
@@ -1,5 +1,5 @@
1
1
  module Interface
2
2
  module Dsl
3
- VERSION = "0.1.5"
3
+ VERSION = "0.1.6"
4
4
  end
5
5
  end
data/lib/interface/dsl.rb CHANGED
@@ -10,6 +10,10 @@ module Interface
10
10
  @settings ||= configuration_class
11
11
  end
12
12
 
13
+ def returns(result_adapter)
14
+ @result_adapter = result_adapter
15
+ end
16
+
13
17
  def interface(name, &block)
14
18
  if interfaces.key?(name)
15
19
  fail(::Interface::Errors::ImmutableInterfaceError.new("Interface can't be redefined or reopened! Use .extend_api method"))
@@ -20,10 +24,10 @@ module Interface
20
24
  end)
21
25
  end
22
26
 
23
- def defpoint(name, &block)
27
+ def defpoint(_name, &block)
24
28
  check_top_level_enpoint_policy
25
29
 
26
- points.merge!(name => define_entity(name, &block))
30
+ points.merge!(_name => define_entity(_name, &block))
27
31
  end
28
32
 
29
33
  def method_missing(meth, *args, &block)
@@ -61,6 +65,10 @@ module Interface
61
65
  @points ||= Hashie::Mash.new
62
66
  end
63
67
 
68
+ def _interface_adapter
69
+ @result_adapter || _settings.config.response_adapter
70
+ end
71
+
64
72
  def _settings
65
73
  @settings || ::Interface::DefaultSettings
66
74
  end
@@ -93,8 +101,8 @@ module Interface
93
101
  @print_doc ||= ->(i) { i.doc }
94
102
  end
95
103
 
96
- def define_entity(name, &block)
97
- ::Interface::PortEntity.new(name, _settings.config.response_adapter).tap { |port| port.instance_eval(&block) }
104
+ def define_entity(_name, &block)
105
+ ::Interface::PortEntity.new(_name, _interface_adapter).tap { |port| port.instance_eval(&block) }
98
106
  end
99
107
  end
100
108
  end
@@ -7,5 +7,6 @@ module Interface
7
7
  InvalidInputError = Class.new(BaseError)
8
8
  HandlerMissingError = Class.new(BaseError)
9
9
  UnexpectedInstanceError = Class.new(BaseError)
10
+ AdaptationError = Class.new(BaseError)
10
11
  end
11
12
  end
@@ -1,8 +1,14 @@
1
1
  module Interface
2
- class PortEntity < Struct.new(:name, :default_adapter)
2
+ class PortEntity
3
3
  N_A = 'N/A'.freeze
4
4
  LIM = ('-' * 48).freeze
5
5
 
6
+ attr_reader :name
7
+
8
+ def initialize(name, adapter)
9
+ @name, @adapter = name, adapter
10
+ end
11
+
6
12
  def describe(text)
7
13
  @description = text
8
14
  end
@@ -19,16 +25,7 @@ module Interface
19
25
  fail(::Interface::Errors::InvalidInputError.new(errors)) if errors.any?
20
26
  end
21
27
 
22
- # this is a decent source of bugs.
23
- caller = if !@adapter.nil?
24
- @adapter.new(@handler)
25
- elsif !default_adapter.nil?
26
- default_adapter.new(@handler)
27
- else
28
- @handler
29
- end
30
-
31
- caller.call(*args, &block)
28
+ _callee.call(*args, &block)
32
29
  end
33
30
 
34
31
  def handler(klass)
@@ -66,5 +63,13 @@ Returns:
66
63
  #{LIM}
67
64
  DOC
68
65
  end
66
+
67
+ private
68
+
69
+ def _callee
70
+ return @handler if @adapter.nil?
71
+
72
+ @adapter.new(@handler)
73
+ end
69
74
  end
70
75
  end
data/lib/interface.rb CHANGED
@@ -11,4 +11,6 @@ module Interface
11
11
 
12
12
  autoload :DefaultSettings, 'interface/default_settings'
13
13
  autoload :DefaultAdapter, 'interface/default_adapter'
14
+ autoload :DirectAdapter, 'interface/direct_adapter'
15
+ autoload :Response, 'interface/response'
14
16
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: interface-dsl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oleksiy Kurnenkov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-01-11 00:00:00.000000000 Z
11
+ date: 2017-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-validation