akamai_api 0.3.1 → 0.4.0

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: cd1e48a3fd2c4b5e7a64c03bbe1f7e65395aec0f
4
- data.tar.gz: 212bf8e510fa426b453463094a34da2a47c91def
3
+ metadata.gz: 357ad26a6a5da39a595170949bbb7fb84226ce87
4
+ data.tar.gz: 9c14d311812d842102696154f90c902c423d0bde
5
5
  SHA512:
6
- metadata.gz: 35ab110e7a21a81af43e66ca521af50388b784f774fd150a3249ef74d6fbadc7227771c0301efe316fdd2a1955f58500ba1c560b48ea455db4b2925a0191d6c0
7
- data.tar.gz: 2d06963b02cfc69145d3c57a32b7d152f8ed99fed1728f4ce7615b3774f72f6d3e386606e01a9d29e558e60aab8cad38599a0c3522d932f3ad18bc7eb06e4332
6
+ metadata.gz: 3d384c9b6755b5e8c74c0cdb266f42a5575e54f83a3b693ccf6b9910c428ba5a40ac43b8f7f1c42fbfae43ed162707585bd8f1262f714e48e270b89a450d58c3
7
+ data.tar.gz: c083205f44b3bf0019f8775c7557eeb176fd6f0cc5fdd306b704b7bbf7cf498a243cd23fd3f7afd3dd836930687484646f331cc508658aa6d04f8544cd79c403
data/Guardfile CHANGED
@@ -1,7 +1,7 @@
1
1
  # A sample Guardfile
2
2
  # More info at https://github.com/guard/guard#readme
3
3
 
4
- guard :rspec do
4
+ guard :rspec, cmd: 'bundle exec rspec' do
5
5
  watch(%r{^spec/.+_spec\.rb$})
6
6
  watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
7
  watch('spec/spec_helper.rb') { "spec" }
data/README.md CHANGED
@@ -102,6 +102,7 @@ In the ECCU interface you can see the requestes already published and publish yo
102
102
  akamai_api ECCU last_request # Print the last request made to ECCU
103
103
  akamai_api ECCU publish_xml path/to/request.xml john.com # Publish a request made in XML for the specified Digital Property (usually the Host Header)
104
104
  akamai_api ECCU requests # Print the list of the last requests made to ECCU
105
+ akamai_api ECCU revalidate now jhon.com "*.png" # Create an XML request based on querystring input (*.png) for the specified Digital Property (usually the Host Header)
105
106
  ```
106
107
 
107
108
  ### Viewing Requests
@@ -125,14 +126,54 @@ Options:
125
126
  # Default: hostheader
126
127
  [--no-exact-match] # Do not do an exact match on property names
127
128
  -e, [--emails=foo@foo.com bar@bar.com] # Email(s) to use to send notification on status change
128
- -n, [--notes=NOTES]
129
- # Default: ECCU Request using AkamaiApi gem
129
+ -n, [--notes=NOTES] # Default: ECCU Request using AkamaiApi gem
130
130
  ```
131
131
 
132
132
  The command takes two arguments:
133
133
  - the file containing the request;
134
134
  - the Digital Property to which you want to apply the request (usually it's the host);
135
135
 
136
+ ### Revalidate based on a query string
137
+
138
+ You con use *akamai_api ECCU revalidate* for generate an XML revalidation file base on a query string.
139
+
140
+ ```
141
+ Usage:
142
+ akamai_api revalidate now jhon.com "*.png"
143
+
144
+ Options:
145
+ -f, [--force] # Force request without confirm
146
+ -P, [--property-type=type] # Type of enlisted properties
147
+ # Default: hostheader
148
+ [--no-exact-match] # Do not do an exact match on property names
149
+ -e, [--emails=foo@foo.com bar@bar.com] # Email(s) to use to send notification on status change
150
+ -n, [--notes=NOTES] # Default: ECCU Request using AkamaiApi gem
151
+ ```
152
+
153
+ The command produces the following result and ask you if you want to publish:
154
+
155
+ ```xml
156
+ <?xml version="1.0"?><eccu><match:ext value="png"><revalidate>now</revalidate></match:ext></eccu>
157
+ ```
158
+
159
+ The command takes two arguments:
160
+ - the timestamp after which any content, matched, in cache with an older timestamp will be considered stale
161
+ - the Digital Property to which you want to apply the request (usually it's the host);
162
+ - the query string that will be analyzed to produce the XML
163
+
164
+ #### Rules for the Querystring
165
+
166
+ - *foo* : indicate a filename
167
+ - *foo/* : indicate the **foo** dir
168
+ - *foo/** : indicate all direct sub dirs of **foo**
169
+ - *foo/*** : indicate recursively all sub dirs of **foo**
170
+ - **.png* : indicate all pngs
171
+ - *foo.txt* : indicate specific file (foo.txt)
172
+
173
+ Following the Akamai API docs there is a limitation:
174
+
175
+ Akamai recommends that you limit the number of matches to 250 or fewer. Submitting more than 250 invalidation requests at one time can result in a “global invalidation”
176
+
136
177
  # As a Library
137
178
 
138
179
  Remember to init the AkamaiApi gem with your login credentials. You can set your credentials with the following statement:
data/Thorfile CHANGED
@@ -20,7 +20,7 @@ class Default < Thor
20
20
 
21
21
  desc "release", "Create tag v#{AkamaiApi::VERSION} and build and push akamai_api-#{AkamaiApi::VERSION}.gem to Rubygems"
22
22
  def release
23
- Rake::Task["release"].execute
23
+ Rake::Task["release"].invoke
24
24
  end
25
25
 
26
26
  desc "spec", "Run RSpec code examples"
data/lib/akamai_api.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require "active_support/core_ext/object/blank"
2
2
 
3
- %w(version ccu eccu eccu_request).each do |file|
3
+ %w(version ccu eccu eccu_request eccu_parser).each do |file|
4
4
  require "akamai_api/#{file}"
5
5
  end
6
6
 
@@ -55,5 +55,52 @@ module AkamaiApi::CLI::ECCU
55
55
  rescue Savon::SOAPFault
56
56
  puts $!.message
57
57
  end
58
+
59
+ desc 'revalidate now jhon.com "*.png"', 'Create an XML request based on querystring input (*.png) for the specified Digital Property (usually the Host Header)'
60
+ long_desc 'Create an XML request based on querystring input (*.png) for the specified Digital Property (usually the Host Header)'
61
+ method_option :force, :type => :boolean, :aliases => '-f',
62
+ :default => false, :banner => 'force',
63
+ :desc => 'Force request without confirm'
64
+ method_option :property_type, :type => :string, :aliases => '-P',
65
+ :default => 'hostheader', :banner => 'type',
66
+ :desc => 'Type of enlisted properties'
67
+ method_option :no_exact_match, :type => :boolean,
68
+ :desc => 'Do not do an exact match on property names'
69
+ method_option :emails, :type => :array, :aliases => '-e',
70
+ :banner => "foo@foo.com bar@bar.com",
71
+ :desc => 'Email(s) to use to send notification on status change'
72
+ method_option :notes, :type => :string, :aliases => '-n',
73
+ :default => "ECCU Request using AkamaiApi #{AkamaiApi::VERSION}"
74
+ def revalidate(revalidate_on, property, querystring)
75
+ load_config
76
+ args = {
77
+ :notes => options[:notes],
78
+ :property_exact_match => !options[:no_exact_match],
79
+ :property_type => options[:property_type],
80
+ :emails => options[:emails]
81
+ }
82
+ parser = AkamaiApi::ECCUParser.new querystring, revalidate_on
83
+ puts parser.xml
84
+ if options[:force]
85
+ str = "Y"
86
+ else
87
+ print "\nPublish this XML? (Y/n)"
88
+ begin
89
+ system("stty raw -echo")
90
+ str = STDIN.getc
91
+ ensure
92
+ system("stty -raw echo")
93
+ end
94
+ end
95
+ if str == "Y"
96
+ id = AkamaiApi::ECCURequest.publish property, parser.xml, args
97
+ puts "\n\nRequest correctly published:"
98
+ puts EntryRenderer.new(AkamaiApi::ECCURequest.find(id, :verbose => true)).render
99
+ else
100
+ puts "\n\nExit without publish request"
101
+ end
102
+ rescue Exception => e
103
+ puts e.message
104
+ end
58
105
  end
59
106
  end
@@ -0,0 +1,10 @@
1
+ module AkamaiApi::ECCU
2
+
3
+ class Token
4
+ attr_accessor :type, :value
5
+
6
+ def initialize type, value
7
+ @type, @value = type, value
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,124 @@
1
+ require 'akamai_api/eccu/token'
2
+
3
+ module AkamaiApi::ECCU
4
+ # Class used to tokenize path used for invalidate cache
5
+ #
6
+ # foo/bar/*.txt
7
+ class Tokenizer
8
+
9
+ SEPARATORS = ['/']
10
+ DIR_REGEXP = /^[^\/]+$/
11
+ WILDCARD_REGEXP = /^\**$/
12
+
13
+ attr_reader :tokens, :cursor
14
+
15
+ def initialize expression
16
+ @cursor = -1
17
+ tokenize expression
18
+ end
19
+
20
+ def current_token
21
+ return nil if cursor == -1
22
+ tokens[cursor]
23
+ end
24
+
25
+ def next_token
26
+ @cursor += 1
27
+ current_token
28
+ end
29
+
30
+ def look_next_token i = 1
31
+ tokens[cursor + i]
32
+ end
33
+
34
+ def look_prev_token i = 1
35
+ tokens[cursor - 1]
36
+ end
37
+
38
+ def look_next_token_except exclude_type = nil
39
+ look_next_token if exclude_type == nil
40
+
41
+ i = 1
42
+ while tokens[cursor + i].type == exclude_type
43
+ i += 1
44
+ end
45
+ tokens[cursor + i]
46
+ end
47
+
48
+ def look_next_token_of_type token_type = nil
49
+ look_next_token if token_type == nil
50
+
51
+ i = cursor
52
+ while tokens.size < i
53
+ return tokens[i] if tokens[i].type == token_type
54
+ i += 1
55
+ end
56
+ nil
57
+ end
58
+
59
+ private
60
+
61
+ def tokenize expression
62
+ @tokens = []
63
+ expression_to_parse = expression.strip
64
+ while expression_to_parse.size > 0
65
+ tokens << read_next_token(expression_to_parse)
66
+ end
67
+ end
68
+
69
+ def read_next_token expression_to_parse
70
+ expression_to_parse.strip!
71
+ next_char = expression_to_parse.slice 0
72
+ if SEPARATORS.include? next_char
73
+ read_next_separator_token expression_to_parse
74
+ elsif next_char =~ WILDCARD_REGEXP
75
+ read_next_wildcard_token expression_to_parse
76
+ elsif next_char =~ DIR_REGEXP
77
+ read_next_dir_token expression_to_parse
78
+ else
79
+ raise "Unknown token starting with '#{next_char}'"
80
+ end
81
+ end
82
+
83
+ def read_next_separator_token expression_to_parse
84
+ Token.new :separator, expression_to_parse.slice!(0)
85
+ end
86
+
87
+ def read_next_wildcard_token expression_to_parse
88
+ wildcard_value, next_char = loop_until_regexp expression_to_parse, WILDCARD_REGEXP
89
+
90
+ if wildcard_value.size == 1
91
+ Token.new :wildcard, wildcard_value
92
+ elsif wildcard_value.size == 2
93
+ Token.new :double_wildcard, wildcard_value
94
+ else
95
+ raise "Unknown wildcard '#{wildcard_value}'"
96
+ end
97
+ end
98
+
99
+ def read_next_dir_token expression_to_parse
100
+ dir_value, next_char = loop_until_regexp expression_to_parse, DIR_REGEXP
101
+
102
+ if tokens.size > 0 && tokens.last.type == :wildcard
103
+ Token.new :extension, dir_value.gsub('.','')
104
+ elsif SEPARATORS.include? next_char
105
+ Token.new :dir, dir_value
106
+ else
107
+ Token.new :filename, dir_value
108
+ end
109
+ end
110
+
111
+ def loop_until_regexp expression_to_parse, regexp
112
+ looped_value = ''
113
+ next_char = ''
114
+ begin
115
+ looped_value << expression_to_parse.slice!(0)
116
+ next_char = expression_to_parse.slice 0
117
+ end while next_char && "#{looped_value}#{next_char}" =~ regexp
118
+
119
+ return looped_value, next_char
120
+ end
121
+
122
+ end
123
+
124
+ end
@@ -0,0 +1,94 @@
1
+ require 'akamai_api/eccu/tokenizer'
2
+
3
+ module AkamaiApi
4
+ # The {ECCUParser} class is used to create a XML request file starting from a url
5
+ #
6
+ # @example
7
+ # AkamaiApi::ECCUParser.new(foo/bar/*.png).xml
8
+ class ECCUParser
9
+
10
+ PLACEHOLDER = "{YIELD}"
11
+ NOT_ALLOWED_EXTENSIONS = %w[*]
12
+ NOT_ALLOWED_DIRS = %w[. ..]
13
+
14
+ attr_reader :tokenizer, :xml, :revalidate_on
15
+
16
+ def initialize expression, revalidate_on = 'now'
17
+ raise "Expression can't be empty" if expression.empty?
18
+ revalidate_on = revalidate_on.to_i if revalidate_on != 'now'
19
+ @tokenizer = ECCU::Tokenizer.new expression
20
+ @revalidate_on = revalidate_on
21
+ @xml = "<?xml version=\"1.0\"?>\n<eccu>#{PLACEHOLDER}</eccu>"
22
+ parse
23
+ end
24
+
25
+ private
26
+
27
+ def parse
28
+ while tokenizer.look_next_token
29
+ tokenizer.next_token
30
+ send "add_#{tokenizer.current_token.type.to_s}_tag", tokenizer.current_token.value
31
+ end
32
+
33
+ add_revalidate
34
+ end
35
+
36
+ def next_wildcard_extension?
37
+ tokenizer.look_next_token.type == :wildcard and
38
+ ! tokenizer.look_next_token(2).nil? and
39
+ tokenizer.look_next_token(2).type == :extension
40
+ end
41
+
42
+ def next_filename?
43
+ tokenizer.look_next_token.type == :filename
44
+ end
45
+
46
+ def add_revalidate
47
+ xml.gsub! PLACEHOLDER, "<revalidate>#{revalidate_on}</revalidate>"
48
+ end
49
+
50
+ def add_dir_tag dir_name
51
+ raise "Dir '#{dir_name}' not allowed" if NOT_ALLOWED_DIRS.include? dir_name
52
+
53
+ xml.gsub! PLACEHOLDER, "<match:recursive-dirs value=\"#{dir_name}\">#{PLACEHOLDER}</match:recursive-dirs>"
54
+ end
55
+
56
+ def add_this_dir_tag
57
+ xml.gsub! PLACEHOLDER, "<match:this-dir value=\"This Directory Only\">#{PLACEHOLDER}</match:this-dir>"
58
+ end
59
+
60
+
61
+ def add_extension_tag extension
62
+ raise "Extension '#{extension}' not allowed" if NOT_ALLOWED_EXTENSIONS.include? extension
63
+ raise "Extension will be the last element" if tokenizer.look_next_token != nil
64
+
65
+ xml.gsub! PLACEHOLDER, "<match:ext value=\"#{extension}\">#{PLACEHOLDER}</match:ext>"
66
+ end
67
+
68
+ def add_filename_tag filename
69
+ xml.gsub! PLACEHOLDER, "<match:filename value=\"#{filename}\" nocase=\"off\">#{PLACEHOLDER}</match:filename>"
70
+ end
71
+
72
+ def add_separator_tag separator
73
+ if tokenizer.look_prev_token.type == :dir
74
+ if tokenizer.look_next_token == nil
75
+ add_this_dir_tag
76
+ elsif next_wildcard_extension? or next_filename?
77
+ add_this_dir_tag
78
+ end
79
+ end
80
+ end
81
+
82
+ def add_double_wildcard_tag token
83
+ # Double wildcard do nothing
84
+ end
85
+
86
+ def add_wildcard_tag wildcard
87
+ if tokenizer.look_next_token.nil? or
88
+ tokenizer.look_next_token.type == :separator
89
+ xml.gsub! PLACEHOLDER, "<match:sub-dirs-only value=\"Sub-directories Only\">#{PLACEHOLDER}</match:sub-dirs-only>"
90
+ end
91
+ end
92
+
93
+ end
94
+ end
@@ -1,3 +1,3 @@
1
1
  module AkamaiApi
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ def open_expected_file( filename )
4
+ content = File.open(File.dirname(__FILE__) + "/../../fixtures/eccu/parser/#{filename}", "r").read
5
+ strip_content content
6
+ end
7
+
8
+ def strip_content( xml )
9
+ xml.gsub(/(\n|\t|\r)/, " ").gsub(/>\s*</, "><").strip
10
+ end
11
+
12
+ describe 'Some example of input -> output' do
13
+
14
+ tests = {
15
+ "foo/" => "this_dir_only.xml",
16
+ "foo/**" => "this_dir_recursive.xml",
17
+ "foo/*" => "sub_dirs.xml",
18
+ "foo/*/" => "sub_dirs.xml",
19
+ "foo/bar.txt" => "dir_with_filename.xml",
20
+ "eccu_test/**/*.txt" => "recursive_extension.xml",
21
+ "eccu_test/*/*.txt" => "only_sub_dirs_extension.xml",
22
+ "eccu_test/*.txt" => "dir_with_extension.xml",
23
+ }
24
+
25
+ tests.each do |expression, file|
26
+ context expression do
27
+ let(:parser){ AkamaiApi::ECCUParser.new expression }
28
+ it{ expect( strip_content( parser.xml ) ).to eq( open_expected_file(file) ) }
29
+ end
30
+ end
31
+
32
+ end
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0"?>
2
+ <eccu>
3
+ <match:recursive-dirs value="eccu_test">
4
+ <match:this-dir value="This Directory Only">
5
+ <match:ext value="txt">
6
+ <revalidate>now</revalidate>
7
+ </match:ext>
8
+ </match:this-dir>
9
+ </match:recursive-dirs>
10
+ </eccu>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0"?>
2
+ <eccu>
3
+ <match:recursive-dirs value="foo">
4
+ <match:this-dir value="This Directory Only">
5
+ <match:filename value="bar.txt" nocase="off">
6
+ <revalidate>now</revalidate>
7
+ </match:filename>
8
+ </match:this-dir>
9
+ </match:recursive-dirs>
10
+ </eccu>
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0"?>
2
+ <eccu>
3
+ <match:recursive-dirs value="eccu_test">
4
+ <match:sub-dirs-only value="Sub-directories Only">
5
+ <match:ext value="txt">
6
+ <revalidate>now</revalidate>
7
+ </match:ext>
8
+ </match:sub-dirs-only>
9
+ </match:recursive-dirs>
10
+ </eccu>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0"?>
2
+ <eccu>
3
+ <match:recursive-dirs value="eccu_test">
4
+ <match:ext value="txt">
5
+ <revalidate>now</revalidate>
6
+ </match:ext>
7
+ </match:recursive-dirs>
8
+ </eccu>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0"?>
2
+ <eccu>
3
+ <match:recursive-dirs value="foo">
4
+ <match:sub-dirs-only value="Sub-directories Only">
5
+ <revalidate>now</revalidate>
6
+ </match:sub-dirs-only>
7
+ </match:recursive-dirs>
8
+ </eccu>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0"?>
2
+ <eccu>
3
+ <match:recursive-dirs value="foo">
4
+ <match:this-dir value="This Directory Only">
5
+ <revalidate>now</revalidate>
6
+ </match:this-dir>
7
+ </match:recursive-dirs>
8
+ </eccu>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0"?>
2
+ <eccu>
3
+ <match:recursive-dirs value="foo">
4
+ <revalidate>now</revalidate>
5
+ </match:recursive-dirs>
6
+ </eccu>
@@ -0,0 +1,85 @@
1
+ require 'spec_helper'
2
+
3
+ module AkamaiApi::ECCU
4
+ describe Tokenizer do
5
+
6
+ describe '.tokenize' do
7
+
8
+ context 'with empty expression' do
9
+ let(:tokenizer) { Tokenizer.new "" }
10
+ it 'return 0 tokens' do
11
+ expect( tokenizer.tokens.size ).to equal 0
12
+ end
13
+
14
+ it '.current_token return nil' do
15
+ expect( tokenizer.current_token ).to be_nil
16
+ end
17
+ it '.look_next_token return nil' do
18
+ expect( tokenizer.look_next_token ).to be_nil
19
+ end
20
+ it '.next_token return nil' do
21
+ expect( tokenizer.next_token ).to be_nil
22
+ end
23
+ end
24
+
25
+ context 'with correct expression' do
26
+ let(:tokenizer) { Tokenizer.new "foo/bar/**/*.png" }
27
+ it 'return 8 tokens' do
28
+ expect(tokenizer.tokens.size).to equal 8
29
+ end
30
+
31
+ it 'and all tokens have the correct type' do
32
+ expect( tokenizer.tokens[0].type ).to equal :dir
33
+ expect( tokenizer.tokens[1].type ).to equal :separator
34
+ expect( tokenizer.tokens[2].type ).to equal :dir
35
+ expect( tokenizer.tokens[3].type ).to equal :separator
36
+ expect( tokenizer.tokens[4].type ).to equal :double_wildcard
37
+ expect( tokenizer.tokens[5].type ).to equal :separator
38
+ expect( tokenizer.tokens[6].type ).to equal :wildcard
39
+ expect( tokenizer.tokens[7].type ).to equal :extension
40
+ end
41
+
42
+ it '.current_token return nil initially' do
43
+ expect( tokenizer.current_token ).to be_nil
44
+ end
45
+ it '.current_token return a Token object after call .next_token' do
46
+ tokenizer.next_token
47
+ expect( tokenizer.current_token.class.name ).to eq "AkamaiApi::ECCU::Token"
48
+ end
49
+ it '.next_token return a Token object' do
50
+ expect( tokenizer.next_token.class.name ).to eq "AkamaiApi::ECCU::Token"
51
+ end
52
+ it '.look_next_token return a Token object' do
53
+ expect( tokenizer.look_next_token.class.name ).to eq "AkamaiApi::ECCU::Token"
54
+ end
55
+ it '.look_next_token after all token cycles return nil' do
56
+ tokenizer.tokens.size.times do
57
+ tokenizer.next_token
58
+ end
59
+ expect( tokenizer.look_next_token ).to be_nil
60
+ end
61
+
62
+ context 'expression not tokenizable' do
63
+ it { expect{ Tokenizer.new('foo/***') }.to raise_error }
64
+ end
65
+ end
66
+
67
+ context 'last token is a :filename' do
68
+ let(:tokenizer) { Tokenizer.new "foo/bar/**/test.png" }
69
+ it { expect( tokenizer.tokens.last.type ).to equal :filename }
70
+ end
71
+
72
+ context 'single word is a :filename' do
73
+ let(:tokenizer) { Tokenizer.new "foo" }
74
+ it { expect( tokenizer.tokens.first.type ).to equal :filename }
75
+ end
76
+
77
+ context 'single word with end / is a :dir' do
78
+ let(:tokenizer) { Tokenizer.new "foo/" }
79
+ it { expect( tokenizer.tokens.first.type ).to equal :dir }
80
+ end
81
+
82
+ end
83
+
84
+ end
85
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ module AkamaiApi
4
+ describe ECCUParser do
5
+
6
+ describe 'initialize' do
7
+ context 'create tokenizer' do
8
+ let(:parser){ ECCUParser.new "foo/bar/*.png" }
9
+ it{ expect( parser.tokenizer.class.name ).to eq( "AkamaiApi::ECCU::Tokenizer" ) }
10
+ end
11
+ end
12
+
13
+ describe 'raises' do
14
+ context 'error on empty string' do
15
+ let(:parser){ ECCUParser.new "" }
16
+ it { expect{ parser.xml }.to raise_error "Expression can't be empty" }
17
+ end
18
+ context '* as not allowed extension' do
19
+ let(:parser){ ECCUParser.new "foo/*.*" }
20
+ it { expect{ parser.xml }.to raise_error }
21
+ end
22
+ context '. as not allowed dir' do
23
+ let(:parser){ ECCUParser.new "./test.png" }
24
+ it { expect{ parser.xml }.to raise_error }
25
+ end
26
+ context '.. as not allowed dir' do
27
+ let(:parser){ ECCUParser.new "../test.png" }
28
+ it { expect{ parser.xml }.to raise_error }
29
+ end
30
+ context 'Extension will be the last element ' do
31
+ let(:parser){ ECCUParser.new "foo/*.png/" }
32
+ it { expect{ parser.xml }.to raise_error "Extension will be the last element" }
33
+ end
34
+ end
35
+
36
+ end
37
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: akamai_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicola Racco
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-06 00:00:00.000000000 Z
11
+ date: 2015-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -205,7 +205,10 @@ files:
205
205
  - lib/akamai_api/eccu/not_found.rb
206
206
  - lib/akamai_api/eccu/publish_request.rb
207
207
  - lib/akamai_api/eccu/soap_body.rb
208
+ - lib/akamai_api/eccu/token.rb
209
+ - lib/akamai_api/eccu/tokenizer.rb
208
210
  - lib/akamai_api/eccu/update_attribute_request.rb
211
+ - lib/akamai_api/eccu_parser.rb
209
212
  - lib/akamai_api/eccu_request.rb
210
213
  - lib/akamai_api/error.rb
211
214
  - lib/akamai_api/unauthorized.rb
@@ -216,6 +219,7 @@ files:
216
219
  - spec/features/eccu/destroy_spec.rb
217
220
  - spec/features/eccu/find_request_spec.rb
218
221
  - spec/features/eccu/list_request_spec.rb
222
+ - spec/features/eccu/parser_integration_spec.rb
219
223
  - spec/features/eccu/publish_request_spec.rb
220
224
  - spec/features/eccu/update_email_spec.rb
221
225
  - spec/features/eccu/update_notes_spec.rb
@@ -223,6 +227,13 @@ files:
223
227
  - spec/fixtures/eccu/delete/successful.xml
224
228
  - spec/fixtures/eccu/get_ids/successful.xml
225
229
  - spec/fixtures/eccu/get_info/successful.xml
230
+ - spec/fixtures/eccu/parser/dir_with_extension.xml
231
+ - spec/fixtures/eccu/parser/dir_with_filename.xml
232
+ - spec/fixtures/eccu/parser/only_sub_dirs_extension.xml
233
+ - spec/fixtures/eccu/parser/recursive_extension.xml
234
+ - spec/fixtures/eccu/parser/sub_dirs.xml
235
+ - spec/fixtures/eccu/parser/this_dir_only.xml
236
+ - spec/fixtures/eccu/parser/this_dir_recursive.xml
226
237
  - spec/fixtures/eccu/set_notes/successful.xml
227
238
  - spec/fixtures/eccu/set_status_change_email/fault.xml
228
239
  - spec/fixtures/eccu/set_status_change_email/successful.xml
@@ -246,7 +257,9 @@ files:
246
257
  - spec/lib/akamai_api/eccu/list_request_spec.rb
247
258
  - spec/lib/akamai_api/eccu/publish_request_spec.rb
248
259
  - spec/lib/akamai_api/eccu/soap_body_spec.rb
260
+ - spec/lib/akamai_api/eccu/tokenizer_spec.rb
249
261
  - spec/lib/akamai_api/eccu/update_attribute_request_spec.rb
262
+ - spec/lib/akamai_api/eccu_parser_spec.rb
250
263
  - spec/lib/akamai_api/eccu_request_spec.rb
251
264
  - spec/spec_helper.rb
252
265
  - wsdls/ccuapi.wsdl
@@ -293,6 +306,7 @@ test_files:
293
306
  - spec/features/eccu/destroy_spec.rb
294
307
  - spec/features/eccu/find_request_spec.rb
295
308
  - spec/features/eccu/list_request_spec.rb
309
+ - spec/features/eccu/parser_integration_spec.rb
296
310
  - spec/features/eccu/publish_request_spec.rb
297
311
  - spec/features/eccu/update_email_spec.rb
298
312
  - spec/features/eccu/update_notes_spec.rb
@@ -300,6 +314,13 @@ test_files:
300
314
  - spec/fixtures/eccu/delete/successful.xml
301
315
  - spec/fixtures/eccu/get_ids/successful.xml
302
316
  - spec/fixtures/eccu/get_info/successful.xml
317
+ - spec/fixtures/eccu/parser/dir_with_extension.xml
318
+ - spec/fixtures/eccu/parser/dir_with_filename.xml
319
+ - spec/fixtures/eccu/parser/only_sub_dirs_extension.xml
320
+ - spec/fixtures/eccu/parser/recursive_extension.xml
321
+ - spec/fixtures/eccu/parser/sub_dirs.xml
322
+ - spec/fixtures/eccu/parser/this_dir_only.xml
323
+ - spec/fixtures/eccu/parser/this_dir_recursive.xml
303
324
  - spec/fixtures/eccu/set_notes/successful.xml
304
325
  - spec/fixtures/eccu/set_status_change_email/fault.xml
305
326
  - spec/fixtures/eccu/set_status_change_email/successful.xml
@@ -323,7 +344,9 @@ test_files:
323
344
  - spec/lib/akamai_api/eccu/list_request_spec.rb
324
345
  - spec/lib/akamai_api/eccu/publish_request_spec.rb
325
346
  - spec/lib/akamai_api/eccu/soap_body_spec.rb
347
+ - spec/lib/akamai_api/eccu/tokenizer_spec.rb
326
348
  - spec/lib/akamai_api/eccu/update_attribute_request_spec.rb
349
+ - spec/lib/akamai_api/eccu_parser_spec.rb
327
350
  - spec/lib/akamai_api/eccu_request_spec.rb
328
351
  - spec/spec_helper.rb
329
352
  has_rdoc: