actioninteractor 0.0.1
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 +7 -0
- data/Rakefile +24 -0
- data/actioninteractor.gemspec +27 -0
- data/lib/base.rb +64 -0
- data/test/base_test.rb +33 -0
- data/test/inheritance_test.rb +56 -0
- metadata +80 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0b9d6bcadf157aa9c5cf6b53013d202c56d6c491f28e6c67b147a159f8e22691
|
4
|
+
data.tar.gz: 9128ef16b78b62df8fb9559439473ce6d6de454fd37e2ff2d0b25bbedd8d3a3e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5190327cabe972bb1d4b0642a49f70846bb4dde510961cec0915962f99cf17c95558214612aeadce3f3c7ef150cb64345c75f8e5e7a1a321832b66494ceb3f05
|
7
|
+
data.tar.gz: c46c01ec2ed63e45585bfb5e53f95d6b4df086c6e455aa72feed0ba4af61afbebf76df05218042d1829d1e2c6ac98f79662eaac20fc72397d500d975f54c1b2a
|
data/Rakefile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rake/testtask"
|
4
|
+
|
5
|
+
desc "Default Task"
|
6
|
+
task default: [ :test ]
|
7
|
+
|
8
|
+
task :package
|
9
|
+
|
10
|
+
Rake::TestTask.new { |t|
|
11
|
+
t.libs << "test"
|
12
|
+
t.pattern = "test/**/*_test.rb"
|
13
|
+
t.warning = true
|
14
|
+
t.verbose = true
|
15
|
+
t.ruby_opts = ["--dev"] if defined?(JRUBY_VERSION)
|
16
|
+
}
|
17
|
+
|
18
|
+
namespace :test do
|
19
|
+
task :isolated do
|
20
|
+
Dir.glob("test/**/*_test.rb").all? do |file|
|
21
|
+
sh(Gem.ruby, "-w", "-Ilib:test", file)
|
22
|
+
end || raise("Failures")
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
version = File.read(File.expand_path("../LIGHTRAILS_VERSION", __dir__)).strip
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.platform = Gem::Platform::RUBY
|
7
|
+
s.name = "actioninteractor"
|
8
|
+
s.version = version
|
9
|
+
s.date = "2018-10-03"
|
10
|
+
s.summary = "Action Interactor provides a simple interface for performing operations (part of Lightrails)."
|
11
|
+
s.description = "Action Interactor provides a simple interface for performing operations like Service Object / Command pattern."
|
12
|
+
|
13
|
+
s.required_ruby_version = ">= 2.2.2"
|
14
|
+
s.required_rubygems_version = ">= 1.8.11"
|
15
|
+
|
16
|
+
s.license = "MIT"
|
17
|
+
|
18
|
+
s.authors = ["Ryo Hashimoto"]
|
19
|
+
s.email = "ryohashimoto@gmail.com"
|
20
|
+
s.homepage = "https://github.com/ryohashimoto/lightrails"
|
21
|
+
|
22
|
+
s.files = `git ls-files`.split($/)
|
23
|
+
s.test_files = s.files.grep(/^test/)
|
24
|
+
|
25
|
+
s.add_dependency "bundler", "~> 1.3"
|
26
|
+
s.add_development_dependency "rake", "~> 0"
|
27
|
+
end
|
data/lib/base.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
module ActionInteractor
|
2
|
+
class Base
|
3
|
+
attr_reader :params, :result
|
4
|
+
|
5
|
+
def initialize(params)
|
6
|
+
@params = params
|
7
|
+
reset!
|
8
|
+
end
|
9
|
+
|
10
|
+
def execute
|
11
|
+
return if completed?
|
12
|
+
finish!
|
13
|
+
end
|
14
|
+
|
15
|
+
def completed?
|
16
|
+
@completed
|
17
|
+
end
|
18
|
+
|
19
|
+
def success?
|
20
|
+
@success
|
21
|
+
end
|
22
|
+
|
23
|
+
def failure?
|
24
|
+
!success?
|
25
|
+
end
|
26
|
+
|
27
|
+
def reset!
|
28
|
+
@result = {}
|
29
|
+
fail!
|
30
|
+
incomplete!
|
31
|
+
end
|
32
|
+
|
33
|
+
def finish!
|
34
|
+
success!
|
35
|
+
complete!
|
36
|
+
end
|
37
|
+
|
38
|
+
def success!
|
39
|
+
@success = true
|
40
|
+
end
|
41
|
+
|
42
|
+
def fail!
|
43
|
+
@success = false
|
44
|
+
end
|
45
|
+
|
46
|
+
def complete!
|
47
|
+
@completed = true
|
48
|
+
end
|
49
|
+
|
50
|
+
def incomplete!
|
51
|
+
@completed = false
|
52
|
+
end
|
53
|
+
|
54
|
+
def add_result(key, value)
|
55
|
+
@result[key] = value
|
56
|
+
end
|
57
|
+
|
58
|
+
class << self
|
59
|
+
def execute(params)
|
60
|
+
new(params).tap(&:execute)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/test/base_test.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require_relative "../lib/base.rb"
|
3
|
+
|
4
|
+
class BaseTest < Test::Unit::TestCase
|
5
|
+
test ".execute does not raise error" do
|
6
|
+
params = {}
|
7
|
+
assert_nothing_raised { ActionInteractor::Base.execute(params) }
|
8
|
+
end
|
9
|
+
|
10
|
+
test ".execute returns an ActionInteractor::Base instance" do
|
11
|
+
params = {}
|
12
|
+
interactor = ActionInteractor::Base.execute(params)
|
13
|
+
assert_instance_of(ActionInteractor::Base, interactor)
|
14
|
+
end
|
15
|
+
|
16
|
+
test "the result is an empty hash" do
|
17
|
+
params = {}
|
18
|
+
interactor = ActionInteractor::Base.execute(params)
|
19
|
+
assert_equal({}, interactor.result)
|
20
|
+
end
|
21
|
+
|
22
|
+
test "#success? is true" do
|
23
|
+
params = {}
|
24
|
+
interactor = ActionInteractor::Base.execute(params)
|
25
|
+
assert interactor.success?
|
26
|
+
end
|
27
|
+
|
28
|
+
test "#completed? is true" do
|
29
|
+
params = {}
|
30
|
+
interactor = ActionInteractor::Base.execute(params)
|
31
|
+
assert interactor.completed?
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require_relative "../lib/base.rb"
|
3
|
+
|
4
|
+
class User
|
5
|
+
attr_accessor :name
|
6
|
+
|
7
|
+
def initialize(params)
|
8
|
+
@name = params[:name]
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class RegistrationInteractor < ActionInteractor::Base
|
13
|
+
def execute
|
14
|
+
return unless params[:name]
|
15
|
+
add_result(:user, User.new(name: params[:name]))
|
16
|
+
finish!
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class InheritanceTest < Test::Unit::TestCase
|
21
|
+
test ".execute does not raise error" do
|
22
|
+
params = { name: 'John'}
|
23
|
+
assert_nothing_raised { RegistrationInteractor.execute(params) }
|
24
|
+
end
|
25
|
+
|
26
|
+
test ".execute returns an RegistrationInteractor instance" do
|
27
|
+
params = { name: 'John'}
|
28
|
+
interactor = RegistrationInteractor.execute(params)
|
29
|
+
assert_instance_of(RegistrationInteractor, interactor)
|
30
|
+
end
|
31
|
+
|
32
|
+
test "the result contains a user" do
|
33
|
+
params = { name: 'John'}
|
34
|
+
interactor = RegistrationInteractor.execute(params)
|
35
|
+
assert_instance_of(User, interactor.result[:user])
|
36
|
+
end
|
37
|
+
|
38
|
+
test "the result user name is John" do
|
39
|
+
params = { name: 'John'}
|
40
|
+
interactor = RegistrationInteractor.execute(params)
|
41
|
+
user = interactor.result[:user]
|
42
|
+
assert_equal(user.name, 'John')
|
43
|
+
end
|
44
|
+
|
45
|
+
test "#success? is true" do
|
46
|
+
params = { name: 'John'}
|
47
|
+
interactor = RegistrationInteractor.execute(params)
|
48
|
+
assert interactor.success?
|
49
|
+
end
|
50
|
+
|
51
|
+
test "#completed? is true" do
|
52
|
+
params = { name: 'John'}
|
53
|
+
interactor = RegistrationInteractor.execute(params)
|
54
|
+
assert interactor.completed?
|
55
|
+
end
|
56
|
+
end
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: actioninteractor
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ryo Hashimoto
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-10-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Action Interactor provides a simple interface for performing operations
|
42
|
+
like Service Object / Command pattern.
|
43
|
+
email: ryohashimoto@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- Rakefile
|
49
|
+
- actioninteractor.gemspec
|
50
|
+
- lib/base.rb
|
51
|
+
- test/base_test.rb
|
52
|
+
- test/inheritance_test.rb
|
53
|
+
homepage: https://github.com/ryohashimoto/lightrails
|
54
|
+
licenses:
|
55
|
+
- MIT
|
56
|
+
metadata: {}
|
57
|
+
post_install_message:
|
58
|
+
rdoc_options: []
|
59
|
+
require_paths:
|
60
|
+
- lib
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 2.2.2
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 1.8.11
|
71
|
+
requirements: []
|
72
|
+
rubyforge_project:
|
73
|
+
rubygems_version: 2.7.6
|
74
|
+
signing_key:
|
75
|
+
specification_version: 4
|
76
|
+
summary: Action Interactor provides a simple interface for performing operations (part
|
77
|
+
of Lightrails).
|
78
|
+
test_files:
|
79
|
+
- test/base_test.rb
|
80
|
+
- test/inheritance_test.rb
|