Initial commit.
This commit is contained in:
138
vim/autoload/railmoon/oscan/record.vim
Executable file
138
vim/autoload/railmoon/oscan/record.vim
Executable file
@@ -0,0 +1,138 @@
|
||||
" 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()
|
||||
|
||||
Reference in New Issue
Block a user