139 lines
3.7 KiB
VimL
Executable File
139 lines
3.7 KiB
VimL
Executable File
" Author: Mykola Golubyev ( Nickolay Golubev )
|
|
" Email: golubev.nikolay@gmail.com
|
|
" Site: www.railmoon.com
|
|
" Plugin: oscan
|
|
" Module: record
|
|
" Purpose: represent record in oscan
|
|
|
|
" -
|
|
" [ plugin function ]
|
|
" Name: railmoon#oscan#record#create
|
|
" Purpose: create record
|
|
" [ parameters ]
|
|
" header record header -- list
|
|
" tag_list list of tags associated with record
|
|
" data record data ( line number, or buffer number, or whatever )
|
|
" -
|
|
function! railmoon#oscan#record#create( header, tag_list, data, ... )
|
|
let new_record = copy( s:record )
|
|
let s:record_id += 1
|
|
|
|
let new_record.header = a:header
|
|
let new_record.tag_list = a:tag_list
|
|
let new_record.data = a:data
|
|
let new_record.id = s:record_id
|
|
|
|
if empty(a:000)
|
|
let new_record.additional_info = ''
|
|
else
|
|
let new_record.additional_info = a:1
|
|
endif
|
|
|
|
return new_record
|
|
endfunction
|
|
|
|
let s:record = {}
|
|
let s:record_id = 0
|
|
|
|
" -
|
|
" [ object method ]
|
|
" Object: record
|
|
" Name: has_tag
|
|
" Purpose: determine tag presence
|
|
" [ parameters ]
|
|
" tag tag
|
|
" -
|
|
function! s:record.has_tag( tag )
|
|
if a:tag[0] == '~'
|
|
for l:tag in self.tag_list
|
|
if l:tag =~ '\c'.a:tag[1 : ]
|
|
return 1
|
|
endif
|
|
endfor
|
|
|
|
return 0
|
|
endif
|
|
|
|
for l:tag in self.tag_list
|
|
if l:tag ==? a:tag
|
|
return 1
|
|
endif
|
|
endfor
|
|
|
|
return 0
|
|
endfunction
|
|
|
|
" -
|
|
" [ object method ]
|
|
" Object: record
|
|
" Name: match_by_tags
|
|
" Purpose: determine if record match with given tags
|
|
" [ parameters ]
|
|
" tags list of tags
|
|
" -
|
|
function! s:record.match_by_tags( tags )
|
|
for l:tag in a:tags
|
|
if ! self.has_tag( l:tag )
|
|
return 0
|
|
endif
|
|
endfor
|
|
|
|
return 1
|
|
endfunction
|
|
|
|
" -
|
|
" [ object method ]
|
|
" Object: record
|
|
" Name: other_tags
|
|
" Purpose: find tags that not in list but in that record
|
|
" [ parameters ]
|
|
" tags1 list of tags
|
|
" tags2 list of tags
|
|
" -
|
|
function! s:record.other_tags( tags1, tags2 )
|
|
let result = []
|
|
|
|
for l:tag in self.tag_list
|
|
let string_tag = l:tag.''
|
|
|
|
if index(a:tags1, string_tag) == -1 &&
|
|
\index(a:tags2, string_tag) == -1
|
|
call add(result, string_tag)
|
|
endif
|
|
endfor
|
|
|
|
return result
|
|
endfunction
|
|
|
|
" -
|
|
" [ testing ]
|
|
" -
|
|
|
|
function! s:create_test_record1()
|
|
return railmoon#oscan#record#create( ['createTestRecord1'], [ 'edit', 'gui', 'form' ], 23 )
|
|
endfunction
|
|
|
|
function! s:create_test_record2()
|
|
return railmoon#oscan#record#create( ['createTestRecord2'], [ 'simple', 'gui' ], 26 )
|
|
endfunction
|
|
|
|
let s:unit_test = railmoon#unit_test#create('oscan#record')
|
|
|
|
function! s:unit_test.test_record()
|
|
call self.assert_equal(s:create_test_record1().match_by_tags(['edit']), 1)
|
|
call self.assert_equal(s:create_test_record1().match_by_tags(['~dit']), 1)
|
|
call self.assert_equal(s:create_test_record1().match_by_tags(['gui']), 1)
|
|
call self.assert_equal(s:create_test_record1().match_by_tags(['form']), 1)
|
|
call self.assert_equal(s:create_test_record1().match_by_tags(['form', 'gui']), 1)
|
|
call self.assert_equal(s:create_test_record1().match_by_tags(['edit', 'form', 'gui']), 1)
|
|
call self.assert_equal(! s:create_test_record1().match_by_tags(['simple', 'gui']), 1)
|
|
call self.assert_equal(! s:create_test_record1().match_by_tags(['edit', 'fronmt', 'gui']), 1)
|
|
call self.assert_equal(s:create_test_record1().other_tags(['edit', 'gui'], []), ['form'])
|
|
call self.assert_equal(s:create_test_record1().other_tags(['gui'], []), ['edit', 'form'])
|
|
call self.assert_equal(s:create_test_record1().other_tags([''], []), ['edit', 'gui', 'form'])
|
|
call self.assert_equal(s:create_test_record1().other_tags(['edit', 'gui', 'form'], []), [])
|
|
endfunction
|
|
|
|
call s:unit_test.run()
|
|
|