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

# 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     my $base;
90     ($base=$self->{server})=~s/(.*\/)/$1/;
91     return $base;
92     }
93    
94 williamc 1.1 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 williamc 1.3 $self->{vars}{$param};
112 williamc 1.1 }
113    
114     #
115     # --- Support Routines
116     #
117 williamc 1.4
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 williamc 1.1 sub _vartostring {
133     my $self=shift;
134    
135     my $string="";
136 williamc 1.2 foreach $key ( sort(keys %{$self->{vars}}) ) {
137 williamc 1.1 $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     }