mini_tools 0.0.1 → 0.0.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: 7e2e7b08f84dd78b66b910afdca999cdd290f448
4
- data.tar.gz: 6505ac0a2b4ed5da4d0390b2cb144ad28e823600
3
+ metadata.gz: 38066dd567e600ea6bc076350fc34e04f9f5cab3
4
+ data.tar.gz: 110de1612b1ca108770492e6cebf6114dcb58088
5
5
  SHA512:
6
- metadata.gz: f79242651ae5ec09e4a6cd2768d59b5daf8153524216c6eb0aaf9403a4acecff1c7f14049190e32b8f2dba9566406e40a9aa307a91cdf069dae76f5793dd04ef
7
- data.tar.gz: caeff60a929d70380562bc18ccb836b621b6378fb513c8eca28bd0844668f1abb029dd247ae724423661314f80de4307830d5ff0d5c0f42c81ce69b449776709
6
+ metadata.gz: 64b66ea1f3c303a4c07b60dfe924390b988e8ef2be07bf23815583550eb11eaeb9fd84ffb3c1feee6b9f0a0496b05e1f821e10f2ce5567a574cd8bff726339e2
7
+ data.tar.gz: 4da682328539583bb0871b3b2847904971a646b153b7c1e0179c19c0971e15ea977e2dcf4dbbc3b70b3af7e83900526730e6b1ea8ef7e20bb5d7b53d0149a882
data/README.md ADDED
@@ -0,0 +1,55 @@
1
+ # MiniTools
2
+
3
+ [![Build Status](https://travis-ci.org/adamphillips/mini_tools.svg?branch=master)](https://travis-ci.org/adamphillips/mini_tools)
4
+
5
+ These are some examples of simple patterns in Ruby. Whilst they are installable
6
+ using RubyGems, the idea is that they are so simple that you probably just want
7
+ to roll your own derivatives rather than add another gem dependency to your
8
+ app.
9
+
10
+ Each contains an example of how to use it. You can also look at the tests for
11
+ each of the patterns.
12
+
13
+ ### Command
14
+
15
+ [view](lib/mini_tools/command.rb)
16
+
17
+ A simple command object that can also be used for service objects or interactors.
18
+
19
+ ### Configuration
20
+
21
+ [view](lib/mini_tools/configuration.rb)
22
+
23
+ A simple configuration store.
24
+
25
+ ### ItemFactory
26
+
27
+ [view](lib/mini_tools/item_factory.rb)
28
+
29
+ A simple item factory.
30
+
31
+ ### Response
32
+
33
+ [view](lib/mini_tools/response.rb)
34
+
35
+ Works in conjunction with the Command object and represents the response from a command.
36
+
37
+ ## Installing from RubyGems
38
+
39
+ Install with
40
+
41
+ ```
42
+ gem install mini_tools
43
+ ```
44
+
45
+ or if you are using bundler, add it to your Gemfile
46
+
47
+ ```
48
+ gem 'mini_tools'
49
+ ```
50
+
51
+ then run
52
+
53
+ ```
54
+ bundle
55
+ ```
@@ -5,6 +5,8 @@ module MiniTools
5
5
  #
6
6
  # ```
7
7
  # class SimpleCommand
8
+ # include MiniTools::Command
9
+ #
8
10
  # def call value
9
11
  # yield response :success, 'It worked' if value == true
10
12
  # yield response :failure, 'It failed' if value == false
@@ -17,10 +19,19 @@ module MiniTools
17
19
  # SimpleCommand.new.call some_value do |response|
18
20
  # response.on(:success) ->(message) { puts 'Successful'; puts message }
19
21
  # response.on(:failure) ->(message) { puts 'Unsuccessful'; puts message }
22
+ # response.else ->(message) { puts 'Unknown response type'; puts message }
20
23
  # end
21
24
  module Command
22
25
  def response result, *args
23
- Response.new(result, *args)
26
+ Response.new(self, result, *args)
27
+ end
28
+
29
+ def handled?
30
+ @handled
31
+ end
32
+
33
+ def handled= result
34
+ @handled = result
24
35
  end
25
36
  end
26
37
  end
@@ -2,13 +2,27 @@ module MiniTools
2
2
  class Response
3
3
  attr_reader :result, :args
4
4
 
5
- def initialize result, *args
5
+ def initialize command, result, *args
6
+ @command = command
6
7
  @result = result
7
8
  @args = args
8
9
  end
9
10
 
10
- def on *outcome
11
- yield(*args) if outcome.include?(result)
11
+ def on *outcome, &block
12
+ handle_response(&block) if outcome.include?(result)
13
+ end
14
+
15
+ def else &block
16
+ handle_response(&block) if !command.handled?
17
+ end
18
+
19
+ private
20
+
21
+ attr_reader :command
22
+
23
+ def handle_response
24
+ command.handled = true
25
+ yield(*args)
12
26
  end
13
27
  end
14
28
  end
@@ -1,3 +1,3 @@
1
1
  module MiniTools
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
data/spec/command_spec.rb CHANGED
@@ -9,7 +9,8 @@ describe MiniTools::Command do
9
9
  def call param
10
10
  yield response :success, 'OK' and return if param == 1
11
11
  yield response :error, 'Fail' and return if param == 0
12
- yield response :unknown, 'Other' if ![0, 1].include?(param)
12
+ yield response :unknown, 'Other' and return if param == 2
13
+ yield response :unhandled, 'Unhandled'
13
14
  end
14
15
  end
15
16
 
@@ -40,6 +41,14 @@ describe MiniTools::Command do
40
41
  end
41
42
  end
42
43
 
44
+ describe 'when the response is not explicitly handled' do
45
+ it 'should be handled by the else response' do
46
+ call_with 'whatever'
47
+ assert_equal 'else', @state
48
+ assert_equal 'Unhandled', @message
49
+ end
50
+ end
51
+
43
52
  describe 'when handling multiple responses with the same block' do
44
53
  it 'should work with the first case' do
45
54
  subject.call 0 do |response|
@@ -92,6 +101,11 @@ describe MiniTools::Command do
92
101
  @state = 'unknown'
93
102
  @message = m
94
103
  end
104
+
105
+ response.else do |m|
106
+ @state = 'else'
107
+ @message = m
108
+ end
95
109
  end
96
110
  end
97
111
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mini_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Phillips
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-21 00:00:00.000000000 Z
11
+ date: 2018-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -45,6 +45,7 @@ executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
+ - README.md
48
49
  - lib/mini_tools.rb
49
50
  - lib/mini_tools/command.rb
50
51
  - lib/mini_tools/configuration.rb
@@ -75,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
76
  version: '0'
76
77
  requirements: []
77
78
  rubyforge_project:
78
- rubygems_version: 2.4.3
79
+ rubygems_version: 2.6.13
79
80
  signing_key:
80
81
  specification_version: 4
81
82
  summary: A set of simple lightweight tools to demonstrate patterns in Ruby