Sha256: 3b559a9c9d6821089746af7c8844cd11108bfa2550e4124b96c63ca77aa102cc
Contents?: true
Size: 1.64 KB
Versions: 2
Compression:
Stored size: 1.64 KB
Contents
class BlockService def self.block_names(path:) form_views(path: path).map do |view| view_name(view) 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 def self.view_name(view) filename = File.basename(view.split('.')[0]) # Removes leading _ if exists filename.sub(/^_/, '') 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
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
headmin-0.3.2 | app/services/block_service.rb |
headmin-0.3.1 | app/services/block_service.rb |