Class: CMSScanner::Formatter::Base
- Inherits:
-
Object
- Object
- CMSScanner::Formatter::Base
- Defined in:
- lib/cms_scanner/formatter.rb
Overview
Base Formatter
Constant Summary collapse
- ERB_SUPPORTS_KVARGS =
Ruby 2.6+
::ERB.instance_method(:initialize).parameters.assoc(:key)
Instance Attribute Summary collapse
-
#controller_name ⇒ Object
readonly
Returns the value of attribute controller_name.
Instance Method Summary collapse
-
#base_format ⇒ String
The underscored format to use as a base.
-
#beautify ⇒ Object
This is called after the scan and used in some formatters (e.g JSON) to indent results.
-
#format ⇒ String
The underscored name of the class.
- #formats ⇒ Array<String>
-
#initialize ⇒ Base
constructor
A new instance of Base.
- #output(tpl, vars = {}, controller_name = nil) ⇒ Object
- #render(tpl, vars = {}, controller_name = nil) ⇒ Object
- #template_vars(vars) ⇒ Void
- #user_interaction? ⇒ Boolean
-
#view_path(tpl) ⇒ String
The path of the view.
-
#views_directories ⇒ Array<String>
The directories to look into for views.
Constructor Details
Instance Attribute Details
#controller_name ⇒ Object (readonly)
Returns the value of attribute controller_name.
52 53 54 |
# File 'lib/cms_scanner/formatter.rb', line 52 def controller_name @controller_name end |
Instance Method Details
#base_format ⇒ String
Returns The underscored format to use as a base.
70 |
# File 'lib/cms_scanner/formatter.rb', line 70 def base_format; end |
#beautify ⇒ Object
This is called after the scan and used in some formatters (e.g JSON) to indent results
80 |
# File 'lib/cms_scanner/formatter.rb', line 80 def beautify; end |
#format ⇒ String
Returns The underscored name of the class.
60 61 62 |
# File 'lib/cms_scanner/formatter.rb', line 60 def format self.class.name.demodulize.underscore end |
#formats ⇒ Array<String>
73 74 75 |
# File 'lib/cms_scanner/formatter.rb', line 73 def formats [format, base_format].compact end |
#output(tpl, vars = {}, controller_name = nil) ⇒ Object
83 84 85 |
# File 'lib/cms_scanner/formatter.rb', line 83 def output(tpl, vars = {}, controller_name = nil) puts render(tpl, vars, controller_name) end |
#render(tpl, vars = {}, controller_name = nil) ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/cms_scanner/formatter.rb', line 92 def render(tpl, vars = {}, controller_name = nil) template_vars(vars) @controller_name = controller_name if controller_name # '-' is used to disable new lines when -%> is used # See http://www.ruby-doc.org/stdlib-2.1.1/libdoc/erb/rdoc/ERB.html # Since ruby 2.6, KVARGS are supported and passing argument is deprecated in ruby 3+ if ERB_SUPPORTS_KVARGS ERB.new(File.read(view_path(tpl)), trim_mode: '-').result(binding) else ERB.new(File.read(view_path(tpl)), nil, '-').result(binding) end end |
#template_vars(vars) ⇒ Void
109 110 111 112 113 |
# File 'lib/cms_scanner/formatter.rb', line 109 def template_vars(vars) vars.each do |key, value| instance_variable_set("@#{key}", value) unless key == :views_directories end end |
#user_interaction? ⇒ Boolean
65 66 67 |
# File 'lib/cms_scanner/formatter.rb', line 65 def user_interaction? format == 'cli' end |
#view_path(tpl) ⇒ String
Returns The path of the view.
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/cms_scanner/formatter.rb', line 118 def view_path(tpl) if tpl[0, 1] == '@' # Global Template tpl = tpl.delete('@') else raise 'The controller_name can not be nil' unless controller_name tpl = "#{controller_name}/#{tpl}" end raise "Wrong tpl format: '#{tpl}'" unless %r{\A[\w/_]+\z}.match?(tpl) views_directories.reverse_each do |dir| formats.each do |format| potential_file = File.join(dir, format, "#{tpl}.erb") return potential_file if File.exist?(potential_file) end end raise "View not found for #{format}/#{tpl}" end |
#views_directories ⇒ Array<String>
Returns The directories to look into for views.
141 142 143 144 145 146 |
# File 'lib/cms_scanner/formatter.rb', line 141 def views_directories @views_directories ||= [ APP_DIR, NS::APP_DIR, File.join(Dir.home, ".#{NS.app_name}"), File.join(Dir.pwd, ".#{NS.app_name}") ].uniq.reduce([]) { |acc, elem| acc << Pathname.new(elem).join('views').to_s } end |