yuba 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/yuba.rb +1 -2
- data/lib/yuba/version.rb +1 -1
- data/lib/yuba/view_model.rb +12 -7
- data/lib/yuba/view_model/rendering.rb +38 -0
- metadata +4 -5
- data/lib/tasks/crepe_tasks.rake +0 -4
- data/lib/yuba/rendering.rb +0 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 290adbd946ac8cad632dd7d5cb975a4d5c68d831e9cbbeb7e3f6e42b89fd1b26
|
4
|
+
data.tar.gz: 583c456070ce6dd43c470de3db139a4e8fc2c5753dc9a7dcd74021b33b4383c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba927cfa71760e4b4e59e2959678783eaea2c77b9cd9eb746cc78b091d85ad23300f99da6770c36cc6f4f3fe7c07cc5d7f118cbaee1bae3fbd863d3dbbda404c
|
7
|
+
data.tar.gz: bf0e9248993e20e124a6de98eeb7b5bce9fa629ac16d7d32702b3f167cfcc5f042477ea2bf789c2a70ca9e43a51280c196bd1c56191e80379d33460f78462801
|
data/lib/yuba.rb
CHANGED
@@ -5,9 +5,8 @@ module Yuba
|
|
5
5
|
autoload :Form, 'yuba/form'
|
6
6
|
autoload :Service, 'yuba/service'
|
7
7
|
autoload :ViewModel, 'yuba/view_model'
|
8
|
-
autoload :Rendering, 'yuba/rendering'
|
9
8
|
end
|
10
9
|
|
11
10
|
ActiveSupport.on_load(:action_controller) do
|
12
|
-
ActionController::Base.include(Yuba::Rendering)
|
11
|
+
ActionController::Base.include(Yuba::ViewModel::Rendering)
|
13
12
|
end
|
data/lib/yuba/version.rb
CHANGED
data/lib/yuba/view_model.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module Yuba
|
2
2
|
class ViewModel
|
3
|
+
autoload :Rendering, 'yuba/view_model/rendering'
|
4
|
+
|
3
5
|
class_attribute :_properties
|
4
6
|
self._properties = {}
|
5
7
|
|
@@ -13,27 +15,30 @@ module Yuba
|
|
13
15
|
# property :name, public: true
|
14
16
|
# property :email, optional: true
|
15
17
|
def property(name, options = {})
|
16
|
-
_properties
|
18
|
+
self._properties = _properties.merge(name.to_sym => options)
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
20
22
|
def initialize(**args)
|
21
|
-
|
22
|
-
|
23
|
+
@_args = args
|
24
|
+
validate_arguments
|
25
|
+
define_accessors
|
23
26
|
end
|
24
27
|
|
25
28
|
private
|
26
29
|
|
27
|
-
|
28
|
-
|
30
|
+
attr_reader :_args
|
31
|
+
|
32
|
+
def validate_arguments
|
33
|
+
_args.each_key do |key|
|
29
34
|
if !_properties.has_key?(key.to_sym) && !_properties.dig(key.to_sym, :optional)
|
30
35
|
raise ArgumentError, "missing 'property :#{key}' in #{self.class.name} class"
|
31
36
|
end
|
32
37
|
end
|
33
38
|
end
|
34
39
|
|
35
|
-
def define_accessors
|
36
|
-
|
40
|
+
def define_accessors
|
41
|
+
_args.each do |key, value|
|
37
42
|
public_method = _properties[key.to_sym][:public]
|
38
43
|
define_singleton_method key do
|
39
44
|
value
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Yuba
|
2
|
+
class ViewModel
|
3
|
+
module Rendering
|
4
|
+
def render(*args)
|
5
|
+
view_model_hash = args.find { |arg| arg.is_a?(Hash) && arg[:view_model] }
|
6
|
+
@_view_model = view_model_hash[:view_model] if view_model_hash && view_model_hash[:view_model]
|
7
|
+
super
|
8
|
+
end
|
9
|
+
|
10
|
+
def view_assigns
|
11
|
+
super.merge(view_model_assigns)
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def _protected_ivars
|
17
|
+
super.merge(:@_view_model)
|
18
|
+
end
|
19
|
+
|
20
|
+
def view_model_assigns
|
21
|
+
return {} unless defined?(@_view_model)
|
22
|
+
methods = @_view_model.public_methods(false)
|
23
|
+
methods.reject! do |method_name|
|
24
|
+
%i[initialize].include?(method_name) ||
|
25
|
+
!valid_variable_name?(method_name)
|
26
|
+
end
|
27
|
+
methods.inject({}) do |hash, method_name|
|
28
|
+
hash[method_name] = @_view_model.public_send(method_name)
|
29
|
+
hash
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def valid_variable_name?(name)
|
34
|
+
name.match?(/\A[_a-z]\w*\z/)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yuba
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- willnet
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-11-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -152,15 +152,14 @@ files:
|
|
152
152
|
- lib/generators/yuba/service/templates/service.tt
|
153
153
|
- lib/generators/yuba/view_model/templates/view_model.tt
|
154
154
|
- lib/generators/yuba/view_model/view_model_generator.rb
|
155
|
-
- lib/tasks/crepe_tasks.rake
|
156
155
|
- lib/yuba.rb
|
157
156
|
- lib/yuba/form.rb
|
158
157
|
- lib/yuba/form/coercion.rb
|
159
158
|
- lib/yuba/form/multi_parameter_attributes.rb
|
160
|
-
- lib/yuba/rendering.rb
|
161
159
|
- lib/yuba/service.rb
|
162
160
|
- lib/yuba/version.rb
|
163
161
|
- lib/yuba/view_model.rb
|
162
|
+
- lib/yuba/view_model/rendering.rb
|
164
163
|
homepage: https://github.com/willnet/yuba
|
165
164
|
licenses:
|
166
165
|
- MIT
|
@@ -181,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
181
180
|
version: '0'
|
182
181
|
requirements: []
|
183
182
|
rubyforge_project:
|
184
|
-
rubygems_version: 2.6
|
183
|
+
rubygems_version: 2.7.6
|
185
184
|
signing_key:
|
186
185
|
specification_version: 4
|
187
186
|
summary: Add New Layers to Rails
|
data/lib/tasks/crepe_tasks.rake
DELETED
data/lib/yuba/rendering.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
module Yuba
|
2
|
-
module Rendering
|
3
|
-
def render(*args)
|
4
|
-
view_model_hash = args.find { |arg| arg.is_a?(Hash) && arg[:view_model] }
|
5
|
-
@_view_model = view_model_hash[:view_model] if view_model_hash && view_model_hash[:view_model]
|
6
|
-
super
|
7
|
-
end
|
8
|
-
|
9
|
-
def view_assigns
|
10
|
-
super.merge(view_model_assigns)
|
11
|
-
end
|
12
|
-
|
13
|
-
private
|
14
|
-
|
15
|
-
def _protected_ivars
|
16
|
-
super.merge(:@_view_model)
|
17
|
-
end
|
18
|
-
|
19
|
-
def view_model_assigns
|
20
|
-
return {} unless @_view_model
|
21
|
-
# TODO: get all public methods between self and Yuba::ViewModel
|
22
|
-
# now get only in self
|
23
|
-
methods = @_view_model.public_methods(false)
|
24
|
-
methods.reject! do |method_name|
|
25
|
-
%i[call initialize].include?(method_name)
|
26
|
-
end
|
27
|
-
methods.inject({}) do |hash, method_name|
|
28
|
-
hash[method_name] = @_view_model.public_send(method_name)
|
29
|
-
hash
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|