OH-81 Simplify ohcount.so loading path
[ohcount] / ruby / ohcount.rb
1 # ohcount.rb written by Mitchell Foral. mitchell<att>caladbolg.net.
2 # See COPYING for license information.
3 # Ohcount module tweaked for use by Ohloh.
4
5 $: << File.expand_path(File.dirname(__FILE__))
6 $: << "#{File.expand_path(File.dirname(__FILE__))}/#{`#{File.dirname(__FILE__)}/print_arch`.strip}"
7
8 require 'ohcount.so'
9
10 module Ohcount
11   class SourceFile
12     def file_location=(value) set_diskpath(value) end
13     def file_location() diskpath() end
14     def filenames=(value) set_filenames(value) end
15     def contents() get_contents() end
16     def polyglot() get_language() end
17
18     def language_breakdowns
19       list = get_parsed_language_list()
20       return array_from_list(list, :pl)
21     end
22
23     def language_breakdown(language)
24       return language_breakdowns().find { |lb| lb.name == language.to_s }
25     end
26
27     def licenses
28       list = get_license_list()
29       array = array_from_list(list, :lic)
30       return array.map! { |l| l.name }
31     end
32
33     def languages
34       return language_breakdowns().collect { |lb| lb.name }
35     end
36
37     def loc_list
38       list = get_loc_list()
39       return array_from_list(list, :loc)
40     end
41
42     def diff(to)
43       list = _diff(to)
44       ret = array_from_list(list, :delta)
45       class << ret
46         def loc_deltas() self end
47       end
48       return ret
49     end
50
51     def each
52       filenames.each { |f| yield f }
53     end
54
55     private
56
57     def array_from_list(list, method)
58       array = Array.new
59       iter = list.head
60       while (iter)
61         array << iter.send(method)
62         iter = iter.next
63       end
64       return array
65     end
66   end
67
68   class SourceFileList
69     def each_source_file
70       iter = self.head
71       while (iter)
72         yield iter.sf if iter.sf.polyglot
73         iter = iter.next
74       end
75     end
76
77                 # this should yield each filename, not an sf object
78                 def each
79       iter = self.head
80       while (iter)
81         yield iter.sf.filename if iter.sf
82         iter = iter.next
83       end
84                 end
85
86     def size
87       count = 0
88       iter = self.head
89       while (iter)
90         count += 1
91         iter = iter.next
92       end
93       return count
94     end
95   end
96
97   class Detector
98     def self.binary_filename?(filename)
99       return Ohcount.ohcount_is_binary_filename(filename) == 1
100     end
101   end
102 end