lib/dashcode-converter/nib.rb in dashcode-converter-0.0.1 vs lib/dashcode-converter/nib.rb in dashcode-converter-0.1.0
- old
+ new
@@ -9,56 +9,69 @@
}
class Nib
DECL_TEMPLATE= <<-EOF
- /*import coherent*/
+ /*jsl:import coherent*/
+
NIB('<%=name%>', {
<%=items_array.join(",\n\n").indent(INDENT)%>,
- 'owner': {
- view: REF('<%=name%>')
- }
+ <%=_owner_decl.indent(INDENT)%>
});
EOF
attr_reader :name, :items, :views, :owner
def initialize(name, owner)
@name= name
@owner= owner
+ @owner_references= {}
@items= {}
@views= []
+ add_owner_reference('view', name)
end
def add_view(view)
items[view.name]= view
views << view
end
+ def add_item(item)
+ items[item.name]= item
+ end
+
def add_view_from_path(path, name=@name)
- view= View.new(name, parse(path), self)
+ view= View.new(name, self)
+ view.parse_spec(parse_parts(path))
add_view(view)
end
def add_datasources_from_path(path)
- datasources= parse(path)
- datasources.each { |name, datasource|
- items[name]= NibItem.new(name, datasource, self)
+ datasources= parse_parts(path)
+ datasources.each { |name, spec|
+ datasource= NibItem.new(name, self)
+ datasource.parse_spec(spec)
+ items[name]= datasource
+ add_owner_reference(name, name)
}
end
-
+
+ def add_owner_reference(name, reference)
+ @owner_references[name]= JavascriptCode("REF('#{reference}')")
+ end
+
def declaration
return @declaration if @declaration
items_array= items.map { |key, value| value.declaration }
@declaration= ERB.new(DECL_TEMPLATE.remove_indent).result binding
end
- def parse(path)
+ def parse_parts(path)
in_json= false
json= "{\n"
text= File.read(path)
text.each { |line|
if in_json
@@ -78,9 +91,13 @@
while items.include?(name)
index+=1
name= "#{basename}#{index}"
end
name
+ end
+
+ def _owner_decl
+ "owner: #{@owner_references.to_json(JSON_PARAMS)}"
end
end
end