ics_validator 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9094e99d026a2ca1cc6bacb08196e71b77c12413
4
- data.tar.gz: c323b4ff0934c548e092f8d03708ab85513a0e06
3
+ metadata.gz: 3249f96eb2cf709c4b6e9830d7d8a20aca8ed6cf
4
+ data.tar.gz: 2f246a81f10745def035c8d62efac59b01f70dd7
5
5
  SHA512:
6
- metadata.gz: b2e9ca885f5d02941cdf7e8cc37cd907fd5e81ad28e5a8c26a5b1115d034c388cdf0f26f1f8ed0200dbda261f46d4fc8e5522cb68e92da6028cafc754345253a
7
- data.tar.gz: e83811376c87f8fcbeb66d9150d247e51ea43b5a0d21a4e726aac3f400fbf2a07d72e0c75122bcdc4a3cad93bc56d5f0d3dd22e6ef1cd4333ff7b8f03615d788
6
+ metadata.gz: 0d6fedeea266e83773102b4136eda9a5eb237653d5dd3f6e59d9abd16b57e31db8c227a28c17a128364c787c1ade18695e02adddc75b2493362bb00b31887155
7
+ data.tar.gz: b998aadfa0fa5ebb46f3ccedaeefcbd87ff54e879722b6ddd6880352e16845d4f6360d70ee662f197c1a479bb336d9048d133a0a0865ad11058d14da5bc0c845
data/.coveralls.yml ADDED
@@ -0,0 +1 @@
1
+ repo_token: POVJtaPdxTb2L4HoSBmMc19qnPt2ZopOp
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in ics_validator.gemspec
4
4
  gemspec
5
+
6
+ gem 'coveralls', require: false
data/README.md CHANGED
@@ -1,12 +1,15 @@
1
1
  # IcsValidator
2
2
 
3
3
  [![Build Status](https://travis-ci.org/mattgillooly/ics_validator.png?branch=master)](https://travis-ci.org/mattgillooly/ics_validator)
4
+ [![Gem Version](https://badge.fury.io/rb/ics_validator.png)](http://badge.fury.io/rb/ics_validator)
5
+ [![Code Climate](https://codeclimate.com/github/mattgillooly/ics_validator.png)](https://codeclimate.com/github/mattgillooly/ics_validator)
6
+ [![Coverage Status](https://coveralls.io/repos/mattgillooly/ics_validator/badge.png)](https://coveralls.io/r/mattgillooly/ics_validator)
4
7
 
5
- Validate iCalendar feeds by URL, using icalvalid.cloudapp.net
8
+ Validate iCalendar content, using [http://icalvalid.cloudapp.net/](http://icalvalid.cloudapp.net/).
9
+ If this gem reports a failed validation, your best bet is to manually re-validate your content via the website for more actionable feedback.
6
10
 
7
- Used by [http://pvdtechevents.com](http://pvdtechevents.com) to validate its generated feed.
11
+ Used by [http://pvdtechevents.com/](http://pvdtechevents.com/) to validate its generated feed.
8
12
 
9
- TODO: Support validating iCalendar snippets and files.
10
13
 
11
14
  ## Installation
12
15
 
@@ -25,8 +28,15 @@ Or install it yourself as:
25
28
  ## Usage
26
29
 
27
30
  ```ruby
31
+ # validate an online feed by URL
28
32
  IcsValidator.valid_feed?("http://example.com/valid_feed.ics") # => true
29
33
  IcsValidator.valid_feed?("http://example.com/invalid_feed.ics") # => false
34
+
35
+ # validate a String snippet of iCalendar content
36
+ IcsValidator.valid_snippet?("BEGIN:VCALENDAR...")
37
+
38
+ # validate an iCalendar file
39
+ IcsValidator.valid_file?("path/to/local/feed.ics")
30
40
  ```
31
41
 
32
42
  ## Contributing
@@ -0,0 +1,26 @@
1
+ require 'nokogiri'
2
+
3
+ module IcsValidator
4
+
5
+ # Response from icalvalid.cloudapp.net API
6
+ #
7
+ class ApiResponse
8
+
9
+ def self.build(markup)
10
+ doc = Nokogiri::XML(markup)
11
+ new(doc.at('validationResults'))
12
+ end
13
+
14
+ def initialize(validation_results)
15
+ @validation_results = validation_results
16
+ end
17
+
18
+ def valid?
19
+ results = @validation_results.children.map{|c| c.attr(:result)}
20
+ results.compact.uniq == ['pass']
21
+ end
22
+
23
+ end
24
+ end
25
+
26
+
@@ -1,3 +1,3 @@
1
1
  module IcsValidator
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -0,0 +1,41 @@
1
+ require 'capybara/poltergeist'
2
+ require 'ics_validator/api_response'
3
+
4
+ module IcsValidator
5
+
6
+ # Capybara session for interacting with icalvalid.cloudapp.net
7
+ #
8
+ class WebSession
9
+
10
+ def initialize
11
+ @session = Capybara::Session.new(:poltergeist)
12
+
13
+ @session.driver.headers = {
14
+ 'User-Agent' => "Mozilla/5.0 (Macintosh; Intel Mac OS X)"
15
+ }
16
+
17
+ @session.visit('http://icalvalid.cloudapp.net/')
18
+ end
19
+
20
+ def validate_snippet(snippet)
21
+ @session.fill_in('Content_tbSnippet', with: snippet)
22
+ @session.click_button "Content_btnValidateSnippet"
23
+ end
24
+
25
+ def validate_file(path)
26
+ @session.attach_file('Content_fileUpload', path)
27
+ @session.click_button "Content_btnUpload"
28
+ end
29
+
30
+ def get_api_response
31
+ response = nil
32
+
33
+ Capybara.send(:timeout, 20, @session.driver) do
34
+ response = ApiResponse.build(@session.html)
35
+ end
36
+
37
+ response
38
+ end
39
+
40
+ end
41
+ end
data/lib/ics_validator.rb CHANGED
@@ -1,22 +1,28 @@
1
1
  require "ics_validator/version"
2
- require "ics_validator/feed_validator"
3
- require "ics_validator/snippet_validator"
4
- require "ics_validator/file_validator"
2
+ require "ics_validator/web_session"
3
+ require "ics_validator/api_response"
4
+ require "rest-client"
5
5
 
6
6
  # Use http://icalvalid.cloudapp.net/ to validate iCalendar content.
7
7
  #
8
8
  module IcsValidator
9
9
 
10
10
  def self.valid_feed?(url)
11
- FeedValidator.new(url).valid?
11
+ ApiResponse.build(
12
+ RestClient.get("http://icalvalid.cloudapp.net/?uri=#{url}")
13
+ ).valid?
12
14
  end
13
15
 
14
16
  def self.valid_snippet?(snippet)
15
- SnippetValidator.new(snippet).valid?
17
+ session = WebSession.new
18
+ session.validate_snippet(snippet)
19
+ session.get_api_response.valid?
16
20
  end
17
21
 
18
22
  def self.valid_file?(path)
19
- FileValidator.new(path).valid?
23
+ session = WebSession.new
24
+ session.validate_file(File.expand_path(path))
25
+ session.get_api_response.valid?
20
26
  end
21
27
 
22
28
  end
@@ -0,0 +1,256 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://icalvalid.cloudapp.net/?uri=http://elmcity.cloudapp.net/elmcity/ics?view=art
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept:
11
+ - '*/*; q=0.5, application/xml'
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Cache-Control:
22
+ - private
23
+ Content-Type:
24
+ - text/xml; charset=utf-8
25
+ Server:
26
+ - Microsoft-IIS/7.0
27
+ X-Aspnet-Version:
28
+ - 4.0.30319
29
+ X-Powered-By:
30
+ - ASP.NET
31
+ Date:
32
+ - Thu, 02 Jan 2014 06:46:51 GMT
33
+ Content-Length:
34
+ - '9691'
35
+ body:
36
+ encoding: ASCII-8BIT
37
+ string: !binary |-
38
+ 77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjw/
39
+ eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC94c2wiIGhyZWY9InJlc3VsdHMu
40
+ eHNsdCI/Pg0KPHJlc3VsdHMNCiAgICBsYW5ndWFnZT0iZW4iDQogICAgZGF0
41
+ ZXRpbWU9IjIwMTQtMDEtMDJUMDY6NDY6NDkiDQogICAgcGVybWFsaW5rPSIv
42
+ P2lkPTYzNTI0MjQyMDA5MTQ4MzgyOSIgeG1sbnM9Imh0dHA6Ly9pY2FsdmFs
43
+ aWQud2lraWRvdC5jb20vdmFsaWRhdGlvbiI+DQogICAgPHVzaW5nDQogICAg
44
+ ICAgIG5hbWU9IkREYXkuaUNhbCINCiAgICAgICAgdXJsPSJodHRwOi8vd3d3
45
+ LmRkYXlzb2Z0d2FyZS5jb20vUGFnZXMvUHJvamVjdHMvRERheS5pQ2FsLyIN
46
+ CiAgICAgICAgdmVyc2lvbj0iMS4wLjEuMCIgLz4NCiAgICA8dXNpbmcNCiAg
47
+ ICAgICAgbmFtZT0iaWNhbHZhbGlkIg0KICAgICAgICB1cmw9Imh0dHA6Ly9p
48
+ Y2FsdmFsaWQuY2xvdWRhcHAubmV0Ig0KICAgICAgICB2ZXJzaW9uPSIxLjAu
49
+ MC4zIiAvPg0KICAgIDxjYWxlbmRhckxpbmVzDQogICAgICAgIHBhdGg9Imh0
50
+ dHA6Ly9lbG1jaXR5LmNsb3VkYXBwLm5ldC9lbG1jaXR5L2ljcz92aWV3PWFy
51
+ dCINCiAgICAgICAgYnl0ZUNvdW50PSIxOTU4Ig0KICAgICAgICBsaW1pdD0i
52
+ NTAwIj4NCiAgICAgICAgPGxpbmUNCiAgICAgICAgICAgIG49IjEiPkJFR0lO
53
+ OlZDQUxFTkRBUjwvbGluZT4NCiAgICAgICAgPGxpbmUNCiAgICAgICAgICAg
54
+ IG49IjIiPlZFUlNJT046Mi4wPC9saW5lPg0KICAgICAgICA8bGluZQ0KICAg
55
+ ICAgICAgICAgbj0iMyI+UFJPRElEOi0vL2RkYXlzb2Z0d2FyZS5jb20vL05P
56
+ TlNHTUwgRERheS5pQ2FsIDEuMC8vRU48L2xpbmU+DQogICAgICAgIDxsaW5l
57
+ DQogICAgICAgICAgICBuPSI0Ij5CRUdJTjpWVElNRVpPTkU8L2xpbmU+DQog
58
+ ICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSI1Ij5UWklEOkVhc3Rlcm4g
59
+ U3RhbmRhcmQgVGltZTwvbGluZT4NCiAgICAgICAgPGxpbmUNCiAgICAgICAg
60
+ ICAgIG49IjYiPkJFR0lOOlNUQU5EQVJEPC9saW5lPg0KICAgICAgICA8bGlu
61
+ ZQ0KICAgICAgICAgICAgbj0iNyI+RFRTVEFSVDoyMDEzMTEwMlQwMjAwMDA8
62
+ L2xpbmU+DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSI4Ij5SUlVM
63
+ RTpGUkVRPVlFQVJMWTtCWURBWT0xU1U7QllIT1VSPTI7QllNSU5VVEU9MDtC
64
+ WU1PTlRIPTExPC9saW5lPg0KICAgICAgICA8bGluZQ0KICAgICAgICAgICAg
65
+ bj0iOSI+VFpOQU1FOkVhc3Rlcm4gU3RhbmRhcmQgVGltZTwvbGluZT4NCiAg
66
+ ICAgICAgPGxpbmUNCiAgICAgICAgICAgIG49IjEwIj5UWk9GRlNFVEZST006
67
+ LTA0MDA8L2xpbmU+DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSIx
68
+ MSI+VFpPRkZTRVRUTzotMDUwMDwvbGluZT4NCiAgICAgICAgPGxpbmUNCiAg
69
+ ICAgICAgICAgIG49IjEyIj5FTkQ6U1RBTkRBUkQ8L2xpbmU+DQogICAgICAg
70
+ IDxsaW5lDQogICAgICAgICAgICBuPSIxMyI+QkVHSU46REFZTElHSFQ8L2xp
71
+ bmU+DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSIxNCI+RFRTVEFS
72
+ VDoyMDEzMDMwMVQwMjAwMDA8L2xpbmU+DQogICAgICAgIDxsaW5lDQogICAg
73
+ ICAgICAgICBuPSIxNSI+UlJVTEU6RlJFUT1ZRUFSTFk7QllEQVk9MlNVO0JZ
74
+ SE9VUj0yO0JZTUlOVVRFPTA7QllNT05USD0zPC9saW5lPg0KICAgICAgICA8
75
+ bGluZQ0KICAgICAgICAgICAgbj0iMTYiPlRaTkFNRTpFYXN0ZXJuIERheWxp
76
+ Z2h0IFRpbWU8L2xpbmU+DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBu
77
+ PSIxNyI+VFpPRkZTRVRGUk9NOi0wNTAwPC9saW5lPg0KICAgICAgICA8bGlu
78
+ ZQ0KICAgICAgICAgICAgbj0iMTgiPlRaT0ZGU0VUVE86LTA0MDA8L2xpbmU+
79
+ DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSIxOSI+RU5EOkRBWUxJ
80
+ R0hUPC9saW5lPg0KICAgICAgICA8bGluZQ0KICAgICAgICAgICAgbj0iMjAi
81
+ PkVORDpWVElNRVpPTkU8L2xpbmU+DQogICAgICAgIDxsaW5lDQogICAgICAg
82
+ ICAgICBuPSIyMSI+QkVHSU46VkVWRU5UPC9saW5lPg0KICAgICAgICA8bGlu
83
+ ZQ0KICAgICAgICAgICAgbj0iMjIiPkNBVEVHT1JJRVM6YXJ0PC9saW5lPg0K
84
+ ICAgICAgICA8bGluZQ0KICAgICAgICAgICAgbj0iMjMiPkNBVEVHT1JJRVM6
85
+ a3NjPC9saW5lPg0KICAgICAgICA8bGluZQ0KICAgICAgICAgICAgbj0iMjQi
86
+ PkNBVEVHT1JJRVM6dW5pdmVyc2l0eTwvbGluZT4NCiAgICAgICAgPGxpbmUN
87
+ CiAgICAgICAgICAgIG49IjI1Ij5ERVNDUklQVElPTjoyMDEzw6/Cv8K9MTQg
88
+ UmVkZmVybiBDaG9yZW9ncmFwaGVyLWluLVJlc2lkZW5jZSBSZWJlY2NhIFN0
89
+ ZW5uIGhhcyBwZTwvbGluZT4NCiAgICAgICAgPGxpbmUNCiAgICAgICAgICAg
90
+ IG49IjI2Ij4gcmZvcm1lZCBhbmQgdG91cmVkIHRocm91Z2hvdXQgdGhlIHdv
91
+ cmxkIGFzIGEgcHJpbmNpcGFsIGRhbmNlciB3aXRoIE1vbWl4IGE8L2xpbmU+
92
+ DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSIyNyI+IG5kIFBpbG9i
93
+ b2x1cy4gU3Rlbm4gY3JlYXRlcyBkaXN0aW5jdGl2ZSBkYW5jZSBwaWVjZXMg
94
+ YW5kIHNvbG8gd29ya3MgdGhhdCBjPC9saW5lPg0KICAgICAgICA8bGluZQ0K
95
+ ICAgICAgICAgICAgbj0iMjgiPiBoYWxsZW5nZSB0aGUgdW5pcXVlIHdheXMg
96
+ dGhhdCBsaXZlIG11c2ljIGFuZCBkYW5jZVxuY29tbXVuaWNhdGUgYW5kIGlu
97
+ dGVyYTwvbGluZT4NCiAgICAgICAgPGxpbmUNCiAgICAgICAgICAgIG49IjI5
98
+ Ij4gY3QuPC9saW5lPg0KICAgICAgICA8bGluZQ0KICAgICAgICAgICAgbj0i
99
+ MzAiPkRURU5EO1RaSUQ9RWFzdGVybiBTdGFuZGFyZCBUaW1lOjIwMTQwMTI3
100
+ VDIxMzAwMDwvbGluZT4NCiAgICAgICAgPGxpbmUNCiAgICAgICAgICAgIG49
101
+ IjMxIj5EVFNUQU1QOjIwMTQwMTAyVDA2MjEyN1o8L2xpbmU+DQogICAgICAg
102
+ IDxsaW5lDQogICAgICAgICAgICBuPSIzMiI+RFRTVEFSVDtUWklEPUVhc3Rl
103
+ cm4gU3RhbmRhcmQgVGltZToyMDE0MDEyN1QxOTMwMDA8L2xpbmU+DQogICAg
104
+ ICAgIDxsaW5lDQogICAgICAgICAgICBuPSIzMyI+TE9DQVRJT046PC9saW5l
105
+ Pg0KICAgICAgICA8bGluZQ0KICAgICAgICAgICAgbj0iMzQiPlNFUVVFTkNF
106
+ OjA8L2xpbmU+DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSIzNSI+
107
+ U1VNTUFSWTpSZWJlY2NhIFN0ZW5uIE1vZGVybiBEYW5jZTwvbGluZT4NCiAg
108
+ ICAgICAgPGxpbmUNCiAgICAgICAgICAgIG49IjM2Ij5VSUQ6MmYxMDEzZjEt
109
+ ZjEwMy00ZWY4LTk2NDgtZTdjNjRmNDM5NzdiPC9saW5lPg0KICAgICAgICA8
110
+ bGluZQ0KICAgICAgICAgICAgbj0iMzciPlVSTDpodHRwOi8vd3d3LmtlZW5l
111
+ LmVkdS9uZXdzL2V2ZW50cy9kZXRhaWwvMTIzMi88L2xpbmU+DQogICAgICAg
112
+ IDxsaW5lDQogICAgICAgICAgICBuPSIzOCI+RU5EOlZFVkVOVDwvbGluZT4N
113
+ CiAgICAgICAgPGxpbmUNCiAgICAgICAgICAgIG49IjM5Ij5CRUdJTjpWRVZF
114
+ TlQ8L2xpbmU+DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSI0MCI+
115
+ Q0FURUdPUklFUzphcnQ8L2xpbmU+DQogICAgICAgIDxsaW5lDQogICAgICAg
116
+ ICAgICBuPSI0MSI+Q0FURUdPUklFUzprc2M8L2xpbmU+DQogICAgICAgIDxs
117
+ aW5lDQogICAgICAgICAgICBuPSI0MiI+Q0FURUdPUklFUzp0aGVhdGVyPC9s
118
+ aW5lPg0KICAgICAgICA8bGluZQ0KICAgICAgICAgICAgbj0iNDMiPkNBVEVH
119
+ T1JJRVM6dW5pdmVyc2l0eTwvbGluZT4NCiAgICAgICAgPGxpbmUNCiAgICAg
120
+ ICAgICAgIG49IjQ0Ij5ERVNDUklQVElPTjpJbiB0aGVpciBwcmVtaWVyZSBB
121
+ bWVyaWNhbiB0b3VyXCwgdGhpcyBoaWxhcmlvdXMgY2lyY3VzXG50cm91cGU8
122
+ L2xpbmU+DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSI0NSI+ICBm
123
+ ZWF0dXJlcyBsb2ctd2Fsa2luZ1wsIHNwb29uLWNsYWNraW5nXCwgaGF0Y2hl
124
+ dC1qdWdnbGluZ1wsIGNsb2ctZGFuY2luZ1wsPC9saW5lPg0KICAgICAgICA8
125
+ bGluZQ0KICAgICAgICAgICAgbj0iNDYiPiAgYW5kIGV2ZW4gaGlqaW5rcyBv
126
+ biBhbiBvdXRob3VzZSEgQSBzbW9yZ2FzYm9yZCBvZiBmYW1pbHkgZnVuIGJh
127
+ c2VkIG9uIHRoZTwvbGluZT4NCiAgICAgICAgPGxpbmUNCiAgICAgICAgICAg
128
+ IG49IjQ3Ij4gIGxvZ2dpbmcgdHJhZGl0aW9uIHdpdGggdHJvdXBlcnMgcGVy
129
+ Zm9ybWluZyBkYXJpbmcga25pZmUgdHJpY2tzIGFuZCBhY3JvYmE8L2xpbmU+
130
+ DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSI0OCI+IHRpYyBmZWF0
131
+ cyB0byB0aGUgdG9lLXRhcHBpbmcgc291bmRzIG9mIFF1ZWJlY29pcyBmb2xr
132
+ IG11c2ljLjwvbGluZT4NCiAgICAgICAgPGxpbmUNCiAgICAgICAgICAgIG49
133
+ IjQ5Ij5EVEVORDtUWklEPUVhc3Rlcm4gU3RhbmRhcmQgVGltZToyMDE0MDIw
134
+ MVQxNjAwMDA8L2xpbmU+DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBu
135
+ PSI1MCI+RFRTVEFNUDoyMDE0MDEwMlQwNjIxMjdaPC9saW5lPg0KICAgICAg
136
+ ICA8bGluZQ0KICAgICAgICAgICAgbj0iNTEiPkRUU1RBUlQ7VFpJRD1FYXN0
137
+ ZXJuIFN0YW5kYXJkIFRpbWU6MjAxNDAyMDFUMTQwMDAwPC9saW5lPg0KICAg
138
+ ICAgICA8bGluZQ0KICAgICAgICAgICAgbj0iNTIiPkxPQ0FUSU9OOjwvbGlu
139
+ ZT4NCiAgICAgICAgPGxpbmUNCiAgICAgICAgICAgIG49IjUzIj5TRVFVRU5D
140
+ RTowPC9saW5lPg0KICAgICAgICA8bGluZQ0KICAgICAgICAgICAgbj0iNTQi
141
+ PlNVTU1BUlk6Q2lycXVlIEFsZm9uc2UgaW4gIlRpbWJlciEiPC9saW5lPg0K
142
+ ICAgICAgICA8bGluZQ0KICAgICAgICAgICAgbj0iNTUiPlVJRDoyYzgyZGQz
143
+ OC05N2ZmLTRhZDAtOTg3OS00ZDllZDQxZWJiYzU8L2xpbmU+DQogICAgICAg
144
+ IDxsaW5lDQogICAgICAgICAgICBuPSI1NiI+VVJMOmh0dHA6Ly93d3cua2Vl
145
+ bmUuZWR1L25ld3MvZXZlbnRzL2RldGFpbC8xMjMzLzwvbGluZT4NCiAgICAg
146
+ ICAgPGxpbmUNCiAgICAgICAgICAgIG49IjU3Ij5FTkQ6VkVWRU5UPC9saW5l
147
+ Pg0KICAgICAgICA8bGluZQ0KICAgICAgICAgICAgbj0iNTgiPkVORDpWQ0FM
148
+ RU5EQVI8L2xpbmU+DQogICAgPC9jYWxlbmRhckxpbmVzPg0KICAgIDx2YWxp
149
+ ZGF0aW9uUmVzdWx0cw0KICAgICAgICBydWxlc2V0PSJTdHJpY3RfMl8wIg0K
150
+ ICAgICAgICBydWxlc2V0U3RyaW5nPSJpQ2FsZW5kYXIgMi4wIFN0cmljdCIN
151
+ CiAgICAgICAgcnVsZXNldERlc2NyaXB0aW9uPSImI3hEOyYjeEE7ICAgICAg
152
+ ICBWYWxpZGF0ZXMgaUNhbGVuZGFycyBhZ2FpbnN0IHRoZSBJRVRGIHN0YW5k
153
+ YXJkcyBpbiBhIHN0cmljdCBmYXNoaW9uLiAgQW55IHZhcmlhdGlvbnMgZnJv
154
+ bSB0aGUgc3RhbmRhcmQmI3hEOyYjeEE7ICAgICAgICB3aWxsIGJlIHJlcG9y
155
+ dGVkLiYjeEQ7JiN4QTsgICAgIg0KICAgICAgICBzY29yZT0iMTAwIj4NCiAg
156
+ ICAgICAgPGNhbGVuZGFySW5mb3M+DQogICAgICAgICAgICA8Y2FsZW5kYXJJ
157
+ bmZvDQogICAgICAgICAgICAgICAgdGltZVpvbmVDb3VudD0iMSINCiAgICAg
158
+ ICAgICAgICAgICBldmVudENvdW50PSIyIg0KICAgICAgICAgICAgICAgIHRv
159
+ ZG9Db3VudD0iMCINCiAgICAgICAgICAgICAgICBqb3VybmFsQ291bnQ9IjAi
160
+ DQogICAgICAgICAgICAgICAgZnJlZUJ1c3lDb3VudD0iMCINCiAgICAgICAg
161
+ ICAgICAgICBjYWxlbmRhclZlcnNpb249IjIuMCINCiAgICAgICAgICAgICAg
162
+ ICBwcm9kSUQ9Ii0vL2RkYXlzb2Z0d2FyZS5jb20vL05PTlNHTUwgRERheS5p
163
+ Q2FsIDEuMC8vRU4iIC8+DQogICAgICAgIDwvY2FsZW5kYXJJbmZvcz4NCiAg
164
+ ICAgICAgPHZhbGlkYXRpb25SZXN1bHQNCiAgICAgICAgICAgIHJ1bGU9ImVt
165
+ cHR5TGluZSINCiAgICAgICAgICAgIHJlc3VsdD0icGFzcyIgLz4NCiAgICAg
166
+ ICAgPHZhbGlkYXRpb25SZXN1bHQNCiAgICAgICAgICAgIHJ1bGU9ImNybGZQ
167
+ YWlycyINCiAgICAgICAgICAgIHJlc3VsdD0icGFzcyIgLz4NCiAgICAgICAg
168
+ PHZhbGlkYXRpb25SZXN1bHQNCiAgICAgICAgICAgIHJ1bGU9ImxpbmVGb2xk
169
+ aW5nIg0KICAgICAgICAgICAgcmVzdWx0PSJwYXNzIiAvPg0KICAgICAgICA8
170
+ dmFsaWRhdGlvblJlc3VsdA0KICAgICAgICAgICAgcnVsZT0idmVyc2lvbiIN
171
+ CiAgICAgICAgICAgIHJlc3VsdD0icGFzcyIgLz4NCiAgICAgICAgPHZhbGlk
172
+ YXRpb25SZXN1bHQNCiAgICAgICAgICAgIHJ1bGU9InByb2RJRCINCiAgICAg
173
+ ICAgICAgIHJlc3VsdD0icGFzcyIgLz4NCiAgICAgICAgPHZhbGlkYXRpb25S
174
+ ZXN1bHQNCiAgICAgICAgICAgIHJ1bGU9ImNhbFNjYWxlIg0KICAgICAgICAg
175
+ ICAgcmVzdWx0PSJwYXNzIiAvPg0KICAgICAgICA8dmFsaWRhdGlvblJlc3Vs
176
+ dA0KICAgICAgICAgICAgcnVsZT0ibWV0aG9kIg0KICAgICAgICAgICAgcmVz
177
+ dWx0PSJwYXNzIiAvPg0KICAgICAgICA8dmFsaWRhdGlvblJlc3VsdA0KICAg
178
+ ICAgICAgICAgcnVsZT0iY29tcG9uZW50Ig0KICAgICAgICAgICAgcmVzdWx0
179
+ PSJwYXNzIiAvPg0KICAgICAgICA8dmFsaWRhdGlvblJlc3VsdA0KICAgICAg
180
+ ICAgICAgcnVsZT0iIg0KICAgICAgICAgICAgcmVzdWx0PSJwYXNzIiAvPg0K
181
+ ICAgICAgICA8dmFsaWRhdGlvblJlc3VsdA0KICAgICAgICAgICAgcnVsZT0i
182
+ ZXZlbnRBdHRhY2hQcm9wZXJ0eSINCiAgICAgICAgICAgIHJlc3VsdD0icGFz
183
+ cyIgLz4NCiAgICAgICAgPHZhbGlkYXRpb25SZXN1bHQNCiAgICAgICAgICAg
184
+ IHJ1bGU9ImV2ZW50QXR0ZW5kZWVQcm9wZXJ0eSINCiAgICAgICAgICAgIHJl
185
+ c3VsdD0icGFzcyIgLz4NCiAgICAgICAgPHZhbGlkYXRpb25SZXN1bHQNCiAg
186
+ ICAgICAgICAgIHJ1bGU9ImV2ZW50Q2F0ZWdvcmllc1Byb3BlcnR5Ig0KICAg
187
+ ICAgICAgICAgcmVzdWx0PSJwYXNzIiAvPg0KICAgICAgICA8dmFsaWRhdGlv
188
+ blJlc3VsdA0KICAgICAgICAgICAgcnVsZT0iZXZlbnRDbGFzc1Byb3BlcnR5
189
+ Ig0KICAgICAgICAgICAgcmVzdWx0PSJwYXNzIiAvPg0KICAgICAgICA8dmFs
190
+ aWRhdGlvblJlc3VsdA0KICAgICAgICAgICAgcnVsZT0iZXZlbnRDb21tZW50
191
+ UHJvcGVydHkiDQogICAgICAgICAgICByZXN1bHQ9InBhc3MiIC8+DQogICAg
192
+ ICAgIDx2YWxpZGF0aW9uUmVzdWx0DQogICAgICAgICAgICBydWxlPSJldmVu
193
+ dENvbnRhY3RQcm9wZXJ0eSINCiAgICAgICAgICAgIHJlc3VsdD0icGFzcyIg
194
+ Lz4NCiAgICAgICAgPHZhbGlkYXRpb25SZXN1bHQNCiAgICAgICAgICAgIHJ1
195
+ bGU9ImV2ZW50Q3JlYXRlZFByb3BlcnR5Ig0KICAgICAgICAgICAgcmVzdWx0
196
+ PSJwYXNzIiAvPg0KICAgICAgICA8dmFsaWRhdGlvblJlc3VsdA0KICAgICAg
197
+ ICAgICAgcnVsZT0iZXZlbnREZXNjcmlwdGlvblByb3BlcnR5Ig0KICAgICAg
198
+ ICAgICAgcmVzdWx0PSJwYXNzIiAvPg0KICAgICAgICA8dmFsaWRhdGlvblJl
199
+ c3VsdA0KICAgICAgICAgICAgcnVsZT0iZXZlbnREVEVuZER1cmF0aW9uQ29u
200
+ ZmxpY3QiDQogICAgICAgICAgICByZXN1bHQ9InBhc3MiIC8+DQogICAgICAg
201
+ IDx2YWxpZGF0aW9uUmVzdWx0DQogICAgICAgICAgICBydWxlPSJldmVudERU
202
+ RW5kUHJvcGVydHkiDQogICAgICAgICAgICByZXN1bHQ9InBhc3MiIC8+DQog
203
+ ICAgICAgIDx2YWxpZGF0aW9uUmVzdWx0DQogICAgICAgICAgICBydWxlPSJl
204
+ dmVudERUU3RhcnRQcm9wZXJ0eSINCiAgICAgICAgICAgIHJlc3VsdD0icGFz
205
+ cyIgLz4NCiAgICAgICAgPHZhbGlkYXRpb25SZXN1bHQNCiAgICAgICAgICAg
206
+ IHJ1bGU9ImV2ZW50RFRTdGFtcFByb3BlcnR5Ig0KICAgICAgICAgICAgcmVz
207
+ dWx0PSJwYXNzIiAvPg0KICAgICAgICA8dmFsaWRhdGlvblJlc3VsdA0KICAg
208
+ ICAgICAgICAgcnVsZT0iZXZlbnREdXJhdGlvblByb3BlcnR5Ig0KICAgICAg
209
+ ICAgICAgcmVzdWx0PSJwYXNzIiAvPg0KICAgICAgICA8dmFsaWRhdGlvblJl
210
+ c3VsdA0KICAgICAgICAgICAgcnVsZT0iZXZlbnRFeERhdGVQcm9wZXJ0eSIN
211
+ CiAgICAgICAgICAgIHJlc3VsdD0icGFzcyIgLz4NCiAgICAgICAgPHZhbGlk
212
+ YXRpb25SZXN1bHQNCiAgICAgICAgICAgIHJ1bGU9ImV2ZW50RXhSdWxlUHJv
213
+ cGVydHkiDQogICAgICAgICAgICByZXN1bHQ9InBhc3MiIC8+DQogICAgICAg
214
+ IDx2YWxpZGF0aW9uUmVzdWx0DQogICAgICAgICAgICBydWxlPSJldmVudEdl
215
+ b1Byb3BlcnR5Ig0KICAgICAgICAgICAgcmVzdWx0PSJwYXNzIiAvPg0KICAg
216
+ ICAgICA8dmFsaWRhdGlvblJlc3VsdA0KICAgICAgICAgICAgcnVsZT0iZXZl
217
+ bnRMYXN0TW9kUHJvcGVydHkiDQogICAgICAgICAgICByZXN1bHQ9InBhc3Mi
218
+ IC8+DQogICAgICAgIDx2YWxpZGF0aW9uUmVzdWx0DQogICAgICAgICAgICBy
219
+ dWxlPSJldmVudExvY2F0aW9uUHJvcGVydHkiDQogICAgICAgICAgICByZXN1
220
+ bHQ9InBhc3MiIC8+DQogICAgICAgIDx2YWxpZGF0aW9uUmVzdWx0DQogICAg
221
+ ICAgICAgICBydWxlPSJldmVudE9yZ2FuaXplclByb3BlcnR5Ig0KICAgICAg
222
+ ICAgICAgcmVzdWx0PSJwYXNzIiAvPg0KICAgICAgICA8dmFsaWRhdGlvblJl
223
+ c3VsdA0KICAgICAgICAgICAgcnVsZT0iZXZlbnRQcmlvcml0eVByb3BlcnR5
224
+ Ig0KICAgICAgICAgICAgcmVzdWx0PSJwYXNzIiAvPg0KICAgICAgICA8dmFs
225
+ aWRhdGlvblJlc3VsdA0KICAgICAgICAgICAgcnVsZT0iZXZlbnRSRGF0ZVBy
226
+ b3BlcnR5Ig0KICAgICAgICAgICAgcmVzdWx0PSJwYXNzIiAvPg0KICAgICAg
227
+ ICA8dmFsaWRhdGlvblJlc3VsdA0KICAgICAgICAgICAgcnVsZT0iZXZlbnRS
228
+ ZWN1cklEUHJvcGVydHkiDQogICAgICAgICAgICByZXN1bHQ9InBhc3MiIC8+
229
+ DQogICAgICAgIDx2YWxpZGF0aW9uUmVzdWx0DQogICAgICAgICAgICBydWxl
230
+ PSJldmVudFJlbGF0ZWRQcm9wZXJ0eSINCiAgICAgICAgICAgIHJlc3VsdD0i
231
+ cGFzcyIgLz4NCiAgICAgICAgPHZhbGlkYXRpb25SZXN1bHQNCiAgICAgICAg
232
+ ICAgIHJ1bGU9ImV2ZW50UmVzb3VyY2VzUHJvcGVydHkiDQogICAgICAgICAg
233
+ ICByZXN1bHQ9InBhc3MiIC8+DQogICAgICAgIDx2YWxpZGF0aW9uUmVzdWx0
234
+ DQogICAgICAgICAgICBydWxlPSJldmVudFJTdGF0dXNQcm9wZXJ0eSINCiAg
235
+ ICAgICAgICAgIHJlc3VsdD0icGFzcyIgLz4NCiAgICAgICAgPHZhbGlkYXRp
236
+ b25SZXN1bHQNCiAgICAgICAgICAgIHJ1bGU9ImV2ZW50UlJ1bGVQcm9wZXJ0
237
+ eSINCiAgICAgICAgICAgIHJlc3VsdD0icGFzcyIgLz4NCiAgICAgICAgPHZh
238
+ bGlkYXRpb25SZXN1bHQNCiAgICAgICAgICAgIHJ1bGU9ImV2ZW50U2VxUHJv
239
+ cGVydHkiDQogICAgICAgICAgICByZXN1bHQ9InBhc3MiIC8+DQogICAgICAg
240
+ IDx2YWxpZGF0aW9uUmVzdWx0DQogICAgICAgICAgICBydWxlPSJldmVudFN0
241
+ YXR1c1Byb3BlcnR5Ig0KICAgICAgICAgICAgcmVzdWx0PSJwYXNzIiAvPg0K
242
+ ICAgICAgICA8dmFsaWRhdGlvblJlc3VsdA0KICAgICAgICAgICAgcnVsZT0i
243
+ ZXZlbnRTdW1tYXJ5UHJvcGVydHkiDQogICAgICAgICAgICByZXN1bHQ9InBh
244
+ c3MiIC8+DQogICAgICAgIDx2YWxpZGF0aW9uUmVzdWx0DQogICAgICAgICAg
245
+ ICBydWxlPSJldmVudFRyYW5zcFByb3BlcnR5Ig0KICAgICAgICAgICAgcmVz
246
+ dWx0PSJwYXNzIiAvPg0KICAgICAgICA8dmFsaWRhdGlvblJlc3VsdA0KICAg
247
+ ICAgICAgICAgcnVsZT0iZXZlbnRVaWRQcm9wZXJ0eSINCiAgICAgICAgICAg
248
+ IHJlc3VsdD0icGFzcyIgLz4NCiAgICAgICAgPHZhbGlkYXRpb25SZXN1bHQN
249
+ CiAgICAgICAgICAgIHJ1bGU9ImV2ZW50VXJsUHJvcGVydHkiDQogICAgICAg
250
+ ICAgICByZXN1bHQ9InBhc3MiIC8+DQogICAgICAgIDx2YWxpZGF0aW9uUmVz
251
+ dWx0DQogICAgICAgICAgICBydWxlPSJldmVudFhQcm9wZXJ0eSINCiAgICAg
252
+ ICAgICAgIHJlc3VsdD0icGFzcyIgLz4NCiAgICA8L3ZhbGlkYXRpb25SZXN1
253
+ bHRzPg0KPC9yZXN1bHRzPg==
254
+ http_version:
255
+ recorded_at: Thu, 02 Jan 2014 06:46:51 GMT
256
+ recorded_with: VCR 2.5.0
@@ -29,7 +29,7 @@ http_interactions:
29
29
  X-Powered-By:
30
30
  - ASP.NET
31
31
  Date:
32
- - Wed, 01 Jan 2014 03:14:21 GMT
32
+ - Thu, 02 Jan 2014 06:46:47 GMT
33
33
  Content-Length:
34
34
  - '9314'
35
35
  body:
@@ -38,8 +38,8 @@ http_interactions:
38
38
  77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjw/
39
39
  eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC94c2wiIGhyZWY9InJlc3VsdHMu
40
40
  eHNsdCI/Pg0KPHJlc3VsdHMNCiAgICBsYW5ndWFnZT0iZW4iDQogICAgZGF0
41
- ZXRpbWU9IjIwMTQtMDEtMDFUMDM6MTQ6MjAiDQogICAgcGVybWFsaW5rPSIv
42
- P2lkPTYzNTI0MTQyODU5NjUyNjc2MyIgeG1sbnM9Imh0dHA6Ly9pY2FsdmFs
41
+ ZXRpbWU9IjIwMTQtMDEtMDJUMDY6NDY6NDUiDQogICAgcGVybWFsaW5rPSIv
42
+ P2lkPTYzNTI0MjQyMDA1MDM5MTkyMCIgeG1sbnM9Imh0dHA6Ly9pY2FsdmFs
43
43
  aWQud2lraWRvdC5jb20vdmFsaWRhdGlvbiI+DQogICAgPHVzaW5nDQogICAg
44
44
  ICAgIG5hbWU9IkREYXkuaUNhbCINCiAgICAgICAgdXJsPSJodHRwOi8vd3d3
45
45
  LmRkYXlzb2Z0d2FyZS5jb20vUGFnZXMvUHJvamVjdHMvRERheS5pQ2FsLyIN
@@ -243,5 +243,5 @@ http_interactions:
243
243
  cnVsZT0iZXZlbnRYUHJvcGVydHkiDQogICAgICAgICAgICByZXN1bHQ9InBh
244
244
  c3MiIC8+DQogICAgPC92YWxpZGF0aW9uUmVzdWx0cz4NCjwvcmVzdWx0cz4=
245
245
  http_version:
246
- recorded_at: Wed, 01 Jan 2014 03:14:21 GMT
246
+ recorded_at: Thu, 02 Jan 2014 06:46:47 GMT
247
247
  recorded_with: VCR 2.5.0
@@ -0,0 +1,113 @@
1
+ require 'spec_helper'
2
+
3
+ describe IcsValidator, :vcr do
4
+
5
+ describe ".valid_feed?(url)" do
6
+
7
+ context "given a valid ICS feed" do
8
+ let(:valid_ics_feed_url) {
9
+ "http://elmcity.cloudapp.net/elmcity/ics?view=art"
10
+ }
11
+
12
+ it "returns true" do
13
+ expect(
14
+ described_class.valid_feed?(valid_ics_feed_url)
15
+ ).to be_true
16
+ end
17
+ end
18
+
19
+ context "given an invalid ICS feed" do
20
+ let(:invalid_ics_feed_url) {
21
+ "http://example.com/"
22
+ }
23
+
24
+ it "returns false" do
25
+ expect(
26
+ described_class.valid_feed?(invalid_ics_feed_url)
27
+ ).to be_false
28
+ end
29
+ end
30
+
31
+ end
32
+
33
+ describe ".valid_file?(path)" do
34
+
35
+ context "given a valid ICS file" do
36
+ let(:valid_ics_file) {
37
+ File.expand_path('../fixtures/icalendar/valid.ics', __FILE__)
38
+ }
39
+
40
+ it "returns true" do
41
+ expect(
42
+ described_class.valid_file?(valid_ics_file)
43
+ ).to be_true
44
+ end
45
+ end
46
+
47
+ context "given an invalid ICS file" do
48
+ let(:invalid_ics_file) {
49
+ File.expand_path('../fixtures/icalendar/invalid.ics', __FILE__)
50
+ }
51
+
52
+ it "returns false" do
53
+ expect(
54
+ described_class.valid_file?(invalid_ics_file)
55
+ ).to be_false
56
+ end
57
+ end
58
+
59
+ end
60
+
61
+ describe ".valid_snippet?(snippet)" do
62
+
63
+ context "given a valid ICS snippet" do
64
+ let(:valid_ics_snippet) {
65
+ <<-EOF
66
+ BEGIN:VCALENDAR
67
+ VERSION:2.0
68
+ CALSCALE:GREGORIAN
69
+ METHOD:PUBLISH
70
+ PRODID:iCalendar-Ruby
71
+ BEGIN:VTIMEZONE
72
+ TZID:America/New_York
73
+ BEGIN:DAYLIGHT
74
+ DTSTART:19700308T020000
75
+ RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
76
+ TZNAME:EDT
77
+ TZOFFSETFROM:-0500
78
+ TZOFFSETTO:-0400
79
+ END:DAYLIGHT
80
+ BEGIN:STANDARD
81
+ DTSTART:19701101T020000
82
+ RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
83
+ TZNAME:EST
84
+ TZOFFSETFROM:-0400
85
+ TZOFFSETTO:-0500
86
+ END:STANDARD
87
+ END:VTIMEZONE
88
+ END:VCALENDAR
89
+ EOF
90
+ }
91
+
92
+ it "returns true" do
93
+ expect(
94
+ described_class.valid_snippet?(valid_ics_snippet)
95
+ ).to be_true
96
+ end
97
+ end
98
+
99
+ context "given an invalid ICS snippet" do
100
+ let(:invalid_ics_snippet) {
101
+ "LOL. THIS ISN'T EVEN CLOSE"
102
+ }
103
+
104
+ it "returns false" do
105
+ expect(
106
+ described_class.valid_snippet?(invalid_ics_snippet)
107
+ ).to be_false
108
+ end
109
+ end
110
+
111
+ end
112
+
113
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  require 'ics_validator'
2
- require 'vcr'
3
2
 
3
+ require 'coveralls'
4
+ Coveralls.wear!
5
+
6
+ require 'vcr'
4
7
  VCR.configure do |c|
5
8
  c.cassette_library_dir = 'spec/cassettes'
6
9
  c.hook_into :webmock
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ics_validator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Gillooly
@@ -143,6 +143,7 @@ executables: []
143
143
  extensions: []
144
144
  extra_rdoc_files: []
145
145
  files:
146
+ - .coveralls.yml
146
147
  - .gitignore
147
148
  - .rspec
148
149
  - .travis.yml
@@ -152,17 +153,14 @@ files:
152
153
  - Rakefile
153
154
  - ics_validator.gemspec
154
155
  - lib/ics_validator.rb
155
- - lib/ics_validator/feed_validator.rb
156
- - lib/ics_validator/file_validator.rb
157
- - lib/ics_validator/snippet_validator.rb
156
+ - lib/ics_validator/api_response.rb
158
157
  - lib/ics_validator/version.rb
159
- - spec/cassettes/IcsValidator_FeedValidator/given_a_valid_ICS_feed/_valid_/returns_true.yml
160
- - spec/cassettes/IcsValidator_FeedValidator/given_an_invalid_ICS_feed/_valid_/returns_false.yml
158
+ - lib/ics_validator/web_session.rb
159
+ - spec/cassettes/IcsValidator/_valid_feed_url_/given_a_valid_ICS_feed/returns_true.yml
160
+ - spec/cassettes/IcsValidator/_valid_feed_url_/given_an_invalid_ICS_feed/returns_false.yml
161
161
  - spec/fixtures/icalendar/invalid.ics
162
162
  - spec/fixtures/icalendar/valid.ics
163
- - spec/ics_validator/feed_validator_spec.rb
164
- - spec/ics_validator/file_validator_spec.rb
165
- - spec/ics_validator/snippet_validator_spec.rb
163
+ - spec/ics_validator_spec.rb
166
164
  - spec/spec_helper.rb
167
165
  homepage: http://github.com/mattgillooly/ics_validator
168
166
  licenses:
@@ -189,11 +187,9 @@ signing_key:
189
187
  specification_version: 4
190
188
  summary: Validate iCalendar content
191
189
  test_files:
192
- - spec/cassettes/IcsValidator_FeedValidator/given_a_valid_ICS_feed/_valid_/returns_true.yml
193
- - spec/cassettes/IcsValidator_FeedValidator/given_an_invalid_ICS_feed/_valid_/returns_false.yml
190
+ - spec/cassettes/IcsValidator/_valid_feed_url_/given_a_valid_ICS_feed/returns_true.yml
191
+ - spec/cassettes/IcsValidator/_valid_feed_url_/given_an_invalid_ICS_feed/returns_false.yml
194
192
  - spec/fixtures/icalendar/invalid.ics
195
193
  - spec/fixtures/icalendar/valid.ics
196
- - spec/ics_validator/feed_validator_spec.rb
197
- - spec/ics_validator/file_validator_spec.rb
198
- - spec/ics_validator/snippet_validator_spec.rb
194
+ - spec/ics_validator_spec.rb
199
195
  - spec/spec_helper.rb
@@ -1,40 +0,0 @@
1
- require 'nokogiri'
2
- require 'rest-client'
3
-
4
- module IcsValidator
5
-
6
- # Validate an iCalendar feed by URL.
7
- #
8
- class FeedValidator
9
-
10
- def initialize(feed_url)
11
- @feed_url = feed_url
12
- end
13
-
14
- def valid?
15
- if r = validation_results
16
- results = r.children.map{|c| c.attr(:result)}
17
- results.compact.uniq == ['pass']
18
- end
19
- end
20
-
21
- private
22
-
23
- def validator_url
24
- "http://icalvalid.cloudapp.net/?uri=#{@feed_url}"
25
- end
26
-
27
- def validator_response
28
- RestClient.get(validator_url)
29
- end
30
-
31
- def validator_response_doc
32
- Nokogiri::XML(validator_response)
33
- end
34
-
35
- def validation_results
36
- validator_response_doc.at('validationResults')
37
- end
38
-
39
- end
40
- end
@@ -1,49 +0,0 @@
1
- require 'capybara/poltergeist'
2
-
3
- module IcsValidator
4
-
5
- # Validate an iCalendar file.
6
- #
7
- class FileValidator
8
-
9
- def initialize(path)
10
- @path = path
11
- end
12
-
13
- def valid?
14
- if r = validation_results
15
- results = validation_results.children.map{|c| c.attr(:result)}
16
- results.compact.uniq == ['pass']
17
- else
18
- raise "unexpected markup"
19
- end
20
- end
21
-
22
- private
23
-
24
- def validator_response
25
- session = Capybara::Session.new(:poltergeist)
26
-
27
- session.driver.headers = { 'User-Agent' =>
28
- "Mozilla/5.0 (Macintosh; Intel Mac OS X)" }
29
-
30
- session.visit('http://icalvalid.cloudapp.net/')
31
-
32
- session.attach_file('Content_fileUpload', File.expand_path(@path))
33
-
34
- session.click_button "Content_btnUpload"
35
-
36
- session.html
37
- end
38
-
39
- def validator_response_doc
40
- Nokogiri::XML(validator_response)
41
- end
42
-
43
- def validation_results
44
- validator_response_doc.at('validationResults')
45
- end
46
-
47
- end
48
- end
49
-
@@ -1,48 +0,0 @@
1
- require 'capybara/poltergeist'
2
-
3
- module IcsValidator
4
-
5
- # Validate a snippet of iCalendar content.
6
- #
7
- class SnippetValidator
8
-
9
- def initialize(snippet)
10
- @snippet = snippet
11
- end
12
-
13
- def valid?
14
- if r = validation_results
15
- results = validation_results.children.map{|c| c.attr(:result)}
16
- results.compact.uniq == ['pass']
17
- else
18
- raise "unexpected markup"
19
- end
20
- end
21
-
22
- private
23
-
24
- def validator_response
25
- session = Capybara::Session.new(:poltergeist)
26
-
27
- session.driver.headers = { 'User-Agent' =>
28
- "Mozilla/5.0 (Macintosh; Intel Mac OS X)" }
29
-
30
- session.visit('http://icalvalid.cloudapp.net/')
31
-
32
- session.fill_in('Content_tbSnippet', with: @snippet)
33
-
34
- session.click_button "Content_btnValidateSnippet"
35
-
36
- session.html
37
- end
38
-
39
- def validator_response_doc
40
- Nokogiri::XML(validator_response)
41
- end
42
-
43
- def validation_results
44
- validator_response_doc.at('validationResults')
45
- end
46
-
47
- end
48
- end
@@ -1,256 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: get
5
- uri: http://icalvalid.cloudapp.net/?uri=http://elmcity.cloudapp.net/elmcity/ics?view=art
6
- body:
7
- encoding: US-ASCII
8
- string: ''
9
- headers:
10
- Accept:
11
- - '*/*; q=0.5, application/xml'
12
- Accept-Encoding:
13
- - gzip, deflate
14
- User-Agent:
15
- - Ruby
16
- response:
17
- status:
18
- code: 200
19
- message: OK
20
- headers:
21
- Cache-Control:
22
- - private
23
- Content-Type:
24
- - text/xml; charset=utf-8
25
- Server:
26
- - Microsoft-IIS/7.0
27
- X-Aspnet-Version:
28
- - 4.0.30319
29
- X-Powered-By:
30
- - ASP.NET
31
- Date:
32
- - Wed, 01 Jan 2014 03:14:18 GMT
33
- Content-Length:
34
- - '9693'
35
- body:
36
- encoding: ASCII-8BIT
37
- string: !binary |-
38
- 77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjw/
39
- eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC94c2wiIGhyZWY9InJlc3VsdHMu
40
- eHNsdCI/Pg0KPHJlc3VsdHMNCiAgICBsYW5ndWFnZT0iZW4iDQogICAgZGF0
41
- ZXRpbWU9IjIwMTQtMDEtMDFUMDM6MTQ6MTYiDQogICAgcGVybWFsaW5rPSIv
42
- P2lkPTYzNTI0MTQyODU2NDY1NDAwNyIgeG1sbnM9Imh0dHA6Ly9pY2FsdmFs
43
- aWQud2lraWRvdC5jb20vdmFsaWRhdGlvbiI+DQogICAgPHVzaW5nDQogICAg
44
- ICAgIG5hbWU9IkREYXkuaUNhbCINCiAgICAgICAgdXJsPSJodHRwOi8vd3d3
45
- LmRkYXlzb2Z0d2FyZS5jb20vUGFnZXMvUHJvamVjdHMvRERheS5pQ2FsLyIN
46
- CiAgICAgICAgdmVyc2lvbj0iMS4wLjEuMCIgLz4NCiAgICA8dXNpbmcNCiAg
47
- ICAgICAgbmFtZT0iaWNhbHZhbGlkIg0KICAgICAgICB1cmw9Imh0dHA6Ly9p
48
- Y2FsdmFsaWQuY2xvdWRhcHAubmV0Ig0KICAgICAgICB2ZXJzaW9uPSIxLjAu
49
- MC4zIiAvPg0KICAgIDxjYWxlbmRhckxpbmVzDQogICAgICAgIHBhdGg9Imh0
50
- dHA6Ly9lbG1jaXR5LmNsb3VkYXBwLm5ldC9lbG1jaXR5L2ljcz92aWV3PWFy
51
- dCINCiAgICAgICAgYnl0ZUNvdW50PSIxOTYwIg0KICAgICAgICBsaW1pdD0i
52
- NTAwIj4NCiAgICAgICAgPGxpbmUNCiAgICAgICAgICAgIG49IjEiPkJFR0lO
53
- OlZDQUxFTkRBUjwvbGluZT4NCiAgICAgICAgPGxpbmUNCiAgICAgICAgICAg
54
- IG49IjIiPlZFUlNJT046Mi4wPC9saW5lPg0KICAgICAgICA8bGluZQ0KICAg
55
- ICAgICAgICAgbj0iMyI+UFJPRElEOi0vL2RkYXlzb2Z0d2FyZS5jb20vL05P
56
- TlNHTUwgRERheS5pQ2FsIDEuMC8vRU48L2xpbmU+DQogICAgICAgIDxsaW5l
57
- DQogICAgICAgICAgICBuPSI0Ij5CRUdJTjpWVElNRVpPTkU8L2xpbmU+DQog
58
- ICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSI1Ij5UWklEOkVhc3Rlcm4g
59
- U3RhbmRhcmQgVGltZTwvbGluZT4NCiAgICAgICAgPGxpbmUNCiAgICAgICAg
60
- ICAgIG49IjYiPkJFR0lOOlNUQU5EQVJEPC9saW5lPg0KICAgICAgICA8bGlu
61
- ZQ0KICAgICAgICAgICAgbj0iNyI+RFRTVEFSVDoyMDEzMTEwMlQwMjAwMDA8
62
- L2xpbmU+DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSI4Ij5SUlVM
63
- RTpGUkVRPVlFQVJMWTtCWURBWT0xU1U7QllIT1VSPTI7QllNSU5VVEU9MDtC
64
- WU1PTlRIPTExPC9saW5lPg0KICAgICAgICA8bGluZQ0KICAgICAgICAgICAg
65
- bj0iOSI+VFpOQU1FOkVhc3Rlcm4gU3RhbmRhcmQgVGltZTwvbGluZT4NCiAg
66
- ICAgICAgPGxpbmUNCiAgICAgICAgICAgIG49IjEwIj5UWk9GRlNFVEZST006
67
- LTA0MDA8L2xpbmU+DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSIx
68
- MSI+VFpPRkZTRVRUTzotMDUwMDwvbGluZT4NCiAgICAgICAgPGxpbmUNCiAg
69
- ICAgICAgICAgIG49IjEyIj5FTkQ6U1RBTkRBUkQ8L2xpbmU+DQogICAgICAg
70
- IDxsaW5lDQogICAgICAgICAgICBuPSIxMyI+QkVHSU46REFZTElHSFQ8L2xp
71
- bmU+DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSIxNCI+RFRTVEFS
72
- VDoyMDEzMDMwMVQwMjAwMDA8L2xpbmU+DQogICAgICAgIDxsaW5lDQogICAg
73
- ICAgICAgICBuPSIxNSI+UlJVTEU6RlJFUT1ZRUFSTFk7QllEQVk9MlNVO0JZ
74
- SE9VUj0yO0JZTUlOVVRFPTA7QllNT05USD0zPC9saW5lPg0KICAgICAgICA8
75
- bGluZQ0KICAgICAgICAgICAgbj0iMTYiPlRaTkFNRTpFYXN0ZXJuIERheWxp
76
- Z2h0IFRpbWU8L2xpbmU+DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBu
77
- PSIxNyI+VFpPRkZTRVRGUk9NOi0wNTAwPC9saW5lPg0KICAgICAgICA8bGlu
78
- ZQ0KICAgICAgICAgICAgbj0iMTgiPlRaT0ZGU0VUVE86LTA0MDA8L2xpbmU+
79
- DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSIxOSI+RU5EOkRBWUxJ
80
- R0hUPC9saW5lPg0KICAgICAgICA8bGluZQ0KICAgICAgICAgICAgbj0iMjAi
81
- PkVORDpWVElNRVpPTkU8L2xpbmU+DQogICAgICAgIDxsaW5lDQogICAgICAg
82
- ICAgICBuPSIyMSI+QkVHSU46VkVWRU5UPC9saW5lPg0KICAgICAgICA8bGlu
83
- ZQ0KICAgICAgICAgICAgbj0iMjIiPkNBVEVHT1JJRVM6YXJ0PC9saW5lPg0K
84
- ICAgICAgICA8bGluZQ0KICAgICAgICAgICAgbj0iMjMiPkNBVEVHT1JJRVM6
85
- a3NjPC9saW5lPg0KICAgICAgICA8bGluZQ0KICAgICAgICAgICAgbj0iMjQi
86
- PkNBVEVHT1JJRVM6dW5pdmVyc2l0eTwvbGluZT4NCiAgICAgICAgPGxpbmUN
87
- CiAgICAgICAgICAgIG49IjI1Ij5ERVNDUklQVElPTjoyMDEzw6LigqzigJwx
88
- NCBSZWRmZXJuIENob3Jlb2dyYXBoZXItaW4tUmVzaWRlbmNlIFJlYmVjY2Eg
89
- U3Rlbm4gaGFzIHBlPC9saW5lPg0KICAgICAgICA8bGluZQ0KICAgICAgICAg
90
- ICAgbj0iMjYiPiByZm9ybWVkIGFuZCB0b3VyZWQgdGhyb3VnaG91dCB0aGUg
91
- d29ybGQgYXMgYSBwcmluY2lwYWwgZGFuY2VyIHdpdGggTW9taXggYTwvbGlu
92
- ZT4NCiAgICAgICAgPGxpbmUNCiAgICAgICAgICAgIG49IjI3Ij4gbmQgUGls
93
- b2JvbHVzLiBTdGVubiBjcmVhdGVzIGRpc3RpbmN0aXZlIGRhbmNlIHBpZWNl
94
- cyBhbmQgc29sbyB3b3JrcyB0aGF0IGM8L2xpbmU+DQogICAgICAgIDxsaW5l
95
- DQogICAgICAgICAgICBuPSIyOCI+IGhhbGxlbmdlIHRoZSB1bmlxdWUgd2F5
96
- cyB0aGF0IGxpdmUgbXVzaWMgYW5kIGRhbmNlXG5jb21tdW5pY2F0ZSBhbmQg
97
- aW50ZXJhPC9saW5lPg0KICAgICAgICA8bGluZQ0KICAgICAgICAgICAgbj0i
98
- MjkiPiBjdC48L2xpbmU+DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBu
99
- PSIzMCI+RFRFTkQ7VFpJRD1FYXN0ZXJuIFN0YW5kYXJkIFRpbWU6MjAxNDAx
100
- MjdUMjEzMDAwPC9saW5lPg0KICAgICAgICA8bGluZQ0KICAgICAgICAgICAg
101
- bj0iMzEiPkRUU1RBTVA6MjAxNDAxMDFUMDMxNDE2WjwvbGluZT4NCiAgICAg
102
- ICAgPGxpbmUNCiAgICAgICAgICAgIG49IjMyIj5EVFNUQVJUO1RaSUQ9RWFz
103
- dGVybiBTdGFuZGFyZCBUaW1lOjIwMTQwMTI3VDE5MzAwMDwvbGluZT4NCiAg
104
- ICAgICAgPGxpbmUNCiAgICAgICAgICAgIG49IjMzIj5MT0NBVElPTjo8L2xp
105
- bmU+DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSIzNCI+U0VRVUVO
106
- Q0U6MDwvbGluZT4NCiAgICAgICAgPGxpbmUNCiAgICAgICAgICAgIG49IjM1
107
- Ij5TVU1NQVJZOlJlYmVjY2EgU3Rlbm4gTW9kZXJuIERhbmNlPC9saW5lPg0K
108
- ICAgICAgICA8bGluZQ0KICAgICAgICAgICAgbj0iMzYiPlVJRDo4ZTQwNWJm
109
- Yi0yY2RkLTQ0MzMtOTE4Ni1kOGIwODg0NTY0NDM8L2xpbmU+DQogICAgICAg
110
- IDxsaW5lDQogICAgICAgICAgICBuPSIzNyI+VVJMOmh0dHA6Ly93d3cua2Vl
111
- bmUuZWR1L25ld3MvZXZlbnRzL2RldGFpbC8xMjMyLzwvbGluZT4NCiAgICAg
112
- ICAgPGxpbmUNCiAgICAgICAgICAgIG49IjM4Ij5FTkQ6VkVWRU5UPC9saW5l
113
- Pg0KICAgICAgICA8bGluZQ0KICAgICAgICAgICAgbj0iMzkiPkJFR0lOOlZF
114
- VkVOVDwvbGluZT4NCiAgICAgICAgPGxpbmUNCiAgICAgICAgICAgIG49IjQw
115
- Ij5DQVRFR09SSUVTOmFydDwvbGluZT4NCiAgICAgICAgPGxpbmUNCiAgICAg
116
- ICAgICAgIG49IjQxIj5DQVRFR09SSUVTOmtzYzwvbGluZT4NCiAgICAgICAg
117
- PGxpbmUNCiAgICAgICAgICAgIG49IjQyIj5DQVRFR09SSUVTOnRoZWF0ZXI8
118
- L2xpbmU+DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSI0MyI+Q0FU
119
- RUdPUklFUzp1bml2ZXJzaXR5PC9saW5lPg0KICAgICAgICA8bGluZQ0KICAg
120
- ICAgICAgICAgbj0iNDQiPkRFU0NSSVBUSU9OOkluIHRoZWlyIHByZW1pZXJl
121
- IEFtZXJpY2FuIHRvdXJcLCB0aGlzIGhpbGFyaW91cyBjaXJjdXNcbnRyb3Vw
122
- ZTwvbGluZT4NCiAgICAgICAgPGxpbmUNCiAgICAgICAgICAgIG49IjQ1Ij4g
123
- IGZlYXR1cmVzIGxvZy13YWxraW5nXCwgc3Bvb24tY2xhY2tpbmdcLCBoYXRj
124
- aGV0LWp1Z2dsaW5nXCwgY2xvZy1kYW5jaW5nXCw8L2xpbmU+DQogICAgICAg
125
- IDxsaW5lDQogICAgICAgICAgICBuPSI0NiI+ICBhbmQgZXZlbiBoaWppbmtz
126
- IG9uIGFuIG91dGhvdXNlISBBIHNtb3JnYXNib3JkIG9mIGZhbWlseSBmdW4g
127
- YmFzZWQgb24gdGhlPC9saW5lPg0KICAgICAgICA8bGluZQ0KICAgICAgICAg
128
- ICAgbj0iNDciPiAgbG9nZ2luZyB0cmFkaXRpb24gd2l0aCB0cm91cGVycyBw
129
- ZXJmb3JtaW5nIGRhcmluZyBrbmlmZSB0cmlja3MgYW5kIGFjcm9iYTwvbGlu
130
- ZT4NCiAgICAgICAgPGxpbmUNCiAgICAgICAgICAgIG49IjQ4Ij4gdGljIGZl
131
- YXRzIHRvIHRoZSB0b2UtdGFwcGluZyBzb3VuZHMgb2YgUXVlYmVjb2lzIGZv
132
- bGsgbXVzaWMuPC9saW5lPg0KICAgICAgICA8bGluZQ0KICAgICAgICAgICAg
133
- bj0iNDkiPkRURU5EO1RaSUQ9RWFzdGVybiBTdGFuZGFyZCBUaW1lOjIwMTQw
134
- MjAxVDE2MDAwMDwvbGluZT4NCiAgICAgICAgPGxpbmUNCiAgICAgICAgICAg
135
- IG49IjUwIj5EVFNUQU1QOjIwMTQwMTAxVDAzMTQxNlo8L2xpbmU+DQogICAg
136
- ICAgIDxsaW5lDQogICAgICAgICAgICBuPSI1MSI+RFRTVEFSVDtUWklEPUVh
137
- c3Rlcm4gU3RhbmRhcmQgVGltZToyMDE0MDIwMVQxNDAwMDA8L2xpbmU+DQog
138
- ICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSI1MiI+TE9DQVRJT046PC9s
139
- aW5lPg0KICAgICAgICA8bGluZQ0KICAgICAgICAgICAgbj0iNTMiPlNFUVVF
140
- TkNFOjA8L2xpbmU+DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSI1
141
- NCI+U1VNTUFSWTpDaXJxdWUgQWxmb25zZSBpbiAiVGltYmVyISI8L2xpbmU+
142
- DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSI1NSI+VUlEOjUyOGMx
143
- MzhlLWYwMGYtNDgxYi05N2JjLTc0N2FlMTdjMDI4MjwvbGluZT4NCiAgICAg
144
- ICAgPGxpbmUNCiAgICAgICAgICAgIG49IjU2Ij5VUkw6aHR0cDovL3d3dy5r
145
- ZWVuZS5lZHUvbmV3cy9ldmVudHMvZGV0YWlsLzEyMzMvPC9saW5lPg0KICAg
146
- ICAgICA8bGluZQ0KICAgICAgICAgICAgbj0iNTciPkVORDpWRVZFTlQ8L2xp
147
- bmU+DQogICAgICAgIDxsaW5lDQogICAgICAgICAgICBuPSI1OCI+RU5EOlZD
148
- QUxFTkRBUjwvbGluZT4NCiAgICA8L2NhbGVuZGFyTGluZXM+DQogICAgPHZh
149
- bGlkYXRpb25SZXN1bHRzDQogICAgICAgIHJ1bGVzZXQ9IlN0cmljdF8yXzAi
150
- DQogICAgICAgIHJ1bGVzZXRTdHJpbmc9ImlDYWxlbmRhciAyLjAgU3RyaWN0
151
- Ig0KICAgICAgICBydWxlc2V0RGVzY3JpcHRpb249IiYjeEQ7JiN4QTsgICAg
152
- ICAgIFZhbGlkYXRlcyBpQ2FsZW5kYXJzIGFnYWluc3QgdGhlIElFVEYgc3Rh
153
- bmRhcmRzIGluIGEgc3RyaWN0IGZhc2hpb24uICBBbnkgdmFyaWF0aW9ucyBm
154
- cm9tIHRoZSBzdGFuZGFyZCYjeEQ7JiN4QTsgICAgICAgIHdpbGwgYmUgcmVw
155
- b3J0ZWQuJiN4RDsmI3hBOyAgICAiDQogICAgICAgIHNjb3JlPSIxMDAiPg0K
156
- ICAgICAgICA8Y2FsZW5kYXJJbmZvcz4NCiAgICAgICAgICAgIDxjYWxlbmRh
157
- ckluZm8NCiAgICAgICAgICAgICAgICB0aW1lWm9uZUNvdW50PSIxIg0KICAg
158
- ICAgICAgICAgICAgIGV2ZW50Q291bnQ9IjIiDQogICAgICAgICAgICAgICAg
159
- dG9kb0NvdW50PSIwIg0KICAgICAgICAgICAgICAgIGpvdXJuYWxDb3VudD0i
160
- MCINCiAgICAgICAgICAgICAgICBmcmVlQnVzeUNvdW50PSIwIg0KICAgICAg
161
- ICAgICAgICAgIGNhbGVuZGFyVmVyc2lvbj0iMi4wIg0KICAgICAgICAgICAg
162
- ICAgIHByb2RJRD0iLS8vZGRheXNvZnR3YXJlLmNvbS8vTk9OU0dNTCBERGF5
163
- LmlDYWwgMS4wLy9FTiIgLz4NCiAgICAgICAgPC9jYWxlbmRhckluZm9zPg0K
164
- ICAgICAgICA8dmFsaWRhdGlvblJlc3VsdA0KICAgICAgICAgICAgcnVsZT0i
165
- ZW1wdHlMaW5lIg0KICAgICAgICAgICAgcmVzdWx0PSJwYXNzIiAvPg0KICAg
166
- ICAgICA8dmFsaWRhdGlvblJlc3VsdA0KICAgICAgICAgICAgcnVsZT0iY3Js
167
- ZlBhaXJzIg0KICAgICAgICAgICAgcmVzdWx0PSJwYXNzIiAvPg0KICAgICAg
168
- ICA8dmFsaWRhdGlvblJlc3VsdA0KICAgICAgICAgICAgcnVsZT0ibGluZUZv
169
- bGRpbmciDQogICAgICAgICAgICByZXN1bHQ9InBhc3MiIC8+DQogICAgICAg
170
- IDx2YWxpZGF0aW9uUmVzdWx0DQogICAgICAgICAgICBydWxlPSJ2ZXJzaW9u
171
- Ig0KICAgICAgICAgICAgcmVzdWx0PSJwYXNzIiAvPg0KICAgICAgICA8dmFs
172
- aWRhdGlvblJlc3VsdA0KICAgICAgICAgICAgcnVsZT0icHJvZElEIg0KICAg
173
- ICAgICAgICAgcmVzdWx0PSJwYXNzIiAvPg0KICAgICAgICA8dmFsaWRhdGlv
174
- blJlc3VsdA0KICAgICAgICAgICAgcnVsZT0iY2FsU2NhbGUiDQogICAgICAg
175
- ICAgICByZXN1bHQ9InBhc3MiIC8+DQogICAgICAgIDx2YWxpZGF0aW9uUmVz
176
- dWx0DQogICAgICAgICAgICBydWxlPSJtZXRob2QiDQogICAgICAgICAgICBy
177
- ZXN1bHQ9InBhc3MiIC8+DQogICAgICAgIDx2YWxpZGF0aW9uUmVzdWx0DQog
178
- ICAgICAgICAgICBydWxlPSJjb21wb25lbnQiDQogICAgICAgICAgICByZXN1
179
- bHQ9InBhc3MiIC8+DQogICAgICAgIDx2YWxpZGF0aW9uUmVzdWx0DQogICAg
180
- ICAgICAgICBydWxlPSIiDQogICAgICAgICAgICByZXN1bHQ9InBhc3MiIC8+
181
- DQogICAgICAgIDx2YWxpZGF0aW9uUmVzdWx0DQogICAgICAgICAgICBydWxl
182
- PSJldmVudEF0dGFjaFByb3BlcnR5Ig0KICAgICAgICAgICAgcmVzdWx0PSJw
183
- YXNzIiAvPg0KICAgICAgICA8dmFsaWRhdGlvblJlc3VsdA0KICAgICAgICAg
184
- ICAgcnVsZT0iZXZlbnRBdHRlbmRlZVByb3BlcnR5Ig0KICAgICAgICAgICAg
185
- cmVzdWx0PSJwYXNzIiAvPg0KICAgICAgICA8dmFsaWRhdGlvblJlc3VsdA0K
186
- ICAgICAgICAgICAgcnVsZT0iZXZlbnRDYXRlZ29yaWVzUHJvcGVydHkiDQog
187
- ICAgICAgICAgICByZXN1bHQ9InBhc3MiIC8+DQogICAgICAgIDx2YWxpZGF0
188
- aW9uUmVzdWx0DQogICAgICAgICAgICBydWxlPSJldmVudENsYXNzUHJvcGVy
189
- dHkiDQogICAgICAgICAgICByZXN1bHQ9InBhc3MiIC8+DQogICAgICAgIDx2
190
- YWxpZGF0aW9uUmVzdWx0DQogICAgICAgICAgICBydWxlPSJldmVudENvbW1l
191
- bnRQcm9wZXJ0eSINCiAgICAgICAgICAgIHJlc3VsdD0icGFzcyIgLz4NCiAg
192
- ICAgICAgPHZhbGlkYXRpb25SZXN1bHQNCiAgICAgICAgICAgIHJ1bGU9ImV2
193
- ZW50Q29udGFjdFByb3BlcnR5Ig0KICAgICAgICAgICAgcmVzdWx0PSJwYXNz
194
- IiAvPg0KICAgICAgICA8dmFsaWRhdGlvblJlc3VsdA0KICAgICAgICAgICAg
195
- cnVsZT0iZXZlbnRDcmVhdGVkUHJvcGVydHkiDQogICAgICAgICAgICByZXN1
196
- bHQ9InBhc3MiIC8+DQogICAgICAgIDx2YWxpZGF0aW9uUmVzdWx0DQogICAg
197
- ICAgICAgICBydWxlPSJldmVudERlc2NyaXB0aW9uUHJvcGVydHkiDQogICAg
198
- ICAgICAgICByZXN1bHQ9InBhc3MiIC8+DQogICAgICAgIDx2YWxpZGF0aW9u
199
- UmVzdWx0DQogICAgICAgICAgICBydWxlPSJldmVudERURW5kRHVyYXRpb25D
200
- b25mbGljdCINCiAgICAgICAgICAgIHJlc3VsdD0icGFzcyIgLz4NCiAgICAg
201
- ICAgPHZhbGlkYXRpb25SZXN1bHQNCiAgICAgICAgICAgIHJ1bGU9ImV2ZW50
202
- RFRFbmRQcm9wZXJ0eSINCiAgICAgICAgICAgIHJlc3VsdD0icGFzcyIgLz4N
203
- CiAgICAgICAgPHZhbGlkYXRpb25SZXN1bHQNCiAgICAgICAgICAgIHJ1bGU9
204
- ImV2ZW50RFRTdGFydFByb3BlcnR5Ig0KICAgICAgICAgICAgcmVzdWx0PSJw
205
- YXNzIiAvPg0KICAgICAgICA8dmFsaWRhdGlvblJlc3VsdA0KICAgICAgICAg
206
- ICAgcnVsZT0iZXZlbnREVFN0YW1wUHJvcGVydHkiDQogICAgICAgICAgICBy
207
- ZXN1bHQ9InBhc3MiIC8+DQogICAgICAgIDx2YWxpZGF0aW9uUmVzdWx0DQog
208
- ICAgICAgICAgICBydWxlPSJldmVudER1cmF0aW9uUHJvcGVydHkiDQogICAg
209
- ICAgICAgICByZXN1bHQ9InBhc3MiIC8+DQogICAgICAgIDx2YWxpZGF0aW9u
210
- UmVzdWx0DQogICAgICAgICAgICBydWxlPSJldmVudEV4RGF0ZVByb3BlcnR5
211
- Ig0KICAgICAgICAgICAgcmVzdWx0PSJwYXNzIiAvPg0KICAgICAgICA8dmFs
212
- aWRhdGlvblJlc3VsdA0KICAgICAgICAgICAgcnVsZT0iZXZlbnRFeFJ1bGVQ
213
- cm9wZXJ0eSINCiAgICAgICAgICAgIHJlc3VsdD0icGFzcyIgLz4NCiAgICAg
214
- ICAgPHZhbGlkYXRpb25SZXN1bHQNCiAgICAgICAgICAgIHJ1bGU9ImV2ZW50
215
- R2VvUHJvcGVydHkiDQogICAgICAgICAgICByZXN1bHQ9InBhc3MiIC8+DQog
216
- ICAgICAgIDx2YWxpZGF0aW9uUmVzdWx0DQogICAgICAgICAgICBydWxlPSJl
217
- dmVudExhc3RNb2RQcm9wZXJ0eSINCiAgICAgICAgICAgIHJlc3VsdD0icGFz
218
- cyIgLz4NCiAgICAgICAgPHZhbGlkYXRpb25SZXN1bHQNCiAgICAgICAgICAg
219
- IHJ1bGU9ImV2ZW50TG9jYXRpb25Qcm9wZXJ0eSINCiAgICAgICAgICAgIHJl
220
- c3VsdD0icGFzcyIgLz4NCiAgICAgICAgPHZhbGlkYXRpb25SZXN1bHQNCiAg
221
- ICAgICAgICAgIHJ1bGU9ImV2ZW50T3JnYW5pemVyUHJvcGVydHkiDQogICAg
222
- ICAgICAgICByZXN1bHQ9InBhc3MiIC8+DQogICAgICAgIDx2YWxpZGF0aW9u
223
- UmVzdWx0DQogICAgICAgICAgICBydWxlPSJldmVudFByaW9yaXR5UHJvcGVy
224
- dHkiDQogICAgICAgICAgICByZXN1bHQ9InBhc3MiIC8+DQogICAgICAgIDx2
225
- YWxpZGF0aW9uUmVzdWx0DQogICAgICAgICAgICBydWxlPSJldmVudFJEYXRl
226
- UHJvcGVydHkiDQogICAgICAgICAgICByZXN1bHQ9InBhc3MiIC8+DQogICAg
227
- ICAgIDx2YWxpZGF0aW9uUmVzdWx0DQogICAgICAgICAgICBydWxlPSJldmVu
228
- dFJlY3VySURQcm9wZXJ0eSINCiAgICAgICAgICAgIHJlc3VsdD0icGFzcyIg
229
- Lz4NCiAgICAgICAgPHZhbGlkYXRpb25SZXN1bHQNCiAgICAgICAgICAgIHJ1
230
- bGU9ImV2ZW50UmVsYXRlZFByb3BlcnR5Ig0KICAgICAgICAgICAgcmVzdWx0
231
- PSJwYXNzIiAvPg0KICAgICAgICA8dmFsaWRhdGlvblJlc3VsdA0KICAgICAg
232
- ICAgICAgcnVsZT0iZXZlbnRSZXNvdXJjZXNQcm9wZXJ0eSINCiAgICAgICAg
233
- ICAgIHJlc3VsdD0icGFzcyIgLz4NCiAgICAgICAgPHZhbGlkYXRpb25SZXN1
234
- bHQNCiAgICAgICAgICAgIHJ1bGU9ImV2ZW50UlN0YXR1c1Byb3BlcnR5Ig0K
235
- ICAgICAgICAgICAgcmVzdWx0PSJwYXNzIiAvPg0KICAgICAgICA8dmFsaWRh
236
- dGlvblJlc3VsdA0KICAgICAgICAgICAgcnVsZT0iZXZlbnRSUnVsZVByb3Bl
237
- cnR5Ig0KICAgICAgICAgICAgcmVzdWx0PSJwYXNzIiAvPg0KICAgICAgICA8
238
- dmFsaWRhdGlvblJlc3VsdA0KICAgICAgICAgICAgcnVsZT0iZXZlbnRTZXFQ
239
- cm9wZXJ0eSINCiAgICAgICAgICAgIHJlc3VsdD0icGFzcyIgLz4NCiAgICAg
240
- ICAgPHZhbGlkYXRpb25SZXN1bHQNCiAgICAgICAgICAgIHJ1bGU9ImV2ZW50
241
- U3RhdHVzUHJvcGVydHkiDQogICAgICAgICAgICByZXN1bHQ9InBhc3MiIC8+
242
- DQogICAgICAgIDx2YWxpZGF0aW9uUmVzdWx0DQogICAgICAgICAgICBydWxl
243
- PSJldmVudFN1bW1hcnlQcm9wZXJ0eSINCiAgICAgICAgICAgIHJlc3VsdD0i
244
- cGFzcyIgLz4NCiAgICAgICAgPHZhbGlkYXRpb25SZXN1bHQNCiAgICAgICAg
245
- ICAgIHJ1bGU9ImV2ZW50VHJhbnNwUHJvcGVydHkiDQogICAgICAgICAgICBy
246
- ZXN1bHQ9InBhc3MiIC8+DQogICAgICAgIDx2YWxpZGF0aW9uUmVzdWx0DQog
247
- ICAgICAgICAgICBydWxlPSJldmVudFVpZFByb3BlcnR5Ig0KICAgICAgICAg
248
- ICAgcmVzdWx0PSJwYXNzIiAvPg0KICAgICAgICA8dmFsaWRhdGlvblJlc3Vs
249
- dA0KICAgICAgICAgICAgcnVsZT0iZXZlbnRVcmxQcm9wZXJ0eSINCiAgICAg
250
- ICAgICAgIHJlc3VsdD0icGFzcyIgLz4NCiAgICAgICAgPHZhbGlkYXRpb25S
251
- ZXN1bHQNCiAgICAgICAgICAgIHJ1bGU9ImV2ZW50WFByb3BlcnR5Ig0KICAg
252
- ICAgICAgICAgcmVzdWx0PSJwYXNzIiAvPg0KICAgIDwvdmFsaWRhdGlvblJl
253
- c3VsdHM+DQo8L3Jlc3VsdHM+
254
- http_version:
255
- recorded_at: Wed, 01 Jan 2014 03:14:18 GMT
256
- recorded_with: VCR 2.5.0
@@ -1,33 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe IcsValidator::FeedValidator, :vcr do
4
-
5
- context "given a valid ICS feed" do
6
- let(:valid_ics_feed_url) {
7
- "http://elmcity.cloudapp.net/elmcity/ics?view=art"
8
- }
9
-
10
- subject { described_class.new(valid_ics_feed_url) }
11
-
12
- describe "#valid?" do
13
- it "returns true" do
14
- subject.should be_valid
15
- end
16
- end
17
- end
18
-
19
- context "given an invalid ICS feed" do
20
- let(:invalid_ics_feed_url) {
21
- "http://example.com/"
22
- }
23
-
24
- subject { described_class.new(invalid_ics_feed_url) }
25
-
26
- describe "#valid?" do
27
- it "returns false" do
28
- subject.should_not be_valid
29
- end
30
- end
31
- end
32
-
33
- end
@@ -1,33 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe IcsValidator::FileValidator, :vcr do
4
-
5
- context "given a valid ICS file" do
6
- let(:valid_ics_file) {
7
- File.expand_path('../../fixtures/icalendar/valid.ics', __FILE__)
8
- }
9
-
10
- subject { described_class.new(valid_ics_file) }
11
-
12
- describe "#valid?" do
13
- it "returns true" do
14
- subject.should be_valid
15
- end
16
- end
17
- end
18
-
19
- context "given an invalid ICS file" do
20
- let(:invalid_ics_file) {
21
- File.expand_path('../../fixtures/icalendar/invalid.ics', __FILE__)
22
- }
23
-
24
- subject { described_class.new(invalid_ics_file) }
25
-
26
- describe "#valid?" do
27
- it "returns false" do
28
- subject.should_not be_valid
29
- end
30
- end
31
- end
32
-
33
- end
@@ -1,57 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe IcsValidator::SnippetValidator, :vcr do
4
-
5
- context "given a valid ICS snippet" do
6
- let(:valid_ics_snippet) {
7
- <<-EOF
8
- BEGIN:VCALENDAR
9
- VERSION:2.0
10
- CALSCALE:GREGORIAN
11
- METHOD:PUBLISH
12
- PRODID:iCalendar-Ruby
13
- BEGIN:VTIMEZONE
14
- TZID:America/New_York
15
- BEGIN:DAYLIGHT
16
- DTSTART:19700308T020000
17
- RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
18
- TZNAME:EDT
19
- TZOFFSETFROM:-0500
20
- TZOFFSETTO:-0400
21
- END:DAYLIGHT
22
- BEGIN:STANDARD
23
- DTSTART:19701101T020000
24
- RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
25
- TZNAME:EST
26
- TZOFFSETFROM:-0400
27
- TZOFFSETTO:-0500
28
- END:STANDARD
29
- END:VTIMEZONE
30
- END:VCALENDAR
31
- EOF
32
- }
33
-
34
- subject { described_class.new(valid_ics_snippet) }
35
-
36
- describe "#valid?" do
37
- it "returns true" do
38
- subject.should be_valid
39
- end
40
- end
41
- end
42
-
43
- context "given an invalid ICS snippet" do
44
- let(:invalid_ics_snippet) {
45
- "LOL. THIS ISN'T EVEN CLOSE"
46
- }
47
-
48
- subject { described_class.new(invalid_ics_snippet) }
49
-
50
- describe "#valid?" do
51
- it "returns false" do
52
- subject.should_not be_valid
53
- end
54
- end
55
- end
56
-
57
- end