fastly 1.1.4 → 1.1.5

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: 0270d26d5f2da61fe372839853d8710120d239bb
4
- data.tar.gz: a5354c14c11c76a1a0ec5e4a129f7a90a0cd6fe2
3
+ metadata.gz: f311beb83bf3886557b6da399d17d49682ec4ffb
4
+ data.tar.gz: f47f3014d3b66738f9938e3b84e5ab4d46b9a8d5
5
5
  SHA512:
6
- metadata.gz: 85ec2dddf754bdc0f3f8f574877641195bd6c19ede0782a8008ca785a7530b4a4bf56ca2d10aa3449b21b294f30183dbfcbbd3fbc7c858bfd4bfc2cf27356d65
7
- data.tar.gz: d2d3c5ede4170d3592266be5865f6165e75c6ba71204999859fa53107a9f21ac8b820622143db28320f052f411d1e5e17c0c1426ca9f214ce4a5428c9ed1c39f
6
+ metadata.gz: be5c1f769e551f2bbf7a16bab3508a14191c42cee4f9e7a95075c4be14f9e76aee9d1294e14b4d0bfa13f4bad7de9cb2f130bb6670a6e37ebee7217649dc0f4f
7
+ data.tar.gz: 9b8c4b14104b4d3148e2c9679a92db0a8e5f59fd2e0e4fbf21ddebb908f37ddd2fe8e4746974333074a665046cb8cda70eca279b5789cee1fb37d89b4959d008
data/HISTORY.md CHANGED
@@ -1,9 +1,13 @@
1
1
  # HEAD
2
2
 
3
- # 2014-09-29 v1.1.4
4
- * Require API for purge by key
3
+ ## 2014-12-15 v1.1.5
4
+ * major refactor and reorganization of code (merged branch https://github.com/fastly/fastly-ruby/pull/31)
5
+ * bump curb dep to 0.8.6 for ruby 2.1 support (see https://github.com/fastly/fastly-ruby/issues/43)
5
6
 
6
- #### 2014-07-25 v1.1.3
7
+ 2014-09-29 v1.1.4
8
+ * Require API Key for purge by key requests
9
+
10
+ 2014-07-25 v1.1.3
7
11
  * Add test:unit rake task
8
12
  * Add Rubocop and some rubocop cleanup
9
13
  * Clarify gem name in documentation
data/README.md CHANGED
@@ -75,9 +75,7 @@ new_version.activate!
75
75
  The test suite requires the following `ENV` variables to be set:
76
76
 
77
77
  * `FASTLY_TEST_USER` - Your user email
78
- * `FASTLY_TEST_NAME` - Your name on your account (ie "John Smith")
79
78
  * `FASTLY_TEST_PASSWORD` - Your account password
80
- * `FASTLY_TEST_CUSTOMER` - Your customer or company name (ie. "Fastly" or "Acme, Inc.")
81
79
  * `FASTLY_TEST_API_KEY` - Your API key (found at https://app.fastly.com/#account)
82
80
 
83
81
  While the test suite is safe to be run on all accounts and isn't harmful to your
@@ -8,25 +8,25 @@
8
8
  # License:: Distributes under the same terms as Ruby
9
9
  #
10
10
  # = USAGE
11
- #
11
+ #
12
12
  # fastly_upload_vcl <options> <service id or name> <path to vcl file>
13
- #
13
+ #
14
14
  # = CONFIGURATION
15
- #
15
+ #
16
16
  # You can either have a config file in either ~/.fastly or /etc/fastly with
17
- #
17
+ #
18
18
  # api_key = <key>
19
- #
19
+ #
20
20
  # or a config file with
21
- #
21
+ #
22
22
  # user = <login>
23
23
  # password = <password>
24
- #
24
+ #
25
25
  # Alternatively you can pass in any of those options on the command line
26
- #
26
+ #
27
27
  # fastly_upload_vcl --api_key <key> <service id or name> <path to vcl file>
28
28
  # fastly_upload_vcl --user <login> --password <password> <service id or name> <path to vcl file>
29
- #
29
+ #
30
30
 
31
31
  require 'rubygems'
32
32
  require 'fastly'
@@ -34,26 +34,26 @@ require 'fastly'
34
34
  # :nodoc:
35
35
  def die(message)
36
36
  warn message
37
- exit -1
37
+ exit(-1)
38
38
  end
39
39
 
40
- params = Fastly.get_options("#{ENV['HOME']}/.fastly", "/etc/fastly")
40
+ params = Fastly.get_options("#{ENV['HOME']}/.fastly", '/etc/fastly')
41
41
 
42
- service_id = ARGV.shift || die("You must pass in a service id")
43
- vcl_file = ARGV.shift || die("You must pass in a vcl file")
42
+ service_id = ARGV.shift || die('You must pass in a service id')
43
+ vcl_file = ARGV.shift || die('You must pass in a vcl file')
44
44
 
45
- die("Couldn't find any of the config files - #{configs.join(',')}") unless params.keys.size>0
45
+ die("Couldn't find any of the config files - #{configs.join(',')}") unless params.keys.size > 0
46
46
  die("Couldn't find vcl file #{vcl_file}") unless File.file?(vcl_file)
47
47
 
48
- fastly = Fastly.new(params)
48
+ fastly = Fastly.new(params)
49
49
 
50
50
  service = fastly.get_service(service_id) || die("Couldn't find service #{service_id}")
51
51
  version = service.version
52
52
  die "Can't upload a vcl file to the last (#{version.number}) version of #{service.name} (#{service.id}) because it's locked" if version.locked?
53
53
  puts "Uploading #{vcl_file} to version #{version.number}"
54
54
  begin
55
- name = File.basename(vcl_file, ".vcl")
56
- content = File.new(vcl_file, "r").read
55
+ name = File.basename(vcl_file, '.vcl')
56
+ content = File.new(vcl_file, 'r').read
57
57
  vcl = version.vcl(name)
58
58
  if vcl
59
59
  vcl.content = content
@@ -65,4 +65,4 @@ begin
65
65
  rescue => e
66
66
  die("Couldn't upload vcl: #{e}")
67
67
  end
68
- puts "Done! You should now go and activate it at https://app.fastly.com/#configure"
68
+ puts 'Done! You should now go and activate it at https://app.fastly.com/#configure'
data/fastly.gemspec CHANGED
@@ -1,22 +1,22 @@
1
1
  # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
2
+ $LOAD_PATH.push File.expand_path('../lib', __FILE__)
3
3
  require 'fastly/gem_version'
4
4
 
5
5
  Gem::Specification.new do |s|
6
- s.name = "fastly"
6
+ s.name = 'fastly'
7
7
  s.version = Fastly::VERSION
8
- s.authors = ["Fastly Inc"]
9
- s.email = ["support@fastly.com"]
10
- s.homepage = "http://github.com/fastly/fastly-ruby"
11
- s.summary = %q{Client library for the Fastly acceleration system}
12
- s.description = %q{Client library for the Fastly acceleration system}
8
+ s.authors = ['Fastly']
9
+ s.email = ['simon@fastly.com', 'zeke@templ.in', 'tyler@fastly.com']
10
+ s.homepage = 'http://github.com/fastly/fastly-ruby'
11
+ s.summary = %q(Client library for the Fastly acceleration system)
12
+ s.description = %q(Client library for the Fastly acceleration system)
13
13
  s.license = 'MIT'
14
14
 
15
15
  s.files = `git ls-files`.split("\n")
16
16
  s.test_files = `git ls-files -- test/*`.split("\n")
17
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
- s.require_paths = ["lib"]
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
18
+ s.require_paths = ['lib']
19
19
 
20
- s.add_dependency 'curb', '>=0.7.15'
21
- s.add_dependency 'curb-fu', '>=0.6.1'
20
+ s.add_dependency 'curb', '~> 0.8.6'
21
+ s.add_dependency 'curb-fu', '~> 0.6.2'
22
22
  end
@@ -0,0 +1,20 @@
1
+ require 'curb-fu'
2
+
3
+ module CurbFu
4
+ module Response
5
+ # :nodoc: all
6
+ class Base
7
+ def get_fields(key)
8
+ if (match = @headers.find { |k, _| k.downcase == key.downcase })
9
+ [match.last].flatten
10
+ else
11
+ []
12
+ end
13
+ end
14
+
15
+ def [](key)
16
+ get_fields(key).last
17
+ end
18
+ end
19
+ end
20
+ end
data/lib/fastly.rb CHANGED
@@ -3,36 +3,38 @@
3
3
  # License:: Distributes under the same terms as Ruby
4
4
 
5
5
  # A client library for interacting with the Fastly web acceleration service
6
+ require 'fastly/gem_version'
7
+ require 'fastly/util'
8
+ require 'ext/curb_fu/response/base'
9
+ require 'fastly/fetcher'
10
+ require 'fastly/client'
11
+
12
+ require 'fastly/base'
13
+ require 'fastly/belongs_to_service_and_version'
14
+ require 'fastly/backend'
15
+ require 'fastly/cache_setting'
16
+ require 'fastly/condition'
17
+ require 'fastly/customer'
18
+ require 'fastly/director'
19
+ require 'fastly/domain'
20
+ require 'fastly/header'
21
+ require 'fastly/healthcheck'
22
+ require 'fastly/gzip'
23
+ require 'fastly/invoice'
24
+ require 'fastly/match'
25
+ require 'fastly/origin'
26
+ require 'fastly/request_setting'
27
+ require 'fastly/response_object'
28
+ require 'fastly/service'
29
+ require 'fastly/settings'
30
+ require 'fastly/syslog'
31
+ require 'fastly/s3_logging'
32
+ require 'fastly/user'
33
+ require 'fastly/vcl'
34
+ require 'fastly/version'
35
+
36
+ # Top-level Fastly class
6
37
  class Fastly
7
- require 'fastly/gem_version'
8
- require 'fastly/util'
9
- require 'fastly/fetcher'
10
- require 'fastly/client'
11
-
12
- require 'fastly/base'
13
- require 'fastly/belongs_to_service_and_version'
14
- require 'fastly/backend'
15
- require 'fastly/cache_setting'
16
- require 'fastly/condition'
17
- require 'fastly/customer'
18
- require 'fastly/director'
19
- require 'fastly/domain'
20
- require 'fastly/header'
21
- require 'fastly/healthcheck'
22
- require 'fastly/gzip'
23
- require 'fastly/invoice'
24
- require 'fastly/match'
25
- require 'fastly/origin'
26
- require 'fastly/request_setting'
27
- require 'fastly/response_object'
28
- require 'fastly/service'
29
- require 'fastly/settings'
30
- require 'fastly/syslog'
31
- require 'fastly/s3_logging'
32
- require 'fastly/user'
33
- require 'fastly/vcl'
34
- require 'fastly/version'
35
-
36
38
  include Fastly::Fetcher
37
39
 
38
40
  # Create a new Fastly client. Options are
@@ -45,7 +47,7 @@ class Fastly
45
47
  #
46
48
  # Some methods require full username and password rather than just auth token.
47
49
  def initialize(opts)
48
- self.client(opts)
50
+ client(opts)
49
51
  self
50
52
  end
51
53
 
@@ -62,26 +64,17 @@ class Fastly
62
64
 
63
65
  # Return a Customer object representing the customer of the current logged in user.
64
66
  def current_customer
65
- raise Fastly::AuthRequired unless self.authed?
67
+ fail AuthRequired unless authed?
66
68
  @current_customer ||= get(Customer)
67
69
  end
68
70
 
69
71
  # Return a User object representing the current logged in user.
70
72
  # NOTE: requires you to be fully authed - will not work with only an API key
71
73
  def current_user
72
- raise Fastly::FullAuthRequired unless self.fully_authed?
74
+ fail FullAuthRequired unless fully_authed?
73
75
  @current_user ||= get(User)
74
76
  end
75
77
 
76
- # Set the current customer to act as.
77
- # NOTE: this will only work if you're an admin
78
- def set_customer(id)
79
- raise Fastly::FullAuthRequired "You must be fully authed to set the customer" unless self.fully_authed?;
80
- raise Fastly::AdminRequired "You must be an admin to set the customer" unless self.current_user.can_do?(:admin);
81
- @current_customer = nil
82
- client.set_customer(id);
83
- end
84
-
85
78
  # Return a hash representing all commands available.
86
79
  #
87
80
  # Useful for information.
@@ -91,8 +84,7 @@ class Fastly
91
84
 
92
85
  # Purge the specified path from your cache.
93
86
  def purge(path)
94
- res = client.post("/purge/#{path}")
95
- #res = client.post("/purge/", :path => path)
87
+ client.post("/purge/#{path}")
96
88
  end
97
89
 
98
90
  # Fetches historical stats for each of your fastly services and groups the results by service id.
@@ -112,13 +104,13 @@ class Fastly
112
104
  #
113
105
  # See http://docs.fastly.com/docs/stats for details.
114
106
  def stats(opts)
115
- raise Fastly::Error.new("You can't specify a field or a service for an aggregate request") if opts[:aggregate] && (opts[:field] || opts[:service])
107
+ if opts[:aggregate] && (opts[:field] || opts[:service])
108
+ fail Error, "You can't specify a field or a service for an aggregate request"
109
+ end
116
110
 
117
- url = "/stats"
111
+ url = '/stats'
118
112
 
119
- if opts.delete(:aggregate)
120
- url += "/aggregate"
121
- end
113
+ url += '/aggregate' if opts.delete(:aggregate)
122
114
 
123
115
  if service = opts.delete(:service)
124
116
  url += "/service/#{service}"
@@ -128,12 +120,12 @@ class Fastly
128
120
  url += "/field/#{field}"
129
121
  end
130
122
 
131
- client.get_stats(url, opts);
123
+ client.get_stats(url, opts)
132
124
  end
133
125
 
134
126
  # Returns usage information aggregated across all Fastly services and grouped by region.
135
127
  #
136
- # If the :by_service flag is passed then teturns usage information aggregated by service and grouped by service & region.
128
+ # If the :by_service flag is passed then returns usage information aggregated by service and grouped by service & region.
137
129
  #
138
130
  # Other options available are:
139
131
  #
@@ -144,43 +136,43 @@ class Fastly
144
136
  #
145
137
  # See http://docs.fastly.com/docs/stats for details.
146
138
  def usage(opts)
147
- url = "/stats/usage";
148
- url += "_by_service" if opts.delete(:by_service)
139
+ url = '/stats/usage'
140
+ url += '_by_service' if opts.delete(:by_service)
149
141
  client.get_stats(url, opts)
150
142
  end
151
143
 
152
144
  # Fetches the list of codes for regions that are covered by the Fastly CDN service.
153
145
  def regions
154
- client.get_stats("/stats/regions")
146
+ client.get_stats('/stats/regions')
155
147
  end
156
148
 
157
149
  [User, Customer, Backend, CacheSetting, Condition, Director, Domain, Header, Healthcheck, Gzip, Match, Origin, RequestSetting, ResponseObject, Service, S3Logging, Syslog, VCL, Version].each do |klass|
158
150
  type = Util.class_to_path(klass)
151
+
159
152
  # unless the class doesn't have a list path or it already exists
160
153
  unless klass.list_path.nil? || klass.respond_to?("list_#{type}s".to_sym)
161
- self.send :define_method, "list_#{type}s".to_sym do |*args|
162
- list(klass, *args)
163
- end
154
+ send :define_method, "list_#{type}s".to_sym do |*args|
155
+ list(klass, *args)
156
+ end
164
157
  end
165
158
 
166
- self.send :define_method, "get_#{type}".to_sym do |*args|
159
+ send :define_method, "get_#{type}".to_sym do |*args|
167
160
  get(klass, *args)
168
161
  end
169
162
 
170
- self.send :define_method, "create_#{type}".to_sym do |obj|
163
+ send :define_method, "create_#{type}".to_sym do |obj|
171
164
  create(klass, obj)
172
165
  end
173
166
 
174
- self.send :define_method, "update_#{type}".to_sym do |obj|
167
+ send :define_method, "update_#{type}".to_sym do |obj|
175
168
  update(klass, obj)
176
169
  end
177
170
 
178
- self.send :define_method, "delete_#{type}".to_sym do |obj|
171
+ send :define_method, "delete_#{type}".to_sym do |obj|
179
172
  delete(klass, obj)
180
173
  end
181
174
  end
182
175
 
183
-
184
176
  # :method: create_version(opts)
185
177
  # opts must contain a service_id param
186
178
 
@@ -433,7 +425,6 @@ class Fastly
433
425
  # You can also call
434
426
  # version.save!
435
427
 
436
-
437
428
  ##
438
429
  # :method: delete_user(user)
439
430
  # You can also call
@@ -449,25 +440,21 @@ class Fastly
449
440
  # You can also call
450
441
  # service.delete!
451
442
 
452
-
453
443
  ##
454
444
  # :method: delete_version(version)
455
445
  # You can also call
456
446
  # version.delete!
457
447
 
458
-
459
448
  ##
460
449
  # :method:delete_backend(backend)
461
450
  # You can also call
462
451
  # backend.delete!
463
452
 
464
-
465
453
  ##
466
454
  # :method: delete_director(backend)
467
455
  # You can also call
468
456
  # backend.delete!
469
457
 
470
-
471
458
  ##
472
459
  # :method: delete_domain(domain
473
460
  # You can also call
@@ -483,7 +470,6 @@ class Fastly
483
470
  # You can also call
484
471
  # match.delete!(match)
485
472
 
486
-
487
473
  ##
488
474
  # :method: delete_origin(origin)
489
475
  # You can also call
@@ -499,7 +485,6 @@ class Fastly
499
485
  # You can also call
500
486
  # syslog.delete!
501
487
 
502
-
503
488
  ##
504
489
  # :method: delete_vcl(vcl)
505
490
  # You can also call
@@ -616,8 +601,6 @@ class Fastly
616
601
  #
617
602
  # Get a list of all versions
618
603
 
619
-
620
-
621
604
  ##
622
605
  # Attempts to load various config options in the form
623
606
  #
@@ -631,18 +614,19 @@ class Fastly
631
614
  options = {}
632
615
  return options unless File.exist?(file)
633
616
 
634
- File.open(file, "r") do |infile|
635
- while (line = infile.gets) do
617
+ File.open(file, 'r') do |infile|
618
+ while line = infile.gets
636
619
  line.chomp!
637
- next if line =~ /^#/;
638
- next if line =~ /^\s*$/;
639
- next unless line =~ /=/;
620
+ next if line =~ /^#/
621
+ next if line =~ /^\s*$/
622
+ next unless line =~ /=/
640
623
  line.strip!
641
624
  key, val = line.split(/\s*=\s*/, 2)
642
- options[key.to_sym] = val;
625
+ options[key.to_sym] = val
643
626
  end
644
627
  end
645
- options;
628
+
629
+ options
646
630
  end
647
631
 
648
632
  ##
@@ -656,18 +640,20 @@ class Fastly
656
640
  #
657
641
  def self.get_options(*files)
658
642
  options = {}
643
+
659
644
  files.each do |file|
660
645
  next unless File.exist?(file)
661
646
  options = load_config(file)
662
647
  break
663
648
  end
664
649
 
665
- while (ARGV.size>0 && ARGV[0] =~ /^-+(\w+)\=(\w+)$/) do
666
- options[$1.to_sym] = $2;
667
- ARGV.shift;
650
+ while ARGV.size > 0 && ARGV[0] =~ /^-+(\w+)\=(\w+)$/
651
+ options[$1.to_sym] = $2
652
+ ARGV.shift
668
653
  end
669
- raise"Couldn't find options from command line arguments or #{files.join(', ')}" unless options.size>0
670
- options;
654
+
655
+ fail "Couldn't find options from command line arguments or #{files.join(', ')}" unless options.size > 0
656
+
657
+ options
671
658
  end
672
659
  end
673
-