actioninteractor 0.0.1

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