ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/URL/URLclass.pm
Revision: 1.2
Committed: Fri Nov 12 16:26:35 1999 UTC (25 years, 6 months ago) by williamc
Content type: text/plain
Branch: MAIN
Changes since 1.1: +1 -1 lines
Log Message:
sort vars in alphabetical order for full filenames

File Contents

# User Rev Content
1 williamc 1.1 #
2     # URLclass.pm
3     #
4     # Originally Written by Christopher Williams
5     #
6     # Description
7     #
8     # Interface
9     # ---------
10     # new(url) : A new URLclass object
11     # origurl() : retunr the original url without any expansion
12     # url() : return the full url name with all expansion
13     # expandurl(URLbase) : expand the url to include the given base
14     # file() : return the filename from the end of the path
15     # param(var) : return the value of a url parameter
16     #
17     # -- specialised use methods
18     # type() : get/set the url type
19     # vars() : get/set the vars hash
20     # base(base) : push a base into the url path if it dosnt already mactch
21     # transfervars(varhash) : transfer any variables from varhash into vars
22     # only if they do not already exist
23    
24     package URL::URLclass;
25     require 5.004;
26    
27     sub new {
28     my $class=shift;
29     $self={};
30     bless $self, $class;
31     $self->{vars}={};
32     $self->{origurl}=shift;
33     $self->_url($self->{origurl});
34     return $self;
35     }
36    
37     sub origurl {
38     my $self=shift;
39     return $self->{origurl};
40     }
41    
42    
43     sub type {
44     my $self=shift;
45     @_?$self->{type}=shift
46     :$self->{type};
47     }
48    
49     sub vars {
50     my $self=shift;
51     @_?$self->{vars}=shift
52     :$self->{vars};
53     }
54    
55     sub expandurl {
56     my $self=shift;
57     my $base=shift;
58    
59     $self->{vars}={};
60     $self->_url($self->{origurl}); # reset the current url;
61     $self->transfervars($base->cmds());
62     $self->base($base->base());
63     }
64    
65     sub base {
66     my $self=shift;
67     if ( @_ ) {
68     my $server=shift;
69     if ( ($server ne "") && ($self->{server}!~/\/\//) &&
70     ($self->{server}!~/$server/) ) {
71     # only set if not already in there
72     $self->{server}=$server."/".$self->{server};
73     }
74     }
75     return $self->{server};
76     }
77    
78     sub url {
79     my $self=shift;
80    
81     my $vars=$self->_vartostring();
82     my $fullurl=$self->type()."://".$self->{server}.
83     (($vars ne "")?"\?".$vars:"");
84     return $fullurl;
85     }
86    
87     sub transfervars {
88     my $self=shift;
89     my $basevars=shift;
90    
91     foreach $key ( keys %$basevars ) {
92     if ( ! exists $self->{vars}{$key} ) {
93     $self->{vars}{$key}=$$basevars{$key};
94     }
95     }
96     }
97    
98     sub file {
99     my $self=shift;
100     my $file;
101    
102     if ( $self->{server}=~/\// ) {
103     ($file=$self->{server})=~s/.*\///g;
104     }
105     else {
106     $file=$self->{server};
107     }
108     return $file;
109     }
110    
111     sub param {
112     my $self=shift;
113     my $param=shift;
114    
115     $self->{vars}{'param'};
116     }
117    
118     #
119     # --- Support Routines
120     #
121     sub _vartostring {
122     my $self=shift;
123    
124     my $string="";
125 williamc 1.2 foreach $key ( sort(keys %{$self->{vars}}) ) {
126 williamc 1.1 $string=$string.(($string eq "")?"":"\&").$key."=".$self->{vars}{$key};
127     }
128     return $string;
129     }
130    
131     sub _splitvarstring {
132     my $self=shift;
133     my $varstring=shift;
134    
135     my @pairs=split /\&/, $varstring;
136     foreach $pair ( @pairs ) {
137     my ($var,$val)= split /=/, $pair;
138     $self->{vars}{$var}=$val;
139     }
140     }
141    
142     sub _url {
143     my $self=shift;
144     my $url=shift;
145     my @rest;
146    
147     ($self->{type}, @rest)= split ":", $url;
148     my $tmp=join ':' ,@rest;
149     ($self->{server}, @varsarray)=split /\?/, $tmp;
150     my $varstring=join '?' ,@varsarray;
151     $self->{server}=~s/^\/\///;
152     if ( $varstring ) { $self->_splitvarstring($varstring);}
153     }