zencoder-fetcher 0.1.7 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,22 +10,12 @@ Run with the
10
10
 
11
11
  Options:
12
12
  * --url, -u: URL to post the Zencoder notification (default: http://localhost:3000)
13
- * --loop, -l: Run the notifier in a loop, as a daemon.
14
- * --seconds, -s <i>: Check every x seconds. (Default: 60)
13
+ * --loop, -l: Run the notifier in a loop.
14
+ * --interval, -n <i>: Check every n seconds. (Default: 60)
15
15
  * --count, -c <i>: Number of notifications to retrieve per page. (Default: 50)
16
16
  * --page, -p <i>: The page to load. (Default: 1)
17
- * --since_job_id, -p <i>: Load notifications since the given job_id. (Default gets all jobs)
18
-
19
- == Note on Patches/Pull Requests
20
-
21
- * Fork the project.
22
- * Make your feature addition or bug fix.
23
- * Add tests for it. This is important so I don't break it in a
24
- future version unintentionally.
25
- * Commit, do not mess with rakefile, version, or history.
26
- (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
27
- * Send me a pull request. Bonus points for topic branches.
17
+ * --since, -m <i>: Load notifications starting since n minutes ago.
28
18
 
29
19
  == Copyright
30
20
 
31
- Copyright (c) 2010 Zencoder. See LICENSE for details.
21
+ Copyright (c) 2010 Zencoder Inc. See LICENSE for details.
@@ -18,13 +18,14 @@ where [options] are:
18
18
  EOS
19
19
  opt :url, "URL to post the Zencoder notification", :short => 'u', :type => String, :default => "http://localhost:3000"
20
20
  opt :loop, "Run the notifier in a loop.", :short => 'l', :default => false
21
- opt :seconds, "Check every x seconds.", :short => 's', :type => Integer, :default => 60
21
+ opt :interval, "Check every x seconds.", :short => 'n', :type => Integer, :default => 60
22
22
  opt :count, "Number of notifications to retrieve per page.", :short => 'c', :type => Integer, :default => 50
23
23
  opt :page, "The page to load.", :short => 'p', :type => Integer, :default => 1
24
- opt :since_job_id, "Load notifications since the given job_id.", :short => 'j', :type => Integer, :default => nil
25
- opt :all, "Get all records on each request, rather than only new ones.", :short => 'a', :default => false
24
+ opt :since, "Load notifications starting since _n_ minutes ago.", :short => 'm', :type => Integer, :default => nil
25
+ opt :endpoint, "Zencoder endpoint to use. Defaults to https://app.zencoder.com/.", :short => 'e', :type => String
26
26
  end
27
27
 
28
+
28
29
  #
29
30
  # Validate input
30
31
  #
@@ -38,43 +39,42 @@ Usage:
38
39
  zencoder_fetcher [options] <api_key>
39
40
 
40
41
  EOS
41
- exit -1
42
+ exit 1
42
43
  end
43
44
 
45
+
44
46
  #
45
47
  # Run Zencoder Notifier
46
48
  #
47
49
 
48
- options = {}
49
- options[:api_key] = ARGV[0]
50
- options[:url] = opts[:url]
51
- options[:count] = opts[:count]
52
- options[:page] = opts[:page]
53
- options[:all] = opts[:all]
54
- options[:since_job_id] = opts[:since_job_id]
50
+ options = {}
51
+ options[:api_key] = ARGV[0]
52
+ options[:url] = opts[:url]
53
+ options[:count] = opts[:count]
54
+ options[:page] = opts[:page]
55
+ options[:since] = (opts[:since] && (Time.now.utc - (opts[:since].to_i * 60))) || nil
56
+ options[:endpoint] = opts[:endpoint]
55
57
 
56
58
  begin
57
59
  if opts[:loop]
58
- @since_job_id = 0
60
+ @since = options[:since]
59
61
  loop do
60
- begin
61
- puts "Checking Zencoder for Notifications at #{Time.now}"
62
- options.merge!({:since_job_id => @since_job_id})
63
- last_job = ZencoderFetcher.request(options)
64
- @since_job_id = last_job if last_job > @since_job_id
65
- sleep [10,opts[:seconds]].max
66
- rescue Exception => e
67
- raise e
68
- end
62
+ puts "Checking Zencoder for Notifications" << (@since ? " since #{@since.utc.strftime('%b %e, %Y @ %H:%M:%S %Z')}" : "")
63
+ options.merge!(:since => @since)
64
+ @since = ZencoderFetcher.request(options)
65
+ sleep [10, opts[:interval]].max
69
66
  end
70
67
  else
71
68
  ZencoderFetcher.request(options)
72
69
  end
73
70
  rescue SystemExit, Interrupt
74
- raise "Quitting..."
71
+ puts "Quitting..."
72
+ exit 0
73
+ rescue FetcherError
74
+ exit 1
75
75
  rescue Exception => e
76
76
  puts e.class
77
77
  puts e.message
78
78
  puts e.backtrace
79
- raise
79
+ exit 1
80
80
  end
@@ -1,48 +1,53 @@
1
1
  require 'rubygems'
2
2
  require 'httparty'
3
3
  require 'json'
4
+ require 'time'
4
5
 
5
6
  module ZencoderFetcher
6
- FETCHER_VERSION = [0,1] unless defined?(FETCHER_VERSION)
7
-
7
+ FETCHER_VERSION = [0,2] unless defined?(FETCHER_VERSION)
8
+
8
9
  def self.version
9
10
  FETCHER_VERSION.join(".")
10
11
  end
11
-
12
+
12
13
  def self.request(options={})
13
- api_key = options[:api_key]
14
- post_uri = options[:url] ? options[:url] : "http://localhost:3000/"
15
- per_page = options[:count] ? options[:count] : 50
16
- page = options[:page] ? options[:page] : 1
17
- since_job_id = (options[:all] || options[:since_job_id].to_s == "") ? 0 : options[:since_job_id]
18
-
19
- begin
20
- response = HTTParty.get("http://app.zencoder.com/api/notifications.json?api_key=#{api_key}&per_page=#{per_page}&page=#{page}&since_id=#{since_job_id}")
21
-
22
- if response.body.is_a?(String)
23
- if response.body =~ /\{"errors"/
24
- puts JSON.parse(response.body)["errors"]
25
- else
26
- i = 0
27
- latest_job_id = 0
28
- JSON.parse(response.body).each do |job|
29
- options = {:headers => {"Content-type" => "application/json"}, :body => job.to_json}
30
- begin
31
- HTTParty.post(post_uri, options)
32
- latest_job_id = job["job"]["id"].to_i if job["job"]["id"].to_i > latest_job_id
33
- i += 1
34
- rescue Errno::ECONNREFUSED => e
35
- raise Exception, "Unable to connect to your local server at #{post_uri}. Is it running?"
36
- end
37
- end
38
- puts "#{i} notifications retrieved and posted to #{post_uri}"
39
- return latest_job_id
14
+ query = {
15
+ "api_key" => options[:api_key],
16
+ "per_page" => options[:count] || 50,
17
+ "page" => options[:page] || 1
18
+ }
19
+ query["since"] = options[:since].iso8601 if options[:since]
20
+ query = query.map{|k,v| "#{k}=#{v}" }.join("&")
21
+
22
+ local_url = options[:url] || "http://localhost:3000/"
23
+
24
+ response = HTTParty.get("https://#{options[:endpoint] || 'app'}.zencoder.com/api/notifications.json?#{query}",
25
+ :headers => { "HTTP_X_FETCHER_VERSION" => version })
26
+
27
+ if response["errors"]
28
+ puts "There was an error fetching notifications:"
29
+ puts response.body.to_s
30
+ raise
31
+ else
32
+ response["notifications"].each do |notification|
33
+ begin
34
+ HTTParty.post(local_url,
35
+ :body => notification.to_json,
36
+ :headers => { "Content-type" => "application/json" })
37
+ rescue Errno::ECONNREFUSED => e
38
+ puts "Unable to connect to your local server at #{local_url}. Is it running?"
39
+ raise FetcherLocalConnectionError
40
40
  end
41
- else
42
- puts "No notifications found."
43
41
  end
44
- rescue Exception => e
45
- raise e
42
+ puts "Notifications retrieved: #{response["notifications"].size}"
43
+ puts "Posted to: #{local_url}" if response["notifications"].size > 0
44
+ puts
45
+
46
+ Time.parse(response["sent_at"])
46
47
  end
47
48
  end
48
- end
49
+ end
50
+
51
+
52
+ class FetcherError < StandardError; end
53
+ class FetcherLocalConnectionError < FetcherError; end
metadata CHANGED
@@ -1,25 +1,25 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zencoder-fetcher
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
5
- prerelease: false
4
+ hash: 15
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 7
10
- version: 0.1.7
8
+ - 2
9
+ version: "0.2"
11
10
  platform: ruby
12
11
  authors:
13
- - chriswarren
12
+ - Chris Warren
13
+ - Brandon Arbini
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-06-28 00:00:00 -05:00
19
- default_executable: zencoder_fetcher
18
+ date: 2011-07-14 00:00:00 -07:00
19
+ default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: thoughtbot-shoulda
22
+ name: trollop
23
23
  prerelease: false
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
25
  none: false
@@ -30,7 +30,7 @@ dependencies:
30
30
  segments:
31
31
  - 0
32
32
  version: "0"
33
- type: :development
33
+ type: :runtime
34
34
  version_requirements: *id001
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: httparty
@@ -60,48 +60,28 @@ dependencies:
60
60
  version: "0"
61
61
  type: :runtime
62
62
  version_requirements: *id003
63
- - !ruby/object:Gem::Dependency
64
- name: trollop
65
- prerelease: false
66
- requirement: &id004 !ruby/object:Gem::Requirement
67
- none: false
68
- requirements:
69
- - - ">="
70
- - !ruby/object:Gem::Version
71
- hash: 3
72
- segments:
73
- - 0
74
- version: "0"
75
- type: :runtime
76
- version_requirements: *id004
77
63
  description: Fetches notifications from Zencoder for local development where Zencoder is unable to communicate to the server, usually because it's localhost.
78
- email: chris@zencoder.com
64
+ email:
65
+ - chris@zencoder.com
66
+ - b@zencoder.com
79
67
  executables:
80
68
  - zencoder_fetcher
81
69
  extensions: []
82
70
 
83
- extra_rdoc_files:
84
- - LICENSE
85
- - README.rdoc
71
+ extra_rdoc_files: []
72
+
86
73
  files:
87
- - .document
88
- - .gitignore
89
- - LICENSE
90
- - README.rdoc
91
- - Rakefile
92
- - VERSION
93
74
  - bin/zencoder_fetcher
94
75
  - lib/zencoder_fetcher.rb
95
- - test/helper.rb
96
- - test/test_zencoder-fetcher.rb
97
- - zencoder-fetcher.gemspec
76
+ - LICENSE
77
+ - README.rdoc
98
78
  has_rdoc: true
99
79
  homepage: http://github.com/zencoder/zencoder-fetcher
100
80
  licenses: []
101
81
 
102
82
  post_install_message:
103
- rdoc_options:
104
- - --charset=UTF-8
83
+ rdoc_options: []
84
+
105
85
  require_paths:
106
86
  - lib
107
87
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -125,10 +105,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
105
  requirements: []
126
106
 
127
107
  rubyforge_project:
128
- rubygems_version: 1.3.7
108
+ rubygems_version: 1.5.0
129
109
  signing_key:
130
110
  specification_version: 3
131
111
  summary: Fetches notifications from Zencoder for local development.
132
- test_files:
133
- - test/helper.rb
134
- - test/test_zencoder-fetcher.rb
112
+ test_files: []
113
+
data/.document DELETED
@@ -1,5 +0,0 @@
1
- README.rdoc
2
- lib/**/*.rb
3
- bin/*
4
- features/**/*.feature
5
- LICENSE
data/.gitignore DELETED
@@ -1,21 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC
data/Rakefile DELETED
@@ -1,57 +0,0 @@
1
- require 'rubygems'
2
- require 'rake'
3
-
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "zencoder-fetcher"
8
- gem.summary = %Q{Fetches notifications from Zencoder for local development.}
9
- gem.description = %Q{Fetches notifications from Zencoder for local development where Zencoder is unable to communicate to the server, usually because it's localhost.}
10
- gem.email = "chris@zencoder.com"
11
- gem.homepage = "http://github.com/zencoder/zencoder-fetcher"
12
- gem.authors = ["chriswarren"]
13
- gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
14
- gem.add_dependency 'httparty'
15
- gem.add_dependency 'json'
16
- gem.add_dependency 'trollop'
17
- gem.executables = %w( zencoder_fetcher)
18
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
19
- end
20
- Jeweler::GemcutterTasks.new
21
- rescue LoadError
22
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
23
- end
24
-
25
- require 'rake/testtask'
26
- Rake::TestTask.new(:test) do |test|
27
- test.libs << 'lib' << 'test'
28
- test.pattern = 'test/**/test_*.rb'
29
- test.verbose = true
30
- end
31
-
32
- begin
33
- require 'rcov/rcovtask'
34
- Rcov::RcovTask.new do |test|
35
- test.libs << 'test'
36
- test.pattern = 'test/**/test_*.rb'
37
- test.verbose = true
38
- end
39
- rescue LoadError
40
- task :rcov do
41
- abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
42
- end
43
- end
44
-
45
- task :test => :check_dependencies
46
-
47
- task :default => :test
48
-
49
- require 'rake/rdoctask'
50
- Rake::RDocTask.new do |rdoc|
51
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
52
-
53
- rdoc.rdoc_dir = 'rdoc'
54
- rdoc.title = "zencoder-notifier #{version}"
55
- rdoc.rdoc_files.include('README*')
56
- rdoc.rdoc_files.include('lib/**/*.rb')
57
- end
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.1.7
@@ -1,10 +0,0 @@
1
- require 'rubygems'
2
- require 'test/unit'
3
- require 'shoulda'
4
-
5
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
- $LOAD_PATH.unshift(File.dirname(__FILE__))
7
- require 'zencoder-notifier'
8
-
9
- class Test::Unit::TestCase
10
- end
@@ -1,7 +0,0 @@
1
- require 'helper'
2
-
3
- class TestZencoderNotifier < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
6
- end
7
- end
@@ -1,66 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = %q{zencoder-fetcher}
8
- s.version = "0.1.7"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["chriswarren"]
12
- s.date = %q{2010-06-28}
13
- s.default_executable = %q{zencoder_fetcher}
14
- s.description = %q{Fetches notifications from Zencoder for local development where Zencoder is unable to communicate to the server, usually because it's localhost.}
15
- s.email = %q{chris@zencoder.com}
16
- s.executables = ["zencoder_fetcher"]
17
- s.extra_rdoc_files = [
18
- "LICENSE",
19
- "README.rdoc"
20
- ]
21
- s.files = [
22
- ".document",
23
- ".gitignore",
24
- "LICENSE",
25
- "README.rdoc",
26
- "Rakefile",
27
- "VERSION",
28
- "bin/zencoder_fetcher",
29
- "lib/zencoder_fetcher.rb",
30
- "test/helper.rb",
31
- "test/test_zencoder-fetcher.rb",
32
- "zencoder-fetcher.gemspec"
33
- ]
34
- s.homepage = %q{http://github.com/zencoder/zencoder-fetcher}
35
- s.rdoc_options = ["--charset=UTF-8"]
36
- s.require_paths = ["lib"]
37
- s.rubygems_version = %q{1.3.7}
38
- s.summary = %q{Fetches notifications from Zencoder for local development.}
39
- s.test_files = [
40
- "test/helper.rb",
41
- "test/test_zencoder-fetcher.rb"
42
- ]
43
-
44
- if s.respond_to? :specification_version then
45
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
46
- s.specification_version = 3
47
-
48
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
49
- s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
50
- s.add_runtime_dependency(%q<httparty>, [">= 0"])
51
- s.add_runtime_dependency(%q<json>, [">= 0"])
52
- s.add_runtime_dependency(%q<trollop>, [">= 0"])
53
- else
54
- s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
55
- s.add_dependency(%q<httparty>, [">= 0"])
56
- s.add_dependency(%q<json>, [">= 0"])
57
- s.add_dependency(%q<trollop>, [">= 0"])
58
- end
59
- else
60
- s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
61
- s.add_dependency(%q<httparty>, [">= 0"])
62
- s.add_dependency(%q<json>, [">= 0"])
63
- s.add_dependency(%q<trollop>, [">= 0"])
64
- end
65
- end
66
-