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

# 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 williamc 1.4 # base() : return the basename of the path
16 williamc 1.1 # 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 williamc 1.4 # base(base) : push a base into the url path if it dosnt already match
22 williamc 1.1 # 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 williamc 1.4 $self->_base($base->base());
64 williamc 1.1 }
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 williamc 1.4 sub base {
88     my $self=shift;
89 williamc 1.5 my $base="";
90     if ( $self->{server}=~/\// ) {
91 williamc 1.6 ($base=$self->{server})=~s/(.*)\/.*/$1/;
92 williamc 1.5 }
93 williamc 1.4 return $base;
94     }
95    
96 williamc 1.1 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 williamc 1.3 $self->{vars}{$param};
114 williamc 1.1 }
115    
116     #
117     # --- Support Routines
118     #
119 williamc 1.4
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 williamc 1.1 sub _vartostring {
135     my $self=shift;
136    
137     my $string="";
138 williamc 1.2 foreach $key ( sort(keys %{$self->{vars}}) ) {
139 williamc 1.1 $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     }