nali 0.2.8 → 0.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,8 +12,6 @@ Nali.extend Model:
12
12
  @views = {}
13
13
 
14
14
  tables: {}
15
- hasOne: []
16
- hasMany: []
17
15
  attributes: {}
18
16
  updated: 0
19
17
  noticesWait: []
@@ -21,6 +21,9 @@ Nali.extend View:
21
21
  @redrawOn source, "update.#{ property }"
22
22
  source[ property ]
23
23
 
24
+ getMy: ( property ) ->
25
+ @getOf @model, property
26
+
24
27
  redrawOn: ( source, event ) ->
25
28
  @subscribeTo source, event, @onSourceUpdated
26
29
 
@@ -39,10 +42,8 @@ Nali.extend View:
39
42
  @runModelCallback 'beforeShow'
40
43
  @draw().bindEvents()
41
44
  @runAssistants 'show'
42
- @subscribeTo @model, 'update', @onSourceUpdated
43
45
  @subscribeTo @model, 'destroy', @onSourceDestroyed
44
46
  @element.appendTo insertTo
45
- @showRelations()
46
47
  setTimeout ( => @onShow() ), 5 if @onShow?
47
48
  @visible = true
48
49
  @runModelCallback 'afterShow'
@@ -75,19 +76,6 @@ Nali.extend View:
75
76
  @model[ type ]?[ @_shortName ]?.call @model
76
77
  @
77
78
 
78
- showRelations: ->
79
- for { selector, name, view } in @relationsMap
80
- if ( relation = @model[ name ] )?
81
- insertTo = @element.find selector
82
- if relation.childOf 'Collection'
83
- relation.show view, insertTo, true
84
- relation.subscribeTo @, 'hide', relation.reset
85
- else
86
- view = relation.show view, insertTo
87
- view.subscribeTo @, 'hide', view.hide
88
- else console.warn "Relation %s does not exist of model %O", name, @model
89
- @
90
-
91
79
  runLink: ( event ) ->
92
80
  event.preventDefault()
93
81
  @runUrl event.currentTarget.getAttribute 'href'
@@ -181,20 +169,11 @@ Nali.extend View:
181
169
  .replace( /{\s*yield\s*}/g, '<div class="yield"></div>' )
182
170
  unless RegExp( "^<[^>]+" + @_name ).test @template
183
171
  @template = "<div class=\"#{ @_name }\">#{ @template }</div>"
184
- @parseRelations()
172
+ @parseAssistants()
185
173
  container.parentNode.removeChild container
186
174
  else console.warn 'Template %s not exists', @_name
187
175
  @
188
176
 
189
- parseRelations: ->
190
- @relationsMap = []
191
- @template = @template.replace /{\s*(\w+) of @(\w+)\s*}/g, ( match, view, relation ) =>
192
- className = relation.capitalize() + view.capitalize() + 'Relation'
193
- @relationsMap.push selector: '.' + className, name: relation, view: view
194
- "<div class=\"#{ className }\"></div>"
195
- @parseAssistants()
196
- @
197
-
198
177
  parseAssistants: ->
199
178
  @assistantsMap = []
200
179
  if /{\s*.+?\s*}|bind=".+?"/.test @template
@@ -204,8 +183,11 @@ Nali.extend View:
204
183
  @
205
184
 
206
185
  scanAssistants: ( node, path = [] ) ->
207
- if node.nodeType is 3 and /{\s*.+?\s*}/.test node.textContent
208
- @assistantsMap.push nodepath: path, type: 'Text'
186
+ if node.nodeType is 3
187
+ if /^{\s*\w+ of @\w*\s*}$/.test( node.textContent.trim() ) and node.parentNode.childNodes.length is 1
188
+ @assistantsMap.push nodepath: path, type: 'Relation'
189
+ else if /{\s*.+?\s*}/.test node.textContent
190
+ @assistantsMap.push nodepath: path, type: 'Text'
209
191
  else if node.nodeName is 'ASSIST'
210
192
  @assistantsMap.push nodepath: path, type: 'Html'
211
193
  else
@@ -286,6 +268,19 @@ Nali.extend View:
286
268
  _node.off 'change'
287
269
  @
288
270
 
271
+ addRelationAssistant: ( node ) ->
272
+ [ match, name, chain ] = node.textContent.match /{\s*(\w+) of @(\w*)\s*}/
273
+ ( insertTo = node.parentNode ).removeChild node
274
+ segments = if chain.length then chain.split '.' else []
275
+ @assistants[ 'show' ].push ->
276
+ if relation = @getSource segments
277
+ if relation.childOf 'Collection'
278
+ relation.show name, insertTo, true
279
+ relation.subscribeTo @, 'hide', relation.reset
280
+ else
281
+ view = relation.show name, insertTo
282
+ view.subscribeTo @, 'hide', view.hide
283
+
289
284
  analize: ( value ) ->
290
285
  value.replace /{\s*(.+?)\s*}/g, ( match, sub ) => @analizeMatch sub
291
286
 
@@ -293,22 +288,25 @@ Nali.extend View:
293
288
  if match = sub.match /^@([\w\.]+)(\?)?$/
294
289
  if result = @analizeChain match[1]
295
290
  [ source, property ] = result
296
- source.subscribe? @, "update.#{ property }", @onSourceUpdated if source isnt @model
291
+ source.subscribe? @, "update.#{ property }", @onSourceUpdated
297
292
  if match[2] is '?'
298
293
  if source[ property ] then property else ''
299
294
  else if source[ property ]? then source[ property ] else ''
300
295
  else ''
301
296
  else if match = sub.match /^[=|\+](\w+)$/
302
297
  @helpers?[ match[1] ]?.call @
303
- else undefined
298
+ else sub
299
+
300
+ getSource: ( segments, source = @model ) ->
301
+ for segment in segments
302
+ if segment of source then source = source[ segment ]
303
+ else
304
+ console.warn "%s: chain \"%s\" is invalid, segment \"%s\" not exists in %O", @_name, segments.join( '.' ), segment, source
305
+ return null
306
+ source
304
307
 
305
308
  analizeChain: ( chain, source = @model ) ->
306
309
  segments = chain.split '.'
307
310
  property = segments.pop()
308
- for segment in segments
309
- if segment of source then source = source[ segment ]
310
- else break
311
- unless property of source
312
- console.warn "%s: chain \"%s\" is invalid", @_name, chain
313
- return null
311
+ return null unless source = @getSource segments, source
314
312
  [ source, property ]
@@ -53,7 +53,7 @@ module Nali
53
53
  actions: {}"
54
54
  )
55
55
  end
56
- File.open( File.join( Dir.pwd, "app/models/#{ filename }.rb" ), 'w' ) do |f|
56
+ File.open( File.join( Dir.pwd, "app/server/models/#{ filename }.rb" ), 'w' ) do |f|
57
57
  f.write(
58
58
  "class #{ classname } < ActiveRecord::Base
59
59
 
@@ -66,7 +66,7 @@ module Nali
66
66
  end"
67
67
  )
68
68
  end
69
- File.open( File.join( Dir.pwd, "app/controllers/#{ filename }s_controller.rb" ), 'w' ) do |f|
69
+ File.open( File.join( Dir.pwd, "app/server/controllers/#{ filename }s_controller.rb" ), 'w' ) do |f|
70
70
  f.write(
71
71
  "class #{ classname }sController < ApplicationController
72
72
 
@@ -75,7 +75,7 @@ end"
75
75
  end"
76
76
  )
77
77
  end
78
- File.open( File.join( Dir.pwd, "app/models/access.yml" ), 'a' ) do |f|
78
+ File.open( File.join( Dir.pwd, "app/server/models/access.yml" ), 'a' ) do |f|
79
79
  f.write(
80
80
  "
81
81
 
@@ -91,9 +91,9 @@ end"
91
91
  FileUtils.rm_rf( File.join( Dir.pwd, "tmp/cache" ) )
92
92
  puts "Created: app/client/javascripts/models/#{ filename }.js.coffee"
93
93
  puts "Created: app/client/javascripts/controllers/#{ filename }s.js.coffee"
94
- puts "Created: app/models/#{ filename }.rb"
95
- puts "Created: app/controllers/#{ filename }s_controller.rb"
96
- puts "Updated: app/models/access.yml"
94
+ puts "Created: app/server/models/#{ filename }.rb"
95
+ puts "Created: app/server/controllers/#{ filename }s_controller.rb"
96
+ puts "Updated: app/server/models/access.yml"
97
97
  else puts 'Please go to the application folder' end
98
98
  end
99
99
 
@@ -1,5 +1,5 @@
1
1
  module Nali
2
2
 
3
- VERSION = '0.2.8'
3
+ VERSION = '0.2.9'
4
4
 
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nali
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.8
4
+ version: 0.2.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-11-15 00:00:00.000000000 Z
12
+ date: 2014-11-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thin