ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/URL/URLclass.pm
Revision: 1.6
Committed: Fri Nov 12 17:09:24 1999 UTC (25 years, 6 months ago) by williamc
Content type: text/plain
Branch: MAIN
Changes since 1.5: +1 -1 lines
Log Message:
Debug base method

File Contents

# Content
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 # base() : return the basename of the path
16 # param(var) : return the value of a url parameter
17 #
18 # -- specialised use methods
19 # type() : get/set the url type
20 # vars() : get/set the vars hash
21 # base(base) : push a base into the url path if it dosnt already match
22 # transfervars(varhash) : transfer any variables from varhash into vars
23 # only if they do not already exist
24
25 package URL::URLclass;
26 require 5.004;
27
28 sub new {
29 my $class=shift;
30 $self={};
31 bless $self, $class;
32 $self->{vars}={};
33 $self->{origurl}=shift;
34 $self->_url($self->{origurl});
35 return $self;
36 }
37
38 sub origurl {
39 my $self=shift;
40 return $self->{origurl};
41 }
42
43
44 sub type {
45 my $self=shift;
46 @_?$self->{type}=shift
47 :$self->{type};
48 }
49
50 sub vars {
51 my $self=shift;
52 @_?$self->{vars}=shift
53 :$self->{vars};
54 }
55
56 sub expandurl {
57 my $self=shift;
58 my $base=shift;
59
60 $self->{vars}={};
61 $self->_url($self->{origurl}); # reset the current url;
62 $self->transfervars($base->cmds());
63 $self->_base($base->base());
64 }
65
66
67 sub url {
68 my $self=shift;
69
70 my $vars=$self->_vartostring();
71 my $fullurl=$self->type()."://".$self->{server}.
72 (($vars ne "")?"\?".$vars:"");
73 return $fullurl;
74 }
75
76 sub transfervars {
77 my $self=shift;
78 my $basevars=shift;
79
80 foreach $key ( keys %$basevars ) {
81 if ( ! exists $self->{vars}{$key} ) {
82 $self->{vars}{$key}=$$basevars{$key};
83 }
84 }
85 }
86
87 sub base {
88 my $self=shift;
89 my $base="";
90 if ( $self->{server}=~/\// ) {
91 ($base=$self->{server})=~s/(.*)\/.*/$1/;
92 }
93 return $base;
94 }
95
96 sub file {
97 my $self=shift;
98 my $file;
99
100 if ( $self->{server}=~/\// ) {
101 ($file=$self->{server})=~s/.*\///g;
102 }
103 else {
104 $file=$self->{server};
105 }
106 return $file;
107 }
108
109 sub param {
110 my $self=shift;
111 my $param=shift;
112
113 $self->{vars}{$param};
114 }
115
116 #
117 # --- Support Routines
118 #
119
120 # push a base name into the url string
121 sub _base {
122 my $self=shift;
123 if ( @_ ) {
124 my $server=shift;
125 if ( ($server ne "") && ($self->{server}!~/\/\//) &&
126 ($self->{server}!~/$server/) ) {
127 # only set if not already in there
128 $self->{server}=$server."/".$self->{server};
129 }
130 }
131 return $self->{server};
132 }
133
134 sub _vartostring {
135 my $self=shift;
136
137 my $string="";
138 foreach $key ( sort(keys %{$self->{vars}}) ) {
139 $string=$string.(($string eq "")?"":"\&").$key."=".$self->{vars}{$key};
140 }
141 return $string;
142 }
143
144 sub _splitvarstring {
145 my $self=shift;
146 my $varstring=shift;
147
148 my @pairs=split /\&/, $varstring;
149 foreach $pair ( @pairs ) {
150 my ($var,$val)= split /=/, $pair;
151 $self->{vars}{$var}=$val;
152 }
153 }
154
155 sub _url {
156 my $self=shift;
157 my $url=shift;
158 my @rest;
159
160 ($self->{type}, @rest)= split ":", $url;
161 my $tmp=join ':' ,@rest;
162 ($self->{server}, @varsarray)=split /\?/, $tmp;
163 my $varstring=join '?' ,@varsarray;
164 $self->{server}=~s/^\/\///;
165 if ( $varstring ) { $self->_splitvarstring($varstring);}
166 }