lib/uki/project.rb in uki-1.0.1 vs lib/uki/project.rb in uki-1.0.2

- old
+ new

@@ -1,10 +1,12 @@ require 'fileutils' require 'commander/import' require 'erb' require 'pathname' require 'uki/include_js' +require 'base64' +require 'digest/md5' class Uki::Project attr_accessor :dest def initialize dest @@ -27,34 +29,69 @@ def build target, options = {} target = File.join(dest, target) unless Pathname.new(target).absolute? init_target target containers = find_containers cjs = extract_cjs(containers) - build_containers containers, target, options build_js cjs, target, options + build_containers containers, target, options build_images target, options end def create_class template, fullName path = fullName.split('.') create_packages path[0..-2] write_class template, path end + def create_function template, fullName + path = fullName.split('.') + create_packages path[0..-2] + write_function template, path + end + + def ie_images target + contents = File.read(File.join(dest, target)) + place = File.join(dest, 'tmp', 'theme') + # button-full/normal-v.png + contents.scan(%r{\[[^"]*"([^"]+)"[^"]+"data:image/png;base64,([^"]+)"[^"\]]*(?:"([^"]+)"[^"\]]*)?\]}) do + p $1 + file = File.join(place, $1) + FileUtils.mkdir_p File.dirname(file) + File.open(file, 'w') do |f| + f.write Base64.decode64($2) + end + `convert #{File.join(place, $1)} #{File.join(place, $3)}` if $3 + end + place + end + protected def write_class template, path package_name = path[0..-2].join('.') - class_name = path[-1] - class_name = class_name[0,1].upcase + class_name[1..-1] - file_name = class_name[0,1].downcase + class_name[1..-1] - target = File.join *(path[0..-2] + [file_name]) + class_name = path[-1] + class_name = class_name[0,1].upcase + class_name[1..-1] + file_name = class_name[0,1].downcase + class_name[1..-1] + target = File.join *(path[0..-2] + [file_name]) target += '.js' File.open(File.join(dest, target), 'w') do |f| f.write template(template).result(binding) end add_include(target) end + + def write_function template, path + package_name = path[0..-2].join('.') + function_name = path[-1] + function_name = function_name[0,1].downcase + function_name[1..-1] + file_name = function_name + target = File.join *(path[0..-2] + [file_name]) + target += '.js' + File.open(File.join(dest, target), 'w') do |f| + f.write template(template).result(binding) + end + add_include(target) + end def add_include path target = File.join(dest, "#{name}.js") includes = Uki.extract_includes target unless includes.include? path @@ -96,12 +133,13 @@ FileUtils.mv "#{file}.tmp", file end def build_containers containers, target, options containers.each do |c| - code = File.read(c).gsub(%r{=\s*["']?([^"' ]+.cjs)}) do |match| - match.sub('.cjs', '.js') + code = File.read(c).gsub(%r{=\s*["']?(([^"' ]+).cjs)}) do |match| + md5 = Digest::MD5.file(File.join(target, "#{$2}.js")).hexdigest + match.sub('.cjs', ".js?#{md5}") end File.open(File.join(target, File.basename(c)), 'w') do |f| f.write code end end @@ -126,11 +164,11 @@ FileUtils.mkdir_p target end def init_dest FileUtils.mkdir_p File.join(dest, project_name) - ['view', 'model'].each do |name| + ['view', 'model', 'layout', 'controller'].each do |name| FileUtils.mkdir_p File.join(dest, project_name, name) end end def copy_templates @@ -138,17 +176,19 @@ f.write template('index.html').result(binding) end File.open(File.join(dest, "#{project_name}.js"), 'w') do |f| f.write template('myapp.js').result(binding) end - File.open(File.join(dest, project_name, 'view.js'), 'w') do |f| - package_name = "#{project_name}.view" - f.write template('package.js').result(binding) + + create_function 'layout.js', "#{project_name}.layout.main" + + ['view', 'model', 'layout', 'controller'].each do |name| + File.open(File.join(dest, project_name, "#{name}.js"), 'w') do |f| + package_name = "#{project_name}.#{name}" + f.write template('package.js').result(binding) + end end - File.open(File.join(dest, project_name, 'model.js'), 'w') do |f| - package_name = "#{project_name}.model" - f.write template('package.js').result(binding) - end + end def project_name File.basename dest end \ No newline at end of file