ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/src/URL/URLclass.pm
Revision: 1.10
Committed: Fri Dec 17 08:46:09 1999 UTC (25 years, 4 months ago) by williamc
Content type: text/plain
Branch: MAIN
Changes since 1.9: +1 -1 lines
Log Message:
Working Unit

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