cookiemonster 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .rvmrc
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in cookiemonster.gemspec
4
+ gemspec
@@ -0,0 +1,5 @@
1
+ # Cookie Monster
2
+
3
+ A library for working with Set-Cookie data in Ruby
4
+
5
+ # WARNING - Very alpha! (2012-01-16)
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << 'spec'
6
+ t.pattern = "spec/**/*_spec.rb"
7
+ end
8
+
9
+ task :default => :test
10
+
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "cookiemonster/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "cookiemonster"
7
+ s.version = CookieMonster::VERSION
8
+ s.authors = ["Matt Southerden"]
9
+ s.email = ["matt@localbubble.com"]
10
+ s.homepage = "http://github.com/mattsoutherden/cookiemonster"
11
+ s.summary = %q{Let CookieMonster munch your cookies}
12
+ s.description = %q{A library for working with Set-Cookie data in Ruby}
13
+
14
+ s.rubyforge_project = "cookiemonster"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ s.add_development_dependency "minitest"
23
+
24
+ # s.add_runtime_dependency "rest-client"
25
+ end
@@ -0,0 +1,70 @@
1
+ require "cookiemonster/version"
2
+ require 'time'
3
+
4
+ module CookieMonster
5
+
6
+ def self.parse(set_cookie_string)
7
+ Cookie.new self.parse_hash(set_cookie_string)
8
+ end
9
+
10
+ def self.parse_hash(set_cookie_string)
11
+ hash = set_cookie_string.split(/; ?/).inject({}) do |result, field|
12
+ field_name, field_value = field.split('=', 2)
13
+ result[field_name] = field_value
14
+ result
15
+ end
16
+
17
+ name, value = hash.shift
18
+
19
+ hash[:name] = name
20
+ hash[:value] = value
21
+
22
+ hash = hash.inject({}) do |options, (key, value)|
23
+ options[(key.downcase.to_sym rescue key) || key] = value
24
+ options
25
+ end
26
+
27
+ hash
28
+ end
29
+
30
+ class Cookie
31
+
32
+ attr_reader :name
33
+ attr_reader :value
34
+ attr_reader :path
35
+ attr_reader :domain
36
+ attr_reader :expires
37
+ attr_reader :http_only
38
+ attr_reader :secure
39
+ attr_reader :session
40
+
41
+ alias :http_only? :http_only
42
+ alias :secure? :secure
43
+ alias :session? :session
44
+
45
+ def initialize(args)
46
+ @name = args[:name]
47
+ @value = args[:value]
48
+ @path = args[:path]
49
+ @domain = args[:domain]
50
+ @expires = args[:expires] ? parse_expiry(args[:expires]) : nil
51
+ @http_only = args.has_key?(:httponly) ? true : false
52
+ @secure = args.has_key?(:secure) ? true : false
53
+ @session = expires.nil?
54
+ end
55
+
56
+ def expired?
57
+ return false unless expires
58
+ Time.now > expires
59
+ end
60
+
61
+ protected
62
+
63
+ def parse_expiry(str)
64
+ return Time.parse(str)
65
+ rescue
66
+ nil
67
+ end
68
+ end
69
+
70
+ end
@@ -0,0 +1,3 @@
1
+ module CookieMonster
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,88 @@
1
+ require "spec_helper"
2
+
3
+ describe 'Parsing Set-Cookie' do
4
+
5
+ describe 'basic parsing' do
6
+
7
+ def parse(set_cookie)
8
+ CookieMonster.parse(set_cookie)
9
+ end
10
+
11
+ it "extracts cookie name" do
12
+ cookie = parse('foo=bar')
13
+ cookie.name.must_equal 'foo'
14
+
15
+ cookie = parse('baz=quux')
16
+ cookie.name.must_equal 'baz'
17
+ end
18
+
19
+ it "extracts cookie value" do
20
+ cookie = parse('foo=bar')
21
+ cookie.value.must_equal 'bar'
22
+
23
+ cookie = parse('baz=quux')
24
+ cookie.value.must_equal 'quux'
25
+ end
26
+
27
+ it "extracts path" do
28
+ cookie = parse('foo=bar; path=/')
29
+ cookie.path.must_equal '/'
30
+
31
+ cookie = parse('foo=bar; Path=/foo')
32
+ cookie.path.must_equal '/foo'
33
+ end
34
+
35
+ it "extracts expiry time" do
36
+ cookie = parse('foo=bar; expires=Thu, 19-Dec-2013 17:24:17 GMT')
37
+ cookie.expires.must_equal Time.utc(2013, 12, 19, 17, 24, 17)
38
+ end
39
+
40
+ it "should be expired when expires in past" do
41
+ yesterday = (Date.today - 1).httpdate
42
+ cookie = parse("foo=bar; expires=#{yesterday}")
43
+ assert cookie.expired?
44
+ end
45
+
46
+ it "should not be expired when expires in future" do
47
+ tomorrow = (Date.today + 1).httpdate
48
+ cookie = parse("foo=bar; expires=#{tomorrow}")
49
+ assert ! cookie.expired?
50
+ end
51
+
52
+ it "should not be expired when expires not set" do
53
+ cookie = parse('foo=bar')
54
+ assert ! cookie.expired?
55
+ end
56
+
57
+ it "sets httponly" do
58
+ cookie = parse('foo=bar; httponly')
59
+ assert cookie.http_only?
60
+ end
61
+
62
+ it "sets secure" do
63
+ cookie = parse('foo=bar; secure')
64
+ assert cookie.secure?
65
+ end
66
+
67
+ it "sets domain" do
68
+ cookie = parse('foo=bar; domain=foo.com')
69
+ cookie.domain.must_equal 'foo.com'
70
+ end
71
+
72
+ it "creates a session cookie when no expires is set" do
73
+ cookie = parse('foo=bar')
74
+ assert cookie.session?
75
+ end
76
+
77
+ it "creates a session cookie when expires parsing fails" do
78
+ cookie = parse('foo=bar; expires=Not a date format GMT')
79
+ assert cookie.session?
80
+ end
81
+
82
+ end
83
+
84
+ describe 'multiple cookies' do
85
+
86
+ end
87
+
88
+ end
@@ -0,0 +1,4 @@
1
+ require "minitest/autorun"
2
+ # require "purdytest"
3
+
4
+ require 'cookiemonster'
metadata ADDED
@@ -0,0 +1,67 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cookiemonster
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Matt Southerden
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-16 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: minitest
16
+ requirement: &2152310760 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *2152310760
25
+ description: A library for working with Set-Cookie data in Ruby
26
+ email:
27
+ - matt@localbubble.com
28
+ executables: []
29
+ extensions: []
30
+ extra_rdoc_files: []
31
+ files:
32
+ - .gitignore
33
+ - Gemfile
34
+ - README.md
35
+ - Rakefile
36
+ - cookiemonster.gemspec
37
+ - lib/cookiemonster.rb
38
+ - lib/cookiemonster/version.rb
39
+ - spec/lib/raw_parse_spec.rb
40
+ - spec/spec_helper.rb
41
+ homepage: http://github.com/mattsoutherden/cookiemonster
42
+ licenses: []
43
+ post_install_message:
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ none: false
49
+ requirements:
50
+ - - ! '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ! '>='
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ requirements: []
60
+ rubyforge_project: cookiemonster
61
+ rubygems_version: 1.8.10
62
+ signing_key:
63
+ specification_version: 3
64
+ summary: Let CookieMonster munch your cookies
65
+ test_files:
66
+ - spec/lib/raw_parse_spec.rb
67
+ - spec/spec_helper.rb