Class: Deface::DSL::Loader
- Inherits:
-
Object
- Object
- Deface::DSL::Loader
- Defined in:
- lib/deface/dsl/loader.rb
Class Method Summary collapse
- .build_context(context_name, filename, file_contents) ⇒ Object
- .build_context_and_extract_dsl_from(type, context_name, filename, file_contents) ⇒ Object
- .build_context_method_name(context_name) ⇒ Object
- .build_erb_context(context_name, filename, file_contents) ⇒ Object
- .build_haml_context(context_name, filename, file_contents) ⇒ Object
- .build_other_context(context_name, filename, file_contents) ⇒ Object
- .build_slim_context(context_name, filename, file_contents) ⇒ Object
- .extract_dsl_commands_from_erb(html_file_contents) ⇒ Object
- .extract_dsl_commands_from_haml(file_contents) ⇒ Object (also: extract_dsl_commands_from_slim)
- .load(filename, options = nil, &block) ⇒ Object
- .register ⇒ Object
Class Method Details
.build_context(context_name, filename, file_contents) ⇒ Object
26 27 28 |
# File 'lib/deface/dsl/loader.rb', line 26 def self.build_context(context_name, filename, file_contents) send build_context_method_name(context_name), context_name, filename, file_contents end |
.build_context_and_extract_dsl_from(type, context_name, filename, file_contents) ⇒ Object
48 49 50 51 52 53 54 55 56 57 |
# File 'lib/deface/dsl/loader.rb', line 48 def self.build_context_and_extract_dsl_from(type, context_name, filename, file_contents) dsl_commands, the_rest = send "extract_dsl_commands_from_#{type}", (file_contents) context_name = context_name.gsub(".html.#{type}", '') context = Context.new(context_name) context.virtual_path(determine_virtual_path(filename)) context.instance_eval(dsl_commands) context.send type, the_rest context.create_override end |
.build_context_method_name(context_name) ⇒ Object
30 31 32 33 34 |
# File 'lib/deface/dsl/loader.rb', line 30 def self.build_context_method_name(context_name) ext = File.extname(context_name).gsub(".", '') ext = "other" if ext.empty? "build_#{ext}_context" end |
.build_erb_context(context_name, filename, file_contents) ⇒ Object
36 37 38 |
# File 'lib/deface/dsl/loader.rb', line 36 def self.build_erb_context(context_name, filename, file_contents) build_context_and_extract_dsl_from('erb', context_name, filename, file_contents) end |
.build_haml_context(context_name, filename, file_contents) ⇒ Object
40 41 42 |
# File 'lib/deface/dsl/loader.rb', line 40 def self.build_haml_context(context_name, filename, file_contents) build_context_and_extract_dsl_from('haml', context_name, filename, file_contents) end |
.build_other_context(context_name, filename, file_contents) ⇒ Object
59 60 61 62 63 64 |
# File 'lib/deface/dsl/loader.rb', line 59 def self.build_other_context(context_name, filename, file_contents) context = Context.new(context_name) context.virtual_path(determine_virtual_path(filename)) context.instance_eval(file_contents) context.create_override end |
.build_slim_context(context_name, filename, file_contents) ⇒ Object
44 45 46 |
# File 'lib/deface/dsl/loader.rb', line 44 def self.build_slim_context(context_name, filename, file_contents) build_context_and_extract_dsl_from('slim', context_name, filename, file_contents) end |
.extract_dsl_commands_from_erb(html_file_contents) ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/deface/dsl/loader.rb', line 70 def self.extract_dsl_commands_from_erb(html_file_contents) dsl_commands = '' while starts_with_html_comment?(html_file_contents) first_open_comment_index = html_file_contents.lstrip.index('<!--') first_close_comment_index = html_file_contents.index('-->') unless first_close_comment_index.nil? comment = html_file_contents[first_open_comment_index..first_close_comment_index+2] end comment.gsub('<!--', '').gsub('-->', '').strip.scan(/[^\s"']+|"[^"]*"|'[^']*'/).each do |part| dsl_commands =~ /('|")\z/ || part =~ /\A[^\d:='"%]/ ? dsl_commands << "\n" : dsl_commands << ' ' dsl_commands << part end html_file_contents = html_file_contents.gsub(comment, '') end [dsl_commands, html_file_contents] end |
.extract_dsl_commands_from_haml(file_contents) ⇒ Object Also known as: extract_dsl_commands_from_slim
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/deface/dsl/loader.rb', line 93 def self.extract_dsl_commands_from_haml(file_contents) dsl_commands = '' while starts_with_haml_comment?(file_contents) first_open_comment_index = file_contents.lstrip.index('/') first_close_comment_index = file_contents.index("\n") unless first_close_comment_index.nil? comment = file_contents[first_open_comment_index..first_close_comment_index] end dsl_commands << comment.gsub('/', '').strip + "\n" file_contents = file_contents.gsub(comment, '') while file_contents.start_with?(' ') first_newline_index = file_contents.index("\n") comment = file_contents[0..first_newline_index] dsl_commands << comment.gsub('/', '').strip + "\n" file_contents = file_contents.gsub(comment, '') end end [dsl_commands, file_contents] end |
.load(filename, options = nil, &block) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/deface/dsl/loader.rb', line 8 def self.load(filename, = nil, &block) unless File.basename(filename) =~ /^[^\.]+(.html.(erb|haml|slim)){0,1}.deface$/ raise "Deface::DSL does not know how to read '#{filename}'. Override files should end with just .deface, .html.erb.deface, .html.haml.deface or .html.slim.deface" end unless file_in_dir_below_overrides?(filename) raise "Deface::DSL overrides must be in a sub-directory that matches the views virtual path. Move '#{filename}' into a sub-directory." end File.open(filename) do |file| context_name = File.basename(filename).gsub('.deface', '') file_contents = file.read build_context(context_name, filename, file_contents) end end |