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