ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/URL/URLclass.pm
Revision: 1.4
Committed: Fri Nov 12 16:59:17 1999 UTC (25 years, 6 months ago) by williamc
Content type: text/plain
Branch: MAIN
Changes since 1.3: +25 -14 lines
Log Message:
Addition of base method to return base part of the string

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 ($base=$self->{server})=~s/(.*\/)/$1/;
91 return $base;
92 }
93
94 sub file {
95 my $self=shift;
96 my $file;
97
98 if ( $self->{server}=~/\// ) {
99 ($file=$self->{server})=~s/.*\///g;
100 }
101 else {
102 $file=$self->{server};
103 }
104 return $file;
105 }
106
107 sub param {
108 my $self=shift;
109 my $param=shift;
110
111 $self->{vars}{$param};
112 }
113
114 #
115 # --- Support Routines
116 #
117
118 # push a base name into the url string
119 sub _base {
120 my $self=shift;
121 if ( @_ ) {
122 my $server=shift;
123 if ( ($server ne "") && ($self->{server}!~/\/\//) &&
124 ($self->{server}!~/$server/) ) {
125 # only set if not already in there
126 $self->{server}=$server."/".$self->{server};
127 }
128 }
129 return $self->{server};
130 }
131
132 sub _vartostring {
133 my $self=shift;
134
135 my $string="";
136 foreach $key ( sort(keys %{$self->{vars}}) ) {
137 $string=$string.(($string eq "")?"":"\&").$key."=".$self->{vars}{$key};
138 }
139 return $string;
140 }
141
142 sub _splitvarstring {
143 my $self=shift;
144 my $varstring=shift;
145
146 my @pairs=split /\&/, $varstring;
147 foreach $pair ( @pairs ) {
148 my ($var,$val)= split /=/, $pair;
149 $self->{vars}{$var}=$val;
150 }
151 }
152
153 sub _url {
154 my $self=shift;
155 my $url=shift;
156 my @rest;
157
158 ($self->{type}, @rest)= split ":", $url;
159 my $tmp=join ':' ,@rest;
160 ($self->{server}, @varsarray)=split /\?/, $tmp;
161 my $varstring=join '?' ,@varsarray;
162 $self->{server}=~s/^\/\///;
163 if ( $varstring ) { $self->_splitvarstring($varstring);}
164 }