dotar/vim/autoload/railmoon/oscan/record.vim
2011-11-17 16:00:49 -06:00

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()