Class: ArchitectureJS::Blueprint
- Inherits:
-
Object
- Object
- ArchitectureJS::Blueprint
- Defined in:
- lib/architecture-js/blueprint.rb
Instance Attribute Summary collapse
-
#blueprint ⇒ Object
Returns the value of attribute blueprint.
-
#config ⇒ Object
Returns the value of attribute config.
-
#config_name ⇒ Object
Returns the value of attribute config_name.
-
#directories ⇒ Object
Returns the value of attribute directories.
-
#raise_errors ⇒ Object
Returns the value of attribute raise_errors.
-
#root ⇒ Object
Returns the value of attribute root.
-
#src_files ⇒ Object
Returns the value of attribute src_files.
-
#template_directories ⇒ Object
Returns the value of attribute template_directories.
-
#templates ⇒ Object
Returns the value of attribute templates.
Class Method Summary collapse
Instance Method Summary collapse
- #add_src_files_to_project(directory) ⇒ Object
- #assign_config_variables(config) ⇒ Object
- #compile_src_file(file_path, file_name) ⇒ Object
- #compile_src_files ⇒ Object
- #compress_application ⇒ Object
- #create ⇒ Object
- #create_application_file ⇒ Object
- #create_project_scaffold ⇒ Object
- #create_templates_file ⇒ Object
- #find_templates_in_directory(dir) ⇒ Object
- #get_file_name(module_path) ⇒ Object
- #get_src_files ⇒ Object
- #get_template_name(file, dir, ext = '.jst') ⇒ Object
- #get_templates ⇒ Object
-
#initialize(config, root = nil) ⇒ Blueprint
constructor
A new instance of Blueprint.
- #read_config ⇒ Object
- #update(compress = false) ⇒ Object
- #watch(message) ⇒ Object
- #write_config ⇒ Object
Constructor Details
#initialize(config, root = nil) ⇒ Blueprint
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/architecture-js/blueprint.rb', line 26 def initialize(config, root = nil) raise "#{self.class}.new({ name: 'myapp' }, options): config[:name] is undefined" unless config[:name] @raise_errors = false @config_file = "#{config[:name].downcase}.blueprint" root ||= Dir.getwd @root = File.(root) @template_directories = ["#{@root}/templates"] @directories = ['lib', 'src'] @config = { blueprint: 'default', src_dir: 'src', build_dir: 'lib', asset_root: '../', output: 'compressed', template_dir: 'templates', template_namespace: 'templates' } @config.merge! config unless config.nil? @template_directories = [*@config[:template_dir]].map { |dir| "#{@root}/#{dir}" } get_src_files end |
Instance Attribute Details
#blueprint ⇒ Object
Returns the value of attribute blueprint.
4 5 6 |
# File 'lib/architecture-js/blueprint.rb', line 4 def blueprint @blueprint end |
#config ⇒ Object
Returns the value of attribute config.
4 5 6 |
# File 'lib/architecture-js/blueprint.rb', line 4 def config @config end |
#config_name ⇒ Object
Returns the value of attribute config_name.
4 5 6 |
# File 'lib/architecture-js/blueprint.rb', line 4 def config_name @config_name end |
#directories ⇒ Object
Returns the value of attribute directories.
4 5 6 |
# File 'lib/architecture-js/blueprint.rb', line 4 def directories @directories end |
#raise_errors ⇒ Object
Returns the value of attribute raise_errors.
4 5 6 |
# File 'lib/architecture-js/blueprint.rb', line 4 def raise_errors @raise_errors end |
#root ⇒ Object
Returns the value of attribute root.
4 5 6 |
# File 'lib/architecture-js/blueprint.rb', line 4 def root @root end |
#src_files ⇒ Object
Returns the value of attribute src_files.
4 5 6 |
# File 'lib/architecture-js/blueprint.rb', line 4 def src_files @src_files end |
#template_directories ⇒ Object
Returns the value of attribute template_directories.
4 5 6 |
# File 'lib/architecture-js/blueprint.rb', line 4 def template_directories @template_directories end |
#templates ⇒ Object
Returns the value of attribute templates.
4 5 6 |
# File 'lib/architecture-js/blueprint.rb', line 4 def templates @templates end |
Class Method Details
.init_with_config(path) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/architecture-js/blueprint.rb', line 14 def self.init_with_config(path) config_file = Dir.entries(path).select {|f| f =~ /\.blueprint$/ }.first raise ".blueprint file was not found in #{path}/" if config_file.nil? config = YAML::load_file "#{path}/#{config_file}" config = ArchitectureJS::Helpers::symbolize_keys config require "#{config[:blueprint]}-architecture" unless config[:blueprint] == 'default' project = ArchitectureJS::BLUEPRINTS[config[:blueprint]].new config, path end |
Instance Method Details
#add_src_files_to_project(directory) ⇒ Object
142 143 144 145 146 147 |
# File 'lib/architecture-js/blueprint.rb', line 142 def add_src_files_to_project(directory) Dir["#{directory}/*.js"].each do |file| src_filename = file.gsub(directory, '') @src_files << "#{directory}#{src_filename}" unless src_filename.match(/^\/_/) end end |
#assign_config_variables(config) ⇒ Object
53 54 55 56 57 |
# File 'lib/architecture-js/blueprint.rb', line 53 def assign_config_variables(config) config.each do |key, value| @config[key.to_sym] = value end end |
#compile_src_file(file_path, file_name) ⇒ Object
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'lib/architecture-js/blueprint.rb', line 161 def compile_src_file(file_path, file_name) sprockets = Sprockets::Secretary.new( root: ArchitectureJS::base_directory, asset_root: @config[:asset_root], load_path: ['repository'], source_files: [file_path], interpolate_constants: false ) compiled_file = sprockets.concatenation = File.exists?("#{@root}/#{@config[:build_dir]}/#{file_name}.js") ? "#{@config[:build_dir]}/#{file_name}.js updated" : "#{@config[:build_dir]}/#{file_name}.js created" compiled_file.save_to "#{@root}/#{@config[:build_dir]}/#{file_name}.js" ArchitectureJS::Notification.log sprockets.install_assets rescue Exception => error @errors = true puts ArchitectureJS::Notification.error "Sprockets error: #{error.message}" raise if @raise_errors end |
#compile_src_files ⇒ Object
149 150 151 152 153 154 |
# File 'lib/architecture-js/blueprint.rb', line 149 def compile_src_files @src_files.each do |file_path| file_name = get_file_name file_path compile_src_file file_path, file_name end end |
#compress_application ⇒ Object
182 183 184 185 186 187 188 189 190 191 192 193 |
# File 'lib/architecture-js/blueprint.rb', line 182 def compress_application app_root = File. "#{@root}/#{@config[:build_dir]}" src_files = Dir.entries(app_root).reject! { |file| file =~ /^\./ } src_files.each do |file| full_path = "#{app_root}/#{file}" uncompressed = File.open(full_path, "r").read File.open(full_path, "w+") do |file| file << JSMin.minify(uncompressed).gsub(/\n?/, '') end end end |
#create ⇒ Object
59 60 61 62 63 64 |
# File 'lib/architecture-js/blueprint.rb', line 59 def create puts ArchitectureJS::Notification.notice "Creating the #{@config[:name]} project in #{@root}" create_project_scaffold write_config create_application_file end |
#create_application_file ⇒ Object
86 87 88 89 |
# File 'lib/architecture-js/blueprint.rb', line 86 def create_application_file FileUtils.touch("#{@root}/#{@config[:src_dir]}/#{@config[:name]}.js") puts ArchitectureJS::Notification.added "#{@config[:src_dir]}/#{@config[:name]}.js created" end |
#create_project_scaffold ⇒ Object
66 67 68 69 70 71 72 73 |
# File 'lib/architecture-js/blueprint.rb', line 66 def create_project_scaffold Dir.mkdir "#{@root}" unless File.exists? "#{@root}" @directories.each do |dir| puts ArchitectureJS::Notification.added "#{dir}/ created" unless File.exists? "#{@root}/#{dir}" Dir.mkdir "#{@root}/#{dir}" unless File.exists? "#{@root}/#{dir}" end end |
#create_templates_file ⇒ Object
128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/architecture-js/blueprint.rb', line 128 def create_templates_file templates_string = '' app_name = @config[:name] template_namespace = @config[:template_namespace] formatted_templates = @templates.map do |name, function| "\"#{name}\": #{function}" end template = ERB.new File.read("#{ArchitectureJS::base_directory}/templates/templates_file.erb") @compiled_templates_file = template.result binding File.open("#{@root}/#{@config[:build_dir]}/templates.js", "w+") do |f| f << @compiled_templates_file end end |
#find_templates_in_directory(dir) ⇒ Object
116 117 118 119 120 121 122 |
# File 'lib/architecture-js/blueprint.rb', line 116 def find_templates_in_directory(dir) dir_glob = File.join(dir, "**", "*.jst") Dir.glob(dir_glob).each do |f| name = get_template_name f, dir @templates[name] = EJS.compile(File.read f) end end |
#get_file_name(module_path) ⇒ Object
156 157 158 159 |
# File 'lib/architecture-js/blueprint.rb', line 156 def get_file_name(module_path) module_file = module_path.split(/[\\\/]/).last module_filename = module_file.gsub(/\.js$/, '') end |
#get_src_files ⇒ Object
102 103 104 105 106 107 |
# File 'lib/architecture-js/blueprint.rb', line 102 def get_src_files @src_files = [] [*@config[:src_dir]].each do |directory| add_src_files_to_project File.(directory, @root) end end |
#get_template_name(file, dir, ext = '.jst') ⇒ Object
124 125 126 |
# File 'lib/architecture-js/blueprint.rb', line 124 def get_template_name(file, dir, ext = '.jst') File.basename(file.gsub(/#{dir}\/?/, ''), ext) end |
#get_templates ⇒ Object
109 110 111 112 113 114 |
# File 'lib/architecture-js/blueprint.rb', line 109 def get_templates @templates = {} @template_directories.each do |dir| find_templates_in_directory dir end end |
#read_config ⇒ Object
48 49 50 51 |
# File 'lib/architecture-js/blueprint.rb', line 48 def read_config config = YAML::load_file("#{@root}/#{@config_file}") assign_config_variables config end |
#update(compress = false) ⇒ Object
91 92 93 94 95 96 97 98 99 100 |
# File 'lib/architecture-js/blueprint.rb', line 91 def update(compress = false) read_config get_src_files get_templates create_templates_file unless @templates.empty? compile_src_files compress_application if compress || @config[:output] == 'compressed' puts ArchitectureJS::Notification.log "application updated" unless @errors @errors = false end |
#watch(message) ⇒ Object
195 196 197 198 |
# File 'lib/architecture-js/blueprint.rb', line 195 def watch() watcher = ArchitectureJS::Watcher.new self watcher.watch end |
#write_config ⇒ Object
75 76 77 78 79 80 81 82 83 84 |
# File 'lib/architecture-js/blueprint.rb', line 75 def write_config File.open("#{@root}/#{@config_file}", "w+") do |conf_file| @config.each do |key, value| conf_file << "#{key}: #{ArchitectureJS::Helpers.array_to_yml value}\n" if value.is_a? Array conf_file << "#{key}: #{value}\n" if value.is_a? String end end puts ArchitectureJS::Notification.added "#{@config_file} created" end |