Sha256: d74f15afa56d4a38c6c2c405a91e97d7d3d512cbcfac6f0a5488546d67a2aa8e
Contents?: true
Size: 1.59 KB
Versions: 6
Compression:
Stored size: 1.59 KB
Contents
class BlockService def self.block_names(path:) form_views(path: path).map do |view| filename = File.basename(view, '.html.erb') # Removes leading _ if exists filename.sub!(/^_/, '') end end def self.form_view(name, path:) view_by_name(name, form_view_paths(path)) end def self.frontend_view(name, path:) view_by_name(name, frontend_view_paths(path)) end def self.frontend_views(path:) views(frontend_view_paths(path)) end def self.form_views(path:) views(form_view_paths(path)) end private # Looks for a block view by its name. # # It will first search in a specified path and will fallback to the default path # An exception will be raised if the view is nowhere to be found def self.view_by_name(name, paths) views = views(paths) view = views.find { |view| view.include?("/_#{name}.html.erb") } unless view prefixes = paths.map { |path| path.split('app/views/').last } raise ActionView::MissingTemplate.new(paths, name, prefixes, true, "headmin") unless view end view end def self.form_view_paths(path) [app_view_path(path), app_view_path('admin/blocks')].uniq end def self.frontend_view_paths(path) [app_view_path(path), app_view_path('website/blocks')].uniq end def self.app_view_path(path) base_path = 'app/views' [base_path, path].join('/') end def self.views(paths) paths.map { |path| views_in_path(path) }.flatten end def self.views_in_path(path) files = Dir.glob("#{path}/*") files.map do |file| file.split('app/views/').last end end end
Version data entries
6 entries across 6 versions & 1 rubygems