module Pakyow::Reflection::Builders::Helpers::Controller
Constants
- RESOURCE_ENDPOINTS
Public Instance Methods
controller_at_path(path, state = @app.state(:controller))
click to toggle source
# File lib/pakyow/reflection/builders/helpers/controller.rb, line 16 def controller_at_path(path, state = @app.state(:controller)) if state.any? state.find { |controller| String.normalize_path(String.collapse_path(controller.path_to_self)) == String.normalize_path(path) } || controller_at_path(path, state.flat_map(&:children)) else nil end end
controller_closest_to_path(path, state = @app.state(:controller))
click to toggle source
# File lib/pakyow/reflection/builders/helpers/controller.rb, line 26 def controller_closest_to_path(path, state = @app.state(:controller)) if state.any? controller_closest_to_path(path, state.flat_map(&:children)) || state.find { |controller| String.normalize_path(path).start_with?(String.normalize_path(String.collapse_path(controller.path_to_self))) } else nil end end
controller_path(view_path)
click to toggle source
# File lib/pakyow/reflection/builders/helpers/controller.rb, line 71 def controller_path(view_path) if view_path_directory?(view_path) view_path else view_path.split("/")[0..-2].to_a.join("/") end end
define_controller_at_path(path, within: nil)
click to toggle source
# File lib/pakyow/reflection/builders/helpers/controller.rb, line 36 def define_controller_at_path(path, within: nil) nested_state = if within within.children else @app.state(:controller) end path = String.normalize_path(path) if controller = controller_closest_to_path(path, nested_state) context = controller path = path.gsub( /^#{String.normalize_path(String.collapse_path(controller.path_to_self))}/, "" ) else context = within || @app end controller_name = if path == "/" :root else String.normalize_path(path)[1..-1].gsub("/", "_").to_sym end method = if context.is_a?(Class) && context.ancestors.include?(Pakyow::Routing::Controller) :namespace else :controller end context.send(method, controller_name, String.normalize_path(path)) do # intentionally empty end end
define_resource_for_scope_at_path(scope, path)
click to toggle source
# File lib/pakyow/reflection/builders/helpers/controller.rb, line 163 def define_resource_for_scope_at_path(scope, path) context = if resource_namespace_path = resource_namespace_path_for_scope_at_path(scope, path) if within_resource?(resource_namespace_path) ensure_controller_has_helpers( find_or_define_resource_for_scope_at_path( resource_source_at_path(resource_namespace_path), resource_namespace_path ) ) else ensure_controller_has_helpers( find_or_define_controller_at_path(resource_namespace_path) ) end else @app end context.resource resource_name_for_scope(scope), resource_path_for_scope(scope) do # intentionally empty end end
ensure_controller_has_helpers(controller)
click to toggle source
# File lib/pakyow/reflection/builders/helpers/controller.rb, line 203 def ensure_controller_has_helpers(controller) unless controller.ancestors.include?(Extension::Controller) controller.include Extension::Controller end controller end
find_or_define_controller_at_path(path)
click to toggle source
# File lib/pakyow/reflection/builders/helpers/controller.rb, line 12 def find_or_define_controller_at_path(path) controller_at_path(path) || define_controller_at_path(path) end
find_or_define_resource_for_scope_at_path(scope, path, endpoint_type = nil)
click to toggle source
# File lib/pakyow/reflection/builders/helpers/controller.rb, line 121 def find_or_define_resource_for_scope_at_path(scope, path, endpoint_type = nil) resource = resource_for_scope_at_path(scope, path) || define_resource_for_scope_at_path(scope, path) if path.end_with?(resource_path_for_scope(scope)) || endpoint_type.nil? || RESOURCE_ENDPOINTS.include?(path.split("/").last.to_sym) return resource else controller_for_endpoint_type = resource.send(endpoint_type) nested_path = if view_path_directory?(path) path else path.split("/")[0..-2].join("/") end nested_path = nested_path.gsub( /^#{String.normalize_path(String.collapse_path(controller_for_endpoint_type.path_to_self))}/, "" ) if current_controller = controller_at_path(nested_path, resource.children) return current_controller else if nested_path.empty? controller_for_endpoint_type else define_controller_at_path(nested_path, within: controller_for_endpoint_type) end end end end
find_or_define_resource_for_scope_in_resource(scope, resource)
click to toggle source
# File lib/pakyow/reflection/builders/helpers/controller.rb, line 211 def find_or_define_resource_for_scope_in_resource(scope, resource) resource.children.find { |child| child.path == resource_path_for_scope(scope) } || resource.resource(resource_name_for_scope(scope), resource_path_for_scope(scope)) do # intentionally empty end end
full_resource_path_for_scope_at_path(scope, path)
click to toggle source
# File lib/pakyow/reflection/builders/helpers/controller.rb, line 219 def full_resource_path_for_scope_at_path(scope, path) String.normalize_path( File.join( resource_namespace_path_for_scope_at_path(scope, path).to_s, scope.plural_name.to_s ) ) end
resource_for_scope_at_path(scope, path, state = @app.state(:controller))
click to toggle source
# File lib/pakyow/reflection/builders/helpers/controller.rb, line 151 def resource_for_scope_at_path(scope, path, state = @app.state(:controller)) if state.any? state.select { |controller| controller.expansions.include?(:resource) }.find { |controller| String.normalize_path(String.collapse_path(controller.path_to_self)) == full_resource_path_for_scope_at_path(scope, path) } || resource_for_scope_at_path(scope, path, state.flat_map(&:children)) else nil end end
resource_name_for_scope(scope)
click to toggle source
# File lib/pakyow/reflection/builders/helpers/controller.rb, line 195 def resource_name_for_scope(scope) scope.plural_name end
resource_namespace_path_for_scope_at_path(scope, path)
click to toggle source
# File lib/pakyow/reflection/builders/helpers/controller.rb, line 185 def resource_namespace_path_for_scope_at_path(scope, path) resource_path = resource_path_for_scope(scope) if path.start_with?(resource_path) nil elsif path.include?(resource_path) path.split(resource_path, 2)[0] end end
resource_path_for_scope(scope)
click to toggle source
# File lib/pakyow/reflection/builders/helpers/controller.rb, line 199 def resource_path_for_scope(scope) String.normalize_path(scope.plural_name) end
resource_source_at_path(view_path)
click to toggle source
# File lib/pakyow/reflection/builders/helpers/controller.rb, line 103 def resource_source_at_path(view_path) view_path.split("/").reverse.each do |view_path_part| @app.state(:source).each do |source| if source.plural_name == view_path_part.to_sym return source end end end end
route_name(view_path)
click to toggle source
# File lib/pakyow/reflection/builders/helpers/controller.rb, line 87 def route_name(view_path) if view_path_directory?(view_path) :default else view_path.split("/").last.to_sym end end
route_path(view_path)
click to toggle source
# File lib/pakyow/reflection/builders/helpers/controller.rb, line 95 def route_path(view_path) if view_path_directory?(view_path) "/" else "/#{view_path.split("/").last}" end end
view_path_directory?(view_path)
click to toggle source
# File lib/pakyow/reflection/builders/helpers/controller.rb, line 113 def view_path_directory?(view_path) @app.state(:templates).any? { |templates| File.directory?(File.join(templates.path, templates.config[:paths][:pages], view_path)) } end
within_resource?(view_path)
click to toggle source
# File lib/pakyow/reflection/builders/helpers/controller.rb, line 79 def within_resource?(view_path) view_path.split("/").any? { |view_path_part| @app.state(:source).any? { |source| source.plural_name == view_path_part.to_sym } } end