pakyow-reflection 1.0.0.rc2 → 1.0.0.rc3

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 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: []