ezproxy 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in ezproxy.gemspec
4
+ gemspec
data/README ADDED
@@ -0,0 +1,30 @@
1
+ # EZproxy
2
+
3
+ This is a general purpose gem for working with OCLC's EZproxy
4
+
5
+ ## Supported File Formats
6
+
7
+ The following formats are currently supported:
8
+
9
+ * %h
10
+ * %l
11
+ * %u
12
+ * %t
13
+ * %r
14
+ * %s
15
+ * %b
16
+ * %U
17
+ * %{ezproxy-session}i
18
+
19
+ ## Examples
20
+
21
+ require 'ezproxy'
22
+
23
+ @log = EZproxy::Log.new(:format => '%h %{ezproxy-session}i %u %t "%r" %s %b')
24
+ @log.parse_file('ezp201104.log') do |line|
25
+ puts line.inspect
26
+ end
27
+
28
+ Will output something like the following for each line
29
+
30
+ {"remote_host"=>"127.0.0.1", "ezproxy_session"=>"-", "username"=>"-", "happened_at"=>"19/Apr/2011:13:31:38 -0500", "http_request"=>"GET https://localhost:443/favicon.ico HTTP/1.1", "http_status"=>"404", "http_bytes"=>"0"}
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "ezproxy/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "ezproxy"
7
+ s.version = EZproxy::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Brice Stacey"]
10
+ s.email = ["bricestacey@gmail.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{General use library for OCLC's EZproxy}
13
+ s.description = %q{General use library for OCLC's EZproxy}
14
+
15
+ s.rubyforge_project = "ezproxy"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_development_dependency('rspec')
23
+ end
@@ -0,0 +1,6 @@
1
+ require 'ezproxy/log'
2
+ require 'ezproxy/log/format'
3
+
4
+ module EZproxy
5
+ # Your code goes here...
6
+ end
@@ -0,0 +1,32 @@
1
+ module EZproxy
2
+ class Log
3
+ attr_accessor :format
4
+
5
+ def initialize(attributes)
6
+ @format = EZproxy::Log::Format.new(attributes[:format])
7
+ end
8
+
9
+ # Load and parse `filename`
10
+ def parse_file(filename)
11
+ matcher = @format.to_regex
12
+ defined_attributes = @format.defined_attributes
13
+
14
+ File.open(filename) do |file|
15
+ file.each_line do |line|
16
+ m = line.match(matcher).to_a
17
+
18
+ r = {}
19
+ m[1..m.count].zip(defined_attributes).each do |match, attr|
20
+ r[attr[:label]] = match
21
+ end
22
+
23
+ if block_given?
24
+ yield r
25
+ else
26
+ r
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,63 @@
1
+ module EZproxy
2
+ class Log
3
+ class Format
4
+ attr_accessor :format
5
+
6
+ # Array containing each log format
7
+ # An attribute must contain a :token, :regexp, and :label.
8
+ # Optional keys include :post
9
+ ATTRIBUTES = [
10
+ {:token => '%h',
11
+ :regexp => /([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})/,
12
+ :label => 'remote_host'},
13
+ {:token => '%l',
14
+ :regexp => /(-)/,
15
+ :label => nil},
16
+ {:token => '%u',
17
+ :regexp => /(.*)/,
18
+ :label => 'username'},
19
+ {:token => '%t',
20
+ :regexp => /\[(.*)\]/,
21
+ :post => Proc.new {|x| x[11] = ' '},
22
+ :label => 'happened_at'},
23
+ {:token => '%r',
24
+ :regexp => /(.*)/,
25
+ :label => 'http_request'},
26
+ {:token => '%s',
27
+ :regexp => /(\d+)/,
28
+ :label => 'http_status'},
29
+ {:token => '%b',
30
+ :regexp => /(\d+)/,
31
+ :label => 'http_bytes'},
32
+ {:token => '%U',
33
+ :regexp => /([^ ]+)/,
34
+ :label => 'http_url'},
35
+ {:token => '%{ezproxy-session}i',
36
+ :regexp => /(.*)/,
37
+ :label => 'ezproxy_session'}
38
+ ]
39
+
40
+ def initialize(s)
41
+ @format = s
42
+ end
43
+
44
+ def to_regex
45
+ regex = @format.clone
46
+ ATTRIBUTES.each do |regexp|
47
+ regex.gsub!(regexp[:token], regexp[:regexp].source)
48
+ end
49
+
50
+ Regexp.compile(regex)
51
+ end
52
+
53
+ def defined_attributes
54
+ l = []
55
+ ATTRIBUTES.each do |attr|
56
+ l[@format.index(attr[:token])] = attr if @format.include? attr[:token]
57
+ end
58
+
59
+ l.compact
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,3 @@
1
+ module EZproxy
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe EZproxy::Log::Format do
4
+ it "should have a format accessor" do
5
+ @format = EZproxy::Log::Format.new('%h %{ezproxy-session}i %u %t "%r" %s %b')
6
+ @format.format.should == '%h %{ezproxy-session}i %u %t "%r" %s %b'
7
+
8
+ @format.format = '%h %u %t "%r" %s %b'
9
+ @format.format.should == '%h %u %t "%r" %s %b'
10
+ end
11
+
12
+ it "should convert to a regular expression" do
13
+ @format = EZproxy::Log::Format.new('%h %{ezproxy-session}i %u %t "%r" %s %b')
14
+ @format.to_regex.class.should == Regexp
15
+ end
16
+
17
+ it "should properly identify which match is which attribute" do
18
+ @format = EZproxy::Log::Format.new('%h %{ezproxy-session}i %u %t "%r" %s %b')
19
+ defined_attributes = @format.defined_attributes
20
+
21
+ defined_attributes[0][:label].should == 'remote_host'
22
+ defined_attributes[1][:label].should == 'ezproxy_session'
23
+ defined_attributes[2][:label].should == 'username'
24
+ defined_attributes[3][:label].should == 'happened_at'
25
+ defined_attributes[4][:label].should == 'http_request'
26
+ defined_attributes[5][:label].should == 'http_status'
27
+ defined_attributes[6][:label].should == 'http_bytes'
28
+ end
29
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe EZproxy::Log do
4
+ it "should load a log from a file" do
5
+ @log = EZproxy::Log.new(:format => '%h %{ezproxy-session}i %u %t "%r" %s %b')
6
+
7
+ @log.parse_file('spec/ezproxy/test.log') do |line|
8
+ line['remote_host'].should == '127.0.0.1'
9
+ line['ezproxy_session'].should == 'itiFqehv7PMNRYl'
10
+ line['username'].should == 'brice'
11
+ line['happened_at'].should == '18/May/2009:12:55:27 -0500'
12
+ line['http_request'].should == 'GET http://localhost:80/connect?session=sitiFqehv7PMNRYl&url=http://localhost/admin HTTP/1.1'
13
+ line['http_status'].should == "302"
14
+ line['http_bytes'].should == "0"
15
+ end
16
+ end
17
+ end
@@ -0,0 +1 @@
1
+ 127.0.0.1 itiFqehv7PMNRYl brice [18/May/2009:12:55:27 -0500] "GET http://localhost:80/connect?session=sitiFqehv7PMNRYl&url=http://localhost/admin HTTP/1.1" 302 0
@@ -0,0 +1,9 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+
4
+ require 'ezproxy'
5
+ require 'rspec'
6
+
7
+ Rspec.configure do |config|
8
+ config.mock_with :rspec
9
+ end
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ezproxy
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Brice Stacey
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-04-19 00:00:00 -04:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rspec
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "0"
25
+ type: :development
26
+ version_requirements: *id001
27
+ description: General use library for OCLC's EZproxy
28
+ email:
29
+ - bricestacey@gmail.com
30
+ executables: []
31
+
32
+ extensions: []
33
+
34
+ extra_rdoc_files: []
35
+
36
+ files:
37
+ - .gitignore
38
+ - Gemfile
39
+ - README
40
+ - Rakefile
41
+ - ezproxy.gemspec
42
+ - lib/ezproxy.rb
43
+ - lib/ezproxy/log.rb
44
+ - lib/ezproxy/log/format.rb
45
+ - lib/ezproxy/version.rb
46
+ - spec/ezproxy/log/format_spec.rb
47
+ - spec/ezproxy/log_spec.rb
48
+ - spec/ezproxy/test.log
49
+ - spec/spec_helper.rb
50
+ has_rdoc: true
51
+ homepage: ""
52
+ licenses: []
53
+
54
+ post_install_message:
55
+ rdoc_options: []
56
+
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: "0"
65
+ required_rubygems_version: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: "0"
71
+ requirements: []
72
+
73
+ rubyforge_project: ezproxy
74
+ rubygems_version: 1.6.2
75
+ signing_key:
76
+ specification_version: 3
77
+ summary: General use library for OCLC's EZproxy
78
+ test_files:
79
+ - spec/ezproxy/log/format_spec.rb
80
+ - spec/ezproxy/log_spec.rb
81
+ - spec/ezproxy/test.log
82
+ - spec/spec_helper.rb