actionfacade 0.2.1 → 0.2.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 +4 -4
- data/actionfacade.gemspec +1 -0
- data/lib/action_facade/retrieval.rb +47 -0
- data/test/retrieval_test.rb +47 -3
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 64d3cea1d22a692b72218f19db02d5d39de09d53a3a5fc98da0803d9bbd217bb
|
4
|
+
data.tar.gz: 94ce319ac7540e225e535e89aef50e636359a00c02d1c8bc9ad21cb799767bd2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ad6c5032c237f64311a7efd20e8fa26e3ae612a7ccc9e1e258aa8d325c8aa20825de3b1e42dc346ecd10b1c9b3d39ed89a6785e18e031806d9b12d051b37701
|
7
|
+
data.tar.gz: d141b6a9fccad09c49dc57eb6d20835be189c3064edfc016f75e1a851a37890ac13f90c14297933d685454b6ce1200d788383573ba888f879ff1ca8aa7c32366
|
data/actionfacade.gemspec
CHANGED
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
|
|
24
24
|
s.test_files = s.files.grep(/^test/)
|
25
25
|
|
26
26
|
s.add_dependency "bundler", ">= 1.3"
|
27
|
+
s.add_dependency "activesupport", ">= 5.2"
|
27
28
|
s.add_development_dependency "rake", ">= 12.3.3"
|
28
29
|
s.add_development_dependency "test-unit", ">= 3.3"
|
29
30
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "active_support/core_ext/string/inflections"
|
4
|
+
|
3
5
|
module ActionFacade
|
4
6
|
# == Action \Facade \Retrieval
|
5
7
|
#
|
@@ -19,5 +21,50 @@ module ActionFacade
|
|
19
21
|
instance_variable_set("@#{name}", facade.send(name.to_sym))
|
20
22
|
end
|
21
23
|
end
|
24
|
+
|
25
|
+
# Retrieve data from given payload
|
26
|
+
#
|
27
|
+
# If the class which includes the module is Rails controller,
|
28
|
+
# guessed facade name will be "Controller" is replaced by the action name + "Facade".
|
29
|
+
# If the class is not Rails controller, the name will be suffixed by "Facade".
|
30
|
+
#
|
31
|
+
# `payload` is the initialization parameter for the facade.
|
32
|
+
#
|
33
|
+
# `variable_names` are symbols for the method names in the facade and
|
34
|
+
# they will be set as instance variables in the class that
|
35
|
+
# includes the module.
|
36
|
+
def retrieve_from(payload, *variable_names)
|
37
|
+
facade = guess_facade
|
38
|
+
if facade.nil?
|
39
|
+
raise FacadeNotFoundError.new("Could not find Facade class #{guess_facade_name}.")
|
40
|
+
end
|
41
|
+
retrieve(facade.new(payload), *variable_names)
|
42
|
+
end
|
43
|
+
|
44
|
+
class FacadeNotFoundError < StandardError; end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def guess_facade
|
49
|
+
facade_name = guess_facade_name
|
50
|
+
begin
|
51
|
+
facade_name.constantize
|
52
|
+
rescue NameError
|
53
|
+
nil
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def guess_facade_name
|
58
|
+
klass_name = self.class.name
|
59
|
+
if klass_name.end_with?("Controller")
|
60
|
+
if defined?(params) && params[:action]
|
61
|
+
klass_name.delete_suffix("Controller") + "::#{params[:action].camelize}Facade"
|
62
|
+
else
|
63
|
+
klass_name.delete_suffix("Controller") + "Facade"
|
64
|
+
end
|
65
|
+
else
|
66
|
+
klass_name + "Facade"
|
67
|
+
end
|
68
|
+
end
|
22
69
|
end
|
23
70
|
end
|
data/test/retrieval_test.rb
CHANGED
@@ -2,14 +2,22 @@ require "test/unit"
|
|
2
2
|
require_relative "../lib/action_facade/base.rb"
|
3
3
|
require_relative "../lib/action_facade/retrieval.rb"
|
4
4
|
|
5
|
-
USER_DATA = [{ id: 1, name: "john" }]
|
5
|
+
USER_DATA = [{ id: 1, name: "john" }, { id: 2, name: "bob" }]
|
6
6
|
|
7
|
-
class
|
7
|
+
class UsersFacade < ActionFacade::Base
|
8
8
|
def john
|
9
9
|
USER_DATA.find { |user| user[:name] == "john" }
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
+
module Admin
|
14
|
+
class ShowFacade < ActionFacade::Base
|
15
|
+
def bob
|
16
|
+
USER_DATA.find { |user| user[:name] == "bob" }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
13
21
|
class UsersController
|
14
22
|
include ActionFacade::Retrieval
|
15
23
|
|
@@ -17,9 +25,31 @@ class UsersController
|
|
17
25
|
|
18
26
|
def show
|
19
27
|
payload = {}
|
20
|
-
facade =
|
28
|
+
facade = UsersFacade.new(payload)
|
21
29
|
retrieve(facade, :john)
|
22
30
|
end
|
31
|
+
|
32
|
+
def show_from
|
33
|
+
payload = {}
|
34
|
+
retrieve_from(payload, :john)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class AdminController
|
39
|
+
include ActionFacade::Retrieval
|
40
|
+
|
41
|
+
attr_reader :bob
|
42
|
+
|
43
|
+
def show
|
44
|
+
payload = {}
|
45
|
+
retrieve_from(payload, :bob)
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def params
|
51
|
+
{ action: 'show' }
|
52
|
+
end
|
23
53
|
end
|
24
54
|
|
25
55
|
class RetrievalTest < Test::Unit::TestCase
|
@@ -33,4 +63,18 @@ class RetrievalTest < Test::Unit::TestCase
|
|
33
63
|
controller.show
|
34
64
|
assert_equal(controller.john, { id: 1, name: "john" })
|
35
65
|
end
|
66
|
+
|
67
|
+
test "@john is set after retrieve_from(payload, :john)" do
|
68
|
+
controller = UsersController.new
|
69
|
+
assert_nil(controller.john)
|
70
|
+
controller.show_from
|
71
|
+
assert_equal(controller.john, { id: 1, name: "john" })
|
72
|
+
end
|
73
|
+
|
74
|
+
test "@bob is set after retrieve_from(payload, :bob)" do
|
75
|
+
controller = AdminController.new
|
76
|
+
assert_nil(controller.bob)
|
77
|
+
controller.show
|
78
|
+
assert_equal(controller.bob, { id: 2, name: "bob" })
|
79
|
+
end
|
36
80
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: actionfacade
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Hashimoto
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '5.2'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '5.2'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rake
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|