Class: Purple::PurpleFile

Inherits:
Object
  • Object
show all
Defined in:
lib/purple.rb

Constant Summary collapse

PROPS =
'longname|version|major|minor|identifier|description|url'

Class Method Summary collapse

Class Method Details

.__main(line, pkg) ⇒ Object



158
159
160
161
162
163
164
# File 'lib/purple.rb', line 158

def self.__main line, pkg
    case line
    when /^package/
        pkg.name = line.gsub(/^package\s+/, '')
        return 'package'
    end
end

.__package(line, pkg) ⇒ Object



167
168
169
170
171
172
173
174
# File 'lib/purple.rb', line 167

def self.__package line, pkg
    if (md = Regexp.new("^(#{PROPS})\s+(.*)$").match line)
        pkg.method("#{md[1]}=").call md[2]
    else
        self.infer_properties pkg if line == 'infer'
    end
    nil
end

.infer_properties(pkg) ⇒ Object



176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
# File 'lib/purple.rb', line 176

def self.infer_properties pkg
    if pkg.url
        if pkg.url =~ /prdownloads.sourceforge.net/
            md = Regexp.new 'http://prdownloads.sourceforge.net/([^/])/(.*?)tar.(gz|bz2)?download'
            pkg.long_name = md[2]
        end
    end

    pkg.long_name = File.basename Dir.pwd if not pkg.long_name

    md = /([a-z\-]+)-([0-9\-\.]+.*)/.match pkg.long_name
    pkg.version = md[2] if not pkg.version

    md = /^([0-9]+)\.([0-9]+)/.match pkg.version
    pkg.major = md[1] if not pkg.major
    pkg.minor = md[2] if not pkg.minor

end

.parse(str) ⇒ Object



142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# File 'lib/purple.rb', line 142

def self.parse str
    pkg = PackageInfo.new
    receiver_stack = ['main']
    str.split(/(\r\n|\r|\n)+/).each do |line|
        r = self.method("__#{receiver_stack.last}").call line.strip, pkg
        case r
        when -1
            receiver_stack.pop
        when nil
        else
            receiver_stack.push r
        end
    end
    pkg
end