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.
@@ -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