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



187
188
189
190
191
192
193
# File 'lib/purple.rb', line 187

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

.__package(line, pkg) ⇒ Object



196
197
198
199
200
201
202
203
# File 'lib/purple.rb', line 196

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



205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
# File 'lib/purple.rb', line 205

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



171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
# File 'lib/purple.rb', line 171

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