lightrails 0.1.0.1 → 0.2.4
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/LICENSE +1 -1
- data/README.md +63 -11
- data/RELEASE_DATE +1 -1
- data/VERSION +1 -1
- metadata +11 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a10f0d8a2eaa70e659e3be3ec804dd702c7326490e75b0a9d900328da3748da
|
4
|
+
data.tar.gz: 5a8137e45c785b8e951e5e6246a55174c01c78b57a83e51d8586300d208c25b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4af89866cb3d7c7fe2aaefde579e86b58d1ef15a44d205c82d166412cc220ba98f83a52c53aacb558a1d60ac414e7f982db36505814cd332b75c6d5c43c005e
|
7
|
+
data.tar.gz: 376127380a11e80046e5bfcc313a6ca3e510ea09fbc805206553d86e2e118bb49c49a587b7e3e7eba93d1ee8e83b824ca400b35edea2e4295e4aa2da802d6923
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -24,6 +24,10 @@ $ bin/rails generate lightrails:install
|
|
24
24
|
|
25
25
|
Add a simple interface for obtaining multiple data used in a view.
|
26
26
|
|
27
|
+
It uses Facade design pattern and takes responsibility for preparing data outside of the controller.
|
28
|
+
|
29
|
+
In the example below, by using `MyPage::IndexFacade` and `MyPage::NotificationsFacade`, Active Record methods will be called outside of the `MyPageController`.
|
30
|
+
|
27
31
|
```ruby
|
28
32
|
class Mypage::IndexFacade < ApplicationFacade
|
29
33
|
attr_reader :current_user
|
@@ -41,6 +45,18 @@ class Mypage::IndexFacade < ApplicationFacade
|
|
41
45
|
end
|
42
46
|
end
|
43
47
|
|
48
|
+
class MyPage::NotificationsFacade < ApplicationFacade
|
49
|
+
attr_reader :current_user
|
50
|
+
|
51
|
+
def initialize(payload)
|
52
|
+
@current_user = payload[:current_user]
|
53
|
+
end
|
54
|
+
|
55
|
+
def messages
|
56
|
+
@messages ||= current_user.messages.order(created_at: :desc).limit(10)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
44
60
|
class MypageController < ApplicationController
|
45
61
|
# for using #retrieve method
|
46
62
|
include ActionFacade::Retrieval
|
@@ -50,16 +66,29 @@ class MypageController < ApplicationController
|
|
50
66
|
# assign instance variables
|
51
67
|
retrieve(facade, :active_users, :messages)
|
52
68
|
end
|
69
|
+
|
70
|
+
def notifications
|
71
|
+
# You can retrieve data from the guessed facade
|
72
|
+
# MyPageController#notifications => MyPage::NotificationsFacade
|
73
|
+
payload = { current_user: current_user }
|
74
|
+
retrieve_from(payload, :messages)
|
75
|
+
end
|
53
76
|
end
|
54
77
|
```
|
55
78
|
|
56
79
|
```erb
|
57
|
-
<%# in View %>
|
80
|
+
<%# in View (index.html.erb) %>
|
58
81
|
|
59
82
|
<% @active_users.each do |user| %>
|
60
83
|
...
|
61
84
|
<% end %>
|
62
85
|
|
86
|
+
<% @messages.each do |user| %>
|
87
|
+
...
|
88
|
+
<% end %>
|
89
|
+
|
90
|
+
<%# in View (messages.html.erb) %>
|
91
|
+
|
63
92
|
<% @messages.each do |user| %>
|
64
93
|
...
|
65
94
|
<% end %>
|
@@ -75,6 +104,10 @@ $ bin/rails generate facade mypage/index
|
|
75
104
|
|
76
105
|
Add standarized data processing units to your Rails application.
|
77
106
|
|
107
|
+
It uses Command design pattern and will be usable for various business logic (ex: user registration) in Rails applications.
|
108
|
+
|
109
|
+
In the example, by using `RegistrationInteractor`, user registration process will be executed outside of model and controller.
|
110
|
+
|
78
111
|
```ruby
|
79
112
|
class User
|
80
113
|
attr_accessor :name
|
@@ -86,16 +119,15 @@ end
|
|
86
119
|
|
87
120
|
class RegistrationInteractor < ApplicationInteractor
|
88
121
|
def execute
|
89
|
-
return
|
122
|
+
return failure! unless payload[:name]
|
90
123
|
# complicated business logic
|
91
124
|
# set results
|
92
125
|
results.add(:user, User.new(name: payload[:name]))
|
93
|
-
|
126
|
+
successful!
|
94
127
|
end
|
95
128
|
end
|
96
129
|
|
97
|
-
interactor
|
98
|
-
interactor.success? # => true
|
130
|
+
interactor.successful? # => true
|
99
131
|
interactor.finished? # => true
|
100
132
|
user = interactor.results[:user]
|
101
133
|
user.name # => 'John'
|
@@ -109,9 +141,29 @@ $ bin/rails generate interactor registration
|
|
109
141
|
|
110
142
|
## Active Representer
|
111
143
|
|
112
|
-
|
113
|
-
|
114
|
-
|
144
|
+
It provides a class for wrapping a object and used like Model.
|
145
|
+
You can add custom methods to the class (using the decorator pattern).
|
146
|
+
It can be used with API responses or simple decorators.
|
147
|
+
|
148
|
+
In addition, `attr_field` / `attr_one` / `attr_many` can be used for attributes.
|
149
|
+
|
150
|
+
### `attr_field`
|
151
|
+
|
152
|
+
Declare additional field and type to the objects.
|
153
|
+
You can get / set field's value (converted to corresponding).
|
154
|
+
It uses `ActiveModel::Attributes` internally.
|
155
|
+
|
156
|
+
### `attr_one`
|
157
|
+
|
158
|
+
Declare an associated object like has one association.
|
159
|
+
If a representer for the object is found, the object will be wrapped by the representer.
|
160
|
+
|
161
|
+
### `attr_mamy`
|
162
|
+
|
163
|
+
Declare associated objects like has many association.
|
164
|
+
If a representer for the objects is found, the objects will be wrapped by the representer.
|
165
|
+
|
166
|
+
You can wrap hash-like objects (`OpenStruct`, `Hashie::Mash` etc.) like below.
|
115
167
|
|
116
168
|
```ruby
|
117
169
|
class ActivityRepresenter < ApplicationRepresenter
|
@@ -123,7 +175,7 @@ end
|
|
123
175
|
class UserRepresenter < ApplicationRepresenter
|
124
176
|
attr_field :first_name, :string
|
125
177
|
attr_field :last_name, :string
|
126
|
-
|
178
|
+
attr_many :activities
|
127
179
|
|
128
180
|
def full_name
|
129
181
|
"#{first_name} #{last_name}"
|
@@ -143,7 +195,7 @@ activity.class # => ActivityRepresenter
|
|
143
195
|
activity.created_on # => returns current date
|
144
196
|
```
|
145
197
|
|
146
|
-
To create a representer, you can use the generator.
|
198
|
+
To create a representer, you can use the Rails generator.
|
147
199
|
|
148
200
|
```
|
149
201
|
$ bin/rails generate representer user
|
@@ -152,4 +204,4 @@ $ bin/rails g representer activity
|
|
152
204
|
|
153
205
|
## License
|
154
206
|
|
155
|
-
MIT License. Copyright 2018-
|
207
|
+
MIT License. Copyright 2018-2020 Ryo Hashimoto.
|
data/RELEASE_DATE
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2021-04-11
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.4
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lightrails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryo Hashimoto
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: '5.2'
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '6.
|
22
|
+
version: '6.2'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,49 +29,49 @@ dependencies:
|
|
29
29
|
version: '5.2'
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '6.
|
32
|
+
version: '6.2'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: actionfacade
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - '='
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: 0.
|
39
|
+
version: 0.2.4
|
40
40
|
type: :runtime
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
44
|
- - '='
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: 0.
|
46
|
+
version: 0.2.4
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: actioninteractor
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
51
|
- - '='
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 0.
|
53
|
+
version: 0.2.4
|
54
54
|
type: :runtime
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - '='
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: 0.
|
60
|
+
version: 0.2.4
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: activerepresenter
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
65
|
- - '='
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version: 0.
|
67
|
+
version: 0.2.4
|
68
68
|
type: :runtime
|
69
69
|
prerelease: false
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
72
|
- - '='
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version: 0.
|
74
|
+
version: 0.2.4
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
76
|
name: bundler
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -154,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
154
154
|
- !ruby/object:Gem::Version
|
155
155
|
version: 1.8.11
|
156
156
|
requirements: []
|
157
|
-
rubygems_version: 3.
|
157
|
+
rubygems_version: 3.1.4
|
158
158
|
signing_key:
|
159
159
|
specification_version: 4
|
160
160
|
summary: Utility library including Action Facade, Action Interactor, Active Representer
|