pakyow-reflection 1.0.0.rc2 → 1.0.0.rc3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0cbdd30003f54df89e833f1af76e699e9c69356c8ca4e74b042e6336468170cc
4
- data.tar.gz: da09e8f385b25b4c71d41a3f2b24ca31af2cf75f67973c01c1a248ce6b51385c
3
+ metadata.gz: 2e9031c45360015c7b068ad6f85938902ac14f3cb5cb0e4d55ca4999c81d0e99
4
+ data.tar.gz: 262f93fbf4fea38139806e6fd917cd85c134e5a287151121a091fd3f4e981ec6
5
5
  SHA512:
6
- metadata.gz: be41ff92d3890d3d0235f04ec3bdee5df6c8071e95844f8705585db232c4edd916b001eb602e198559d6965f8e6f25e64854c5ffc39821b2f1950c6dec353552
7
- data.tar.gz: 607d157a91f66de8edfc10a1cc4941e359db733b971cec7dd3c4bd149eec927c1b3d714c26007fddedfb9a513c94ba53da3f49f89be956afc043050526cf95ea
6
+ metadata.gz: 440f1e6a0e2076a0f1e01bbb1f892cf36ffa94668fb110b7653ddcfc32de2f7404587242445c4ac13f69cbef254ab7e7cd4e0db972afcf13b334db88606f2c54
7
+ data.tar.gz: dc888c10a53b00cf2c61e6842d272f053b905c33e190fe692191a5987f6415d8c7e1d5f47eebbd1e1eb1f8de4cd9d1b07da63ef41d1d2fc521d6f95e8383dcf7
@@ -4,6 +4,7 @@ require "pakyow/support/inflector"
4
4
 
5
5
  module Pakyow
6
6
  module Reflection
7
+ # @api private
7
8
  class Action
8
9
  attr_reader :name, :scope, :node, :view_path, :binding, :attributes, :nested, :parents
9
10
 
@@ -4,6 +4,7 @@ require "pakyow/support/inflector"
4
4
 
5
5
  module Pakyow
6
6
  module Reflection
7
+ # @api private
7
8
  class Attribute
8
9
  attr_reader :name, :type
9
10
 
@@ -14,31 +14,29 @@ module Pakyow
14
14
  attr_reader :mirror
15
15
 
16
16
  after "initialize", priority: :high do
17
- unless Pakyow.env?(:prototype)
18
- @mirror = Mirror.new(self)
19
-
20
- builders = Hash[
21
- config.reflection.builders.map { |type, builder|
22
- [type, builder.new(self, @mirror.scopes)]
23
- }
24
- ]
25
-
26
- # Build the scopes.
27
- #
28
- @mirror.scopes.each do |scope|
29
- builders[:source].build(scope)
30
- end
31
-
32
- # Build the actions.
33
- #
34
- @mirror.scopes.each do |scope|
35
- builders[:actions].build(scope.actions)
36
- end
37
-
38
- # Build the endpoints.
39
- #
40
- builders[:endpoints].build(@mirror.endpoints)
17
+ @mirror = Mirror.new(self)
18
+
19
+ builders = Hash[
20
+ config.reflection.builders.map { |type, builder|
21
+ [type, builder.new(self, @mirror.scopes)]
22
+ }
23
+ ]
24
+
25
+ # Build the scopes.
26
+ #
27
+ @mirror.scopes.each do |scope|
28
+ builders[:source].build(scope)
41
29
  end
30
+
31
+ # Build the actions.
32
+ #
33
+ @mirror.scopes.each do |scope|
34
+ builders[:actions].build(scope.actions)
35
+ end
36
+
37
+ # Build the endpoints.
38
+ #
39
+ builders[:endpoints].build(@mirror.endpoints)
42
40
  end
43
41
  end
44
42
  end
@@ -6,6 +6,7 @@ require "pakyow/reflection/builders/helpers/controller"
6
6
  module Pakyow
7
7
  module Reflection
8
8
  module Builders
9
+ # @api private
9
10
  class Actions < Abstract
10
11
  include Helpers::Controller
11
12
 
@@ -9,6 +9,7 @@ require "pakyow/reflection/extensions/controller"
9
9
  module Pakyow
10
10
  module Reflection
11
11
  module Builders
12
+ # @api private
12
13
  class Endpoints < Abstract
13
14
  include Helpers::Controller
14
15
 
@@ -57,7 +57,7 @@ module Pakyow
57
57
  String.normalize_path(path)[1..-1].gsub("/", "_").to_sym
58
58
  end
59
59
 
60
- method = if context.is_a?(Class) && context.ancestors.include?(Pakyow::Controller)
60
+ method = if context.is_a?(Class) && context.ancestors.include?(Pakyow::Routing::Controller)
61
61
  :namespace
62
62
  else
63
63
  :controller
@@ -5,6 +5,7 @@ require "pakyow/reflection/builders/abstract"
5
5
  module Pakyow
6
6
  module Reflection
7
7
  module Builders
8
+ # @api private
8
9
  class Source < Abstract
9
10
  def build(scope)
10
11
  (source_for_scope(scope) || define_source_for_scope(scope)).class_eval do
@@ -2,6 +2,7 @@
2
2
 
3
3
  module Pakyow
4
4
  module Reflection
5
+ # @api private
5
6
  class Exposure
6
7
  attr_reader :scope, :node, :binding, :dataset, :parent, :children
7
8
 
@@ -53,6 +54,7 @@ module Pakyow
53
54
  end
54
55
  end
55
56
 
57
+ # @api private
56
58
  class Endpoint
57
59
  attr_reader :view_path, :options, :exposures
58
60
 
@@ -28,26 +28,6 @@ module Pakyow
28
28
  end
29
29
  end
30
30
 
31
- def reflected_scope
32
- connection.get(:__reflected_scope)
33
- end
34
-
35
- def reflected_action
36
- connection.get(:__reflected_action)
37
- end
38
-
39
- def reflected_endpoint
40
- connection.get(:__reflected_endpoint)
41
- end
42
-
43
- def reflects_specific_object?(object_name)
44
- (
45
- self.class.__object_name.name == object_name && (
46
- connection.get(:__endpoint_name) == :show || connection.get(:__endpoint_name) == :edit
47
- )
48
- ) || parent_resource_named?(object_name)
49
- end
50
-
51
31
  def reflective_expose
52
32
  reflected_endpoint.exposures.each do |reflected_exposure|
53
33
  if reflected_exposure.parent.nil? || reflected_exposure.binding.to_s.include?("form")
@@ -123,22 +103,7 @@ module Pakyow
123
103
  end
124
104
  end
125
105
 
126
- def reflective_create
127
- logger.debug "[reflection] create"
128
- handle_submitted_data
129
- end
130
-
131
- def reflective_update
132
- logger.debug "[reflection] update"
133
- handle_submitted_data
134
- end
135
-
136
- def reflective_delete
137
- logger.debug "[reflection] delete"
138
- handle_submitted_data
139
- end
140
-
141
- def verify_submitted_form
106
+ def verify_reflected_form
142
107
  with_reflected_action do |reflected_action|
143
108
  local = self
144
109
 
@@ -160,7 +125,7 @@ module Pakyow
160
125
  end
161
126
  end
162
127
 
163
- def handle_submitted_data
128
+ def perform_reflected_action
164
129
  with_reflected_action do |reflected_action|
165
130
  proxy = data.public_send(reflected_action.scope.plural_name)
166
131
 
@@ -207,11 +172,11 @@ module Pakyow
207
172
  def reflected_destination
208
173
  with_reflected_action do |reflected_action|
209
174
  if connection.form && origin = connection.form[:origin]
210
- if instance_variable_defined?(:@object) && origin == "/#{reflected_action.scope.plural_name}/new"
211
- if self.class.routes[:get].any? { |route| route.name == :show }
212
- path(:"#{reflected_action.scope.plural_name}_show", @object.one.to_h)
213
- elsif self.class.routes[:get].any? { |route| route.name == :list }
214
- path(:"#{reflected_action.scope.plural_name}_list")
175
+ if instance_variable_defined?(:@object)
176
+ if route = self.class.routes[:get].find { |route| route.name == :show }
177
+ route.build_path(self.class.path_to_self, params.merge(@object.one.to_h))
178
+ elsif route = self.class.routes[:get].find { |route| route.name == :list }
179
+ route.build_path(self.class.path_to_self, params)
215
180
  else
216
181
  origin
217
182
  end
@@ -226,6 +191,22 @@ module Pakyow
226
191
 
227
192
  private
228
193
 
194
+ def reflected_action
195
+ connection.get(:__reflected_action)
196
+ end
197
+
198
+ def reflected_endpoint
199
+ connection.get(:__reflected_endpoint)
200
+ end
201
+
202
+ def reflects_specific_object?(object_name)
203
+ (
204
+ self.class.__object_name.name == object_name && (
205
+ connection.get(:__endpoint_name) == :show || connection.get(:__endpoint_name) == :edit
206
+ )
207
+ ) || parent_resource_named?(object_name)
208
+ end
209
+
229
210
  def parent_resource_named?(object_name, context = self.class)
230
211
  if context && context.parent
231
212
  context.parent.__object_name&.name == object_name || parent_resource_named?(object_name, context.parent)
@@ -31,7 +31,7 @@ module Pakyow
31
31
  if (reflected_action = controller.connection.get(:__reflected_action)) && reflected_action.name == controller.connection.get(:__endpoint_name)
32
32
  case reflected_action.name
33
33
  when :create, :update
34
- controller.verify_submitted_form
34
+ controller.verify_reflected_form
35
35
  end
36
36
  end
37
37
  end
@@ -39,12 +39,9 @@ module Pakyow
39
39
  action :perform do
40
40
  if (reflected_action = controller.connection.get(:__reflected_action)) && reflected_action.name == controller.connection.get(:__endpoint_name)
41
41
  case reflected_action.name
42
- when :create
43
- controller.reflective_create
44
- when :update
45
- controller.reflective_update
46
- when :delete
47
- controller.reflective_delete
42
+ when :create, :update, :delete
43
+ controller.perform_reflected_action
44
+ @object = controller.instance_variable_get(:@object)
48
45
  end
49
46
  end
50
47
  end
@@ -14,6 +14,7 @@ module Pakyow
14
14
  module Reflection
15
15
  # Reflects state from an application's view templates.
16
16
  #
17
+ # @api private
17
18
  class Mirror
18
19
  using Support::DeepDup
19
20
 
@@ -235,7 +236,7 @@ module Pakyow
235
236
  view.binding_props.reject { |binding_prop_node|
236
237
  binding_prop_node.significant?(:multipart_binding) && binding_prop_node.label(:binding) != view.binding_name
237
238
  }.select { |binding_prop_node|
238
- !fields || Presenter::Form::FIELD_TAGS.include?(binding_prop_node.tagname)
239
+ !fields || Presenter::Views::Form::FIELD_TAGS.include?(binding_prop_node.tagname)
239
240
  }.each_with_object([]) do |binding_prop_node, attributes|
240
241
  binding_prop_view = Presenter::View.from_object(binding_prop_node)
241
242
  binding_prop_name = if binding_prop_node.significant?(:multipart_binding)
@@ -4,6 +4,7 @@ require "pakyow/support/inflector"
4
4
 
5
5
  module Pakyow
6
6
  module Reflection
7
+ # @api private
7
8
  class Nested
8
9
  attr_reader :name, :attributes, :nested
9
10
 
@@ -4,6 +4,7 @@ require "pakyow/support/inflector"
4
4
 
5
5
  module Pakyow
6
6
  module Reflection
7
+ # @api private
7
8
  class Scope
8
9
  attr_reader :name, :parents, :actions, :children
9
10
  attr_writer :parent
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pakyow-reflection
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.rc2
4
+ version: 1.0.0.rc3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bryan Powell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-04 00:00:00.000000000 Z
11
+ date: 2019-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pakyow-core
@@ -16,70 +16,70 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 1.0.0.rc2
19
+ version: 1.0.0.rc3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 1.0.0.rc2
26
+ version: 1.0.0.rc3
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: pakyow-data
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 1.0.0.rc2
33
+ version: 1.0.0.rc3
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 1.0.0.rc2
40
+ version: 1.0.0.rc3
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pakyow-form
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: 1.0.0.rc2
47
+ version: 1.0.0.rc3
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: 1.0.0.rc2
54
+ version: 1.0.0.rc3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: pakyow-presenter
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: 1.0.0.rc2
61
+ version: 1.0.0.rc3
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: 1.0.0.rc2
68
+ version: 1.0.0.rc3
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: pakyow-support
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 1.0.0.rc2
75
+ version: 1.0.0.rc3
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 1.0.0.rc2
82
+ version: 1.0.0.rc3
83
83
  description: Reflected behavior for Pakyow
84
84
  email: bryan@metabahn.com
85
85
  executables: []