Sha256: 9d1a61c8e4c38b787bb3cfe11e1e27d620ee97f954e336597d1b7cee20d0f10d

Contents?: true

Size: 1.09 KB

Versions: 1

Compression:

Stored size: 1.09 KB

Contents

require "fileutils"
require 'uri'
require "open-uri"
require "rubygems"
require "rio"

module AndParcel
	class Catalog
		attr_reader :nick, :path
		
		def initialize(path)
			@path=path
			@nick=File.basename(path, '.json')
		end
	end
	
	class CatalogSet
		def initialize(root)
			@root=root
		end
		
		def size
			roster.size
		end
	
		def roster_file
			File.join(@root, 'catalogs.json')
		end
		
		def roster
			fn=roster_file
			
			if File.exists?(fn)
				return(JSON.parse(open(fn) {|f| f.read}))
			end
			
			{}
		end
		
		def add(name, url)
			roster_hash=roster

			roster_hash[name]={'url'=>url}

			open(roster_file, "w") {|f| f.puts(roster_hash.to_json)}
		end
		
		def remove(name)
			roster_hash=roster

			roster_hash.delete(name)

			open(roster_file, "w") {|f| f.puts(roster_hash.to_json)}
		end
		
		def names
			roster.keys
		end
		
		def find(name)
			roster.each_value do |cat|
				packages=JSON.parse(open(cat['url']) {|f| f.read})
				package=packages['parcels'][name]

				if package
					uri=URI.parse cat['url']
					
					return(uri+package['path'])
				end
			end
			
			nil
		end
	end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
andparcel-0.1.0 lib/andparcel/catalog.rb