rbvimeo 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,7 @@
1
+ == 0.2.1 / 2008-10-13
2
+ * Lowered flog store
3
+ == 0.2.0 / 2008-08-26
4
+ * Switched to Hpricot for XML parsing.
5
+ * Comments are now lazily loaded and include memoization.
1
6
  == 0.1.0 / 2008-04-04
2
-
3
- * Initial Release
7
+ * Initial Release.
data/README.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  rbVimeo
2
- by Matt Pruitt
3
- www.guitsaru.com
2
+ by Matt Pruitt
3
+ www.guitsaru.com
4
4
 
5
5
  == DESCRIPTION:
6
6
 
@@ -17,6 +17,8 @@ vid = vimeo.video(video_id)
17
17
 
18
18
  == INSTALL:
19
19
 
20
+ To install, run 'gem install rbvimeo'
21
+
20
22
  In order to run the specs, first make a test_settings.yml file (a sample is
21
23
  provided) using your api key and api secret.
22
24
 
@@ -24,7 +26,7 @@ provided) using your api key and api secret.
24
26
 
25
27
  (The MIT License)
26
28
 
27
- Copyright (c) 2008
29
+ Copyright (c) 2008 Matt Pruitt
28
30
 
29
31
  Permission is hereby granted, free of charge, to any person obtaining
30
32
  a copy of this software and associated documentation files (the
data/Rakefile CHANGED
@@ -13,8 +13,9 @@ PROJ.name = 'rbvimeo'
13
13
  PROJ.authors = 'Matt Pruitt'
14
14
  PROJ.email = 'guitsaru@gmail.com'
15
15
  PROJ.url = 'www.guitsaru.com'
16
- PROJ.rubyforge_name = 'rbvimeo'
17
- PROJ.version = '0.1.0'
18
- PROJ.spec_opts << '--color'
16
+ PROJ.rubyforge.name = 'rbvimeo'
17
+ PROJ.version = '0.2.0'
18
+ PROJ.spec.opts << '--color'
19
+ PROJ.gem.dependencies << 'hpricot'
19
20
 
20
21
  # EOF
data/bin/rbVimeo CHANGED
@@ -1,15 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require File.expand_path(
4
- File.join(File.dirname(__FILE__), '..', 'lib', 'rbVimeo'))
5
- require File.expand_path(
6
- File.join(File.dirname(__FILE__), '..', 'lib', 'Video'))
7
- require File.expand_path(
8
- File.join(File.dirname(__FILE__), '..', 'lib', 'Comment'))
9
- require File.expand_path(
10
- File.join(File.dirname(__FILE__), '..', 'lib', 'Thumbnail'))
11
- require File.expand_path(
12
- File.join(File.dirname(__FILE__), '..', 'lib', 'User'))
13
- # Put your code here
3
+ require '../lib/rbVimeo'
14
4
 
15
5
  # EOF
data/lib/User.rb CHANGED
@@ -1,5 +1,3 @@
1
- require File.join(File.dirname(__FILE__), %w[rbVimeo])
2
-
3
1
  module RBVIMEO
4
2
  class User
5
3
  attr_accessor :id, :username, :fullname
data/lib/Video.rb CHANGED
@@ -1,15 +1,12 @@
1
- require 'net/http'
2
- require 'rexml/document'
3
- require File.join(File.dirname(__FILE__), %w[rbVimeo])
4
- require File.join(File.dirname(__FILE__), %w[User])
5
- require File.join(File.dirname(__FILE__), %w[Thumbnail])
6
- require File.join(File.dirname(__FILE__), %w[Comment])
1
+ require 'rubygems'
2
+ require 'hpricot'
3
+ require 'open-uri'
7
4
 
8
5
  module RBVIMEO
9
6
  class Video
10
7
  attr_reader :id, :title, :caption, :upload_date, :likes, :plays
11
8
  attr_reader :num_comments, :width, :height, :owner, :tags, :url
12
- attr_reader :thumbs, :comments
9
+ attr_reader :thumbs
13
10
 
14
11
  # Fetches data about a video from the Vimeo site
15
12
  # id is the id of the the Vimeo video
@@ -19,52 +16,50 @@ module RBVIMEO
19
16
  # @vimeo = RBVIMEO::Vimeo.new api_key, api_secret
20
17
  # video = RBVIMEO::Video.new 339189, @vimeo
21
18
  def initialize id, vimeo, xml=nil
22
- @thumbs = Array.new
23
- @comments = Array.new
19
+ @thumbs = []
20
+ @comments = []
24
21
  @id = id
22
+ @vimeo = vimeo
23
+
25
24
  url = vimeo.generate_url({"method" => "vimeo.videos.getInfo",
26
25
  "video_id" => id, "api_key" => vimeo.api_key}, "read")
27
26
  unless xml
28
27
  #does not get covered by specs because we get an internal xml file
29
- xml_data = Net::HTTP.get_response(URI.parse(url)).body
28
+ xml_doc = Hpricot(open(url))
30
29
  else
31
- xml_data = File.open(xml)
30
+ xml_doc = open(xml) {|file| Hpricot(file)}
32
31
  end
33
- xml_doc = REXML::Document.new(xml_data)
34
32
 
35
33
  return @id = -1 if parse_xml(xml_doc).nil?
36
- get_comments id, vimeo, xml
37
-
38
34
  end
39
35
 
40
36
  # Parses data using the xml recieved from the Vimeo REST API
41
37
  # Should not need to be called by anything other than the initialize method
42
38
  def parse_xml xml_doc
43
- if xml_doc.elements["rsp/video/title"].nil?
39
+ if xml_doc.at("title").nil?
44
40
  return nil
45
- else
46
- @title = xml_doc.elements["rsp/video/title"].text
41
+ else
47
42
  @id = id
48
- @caption = xml_doc.elements["rsp/video/caption"].text
49
- @upload_date = xml_doc.elements["rsp/video/upload_date"].text
50
- @likes = xml_doc.elements["rsp/video/number_of_likes"].text.to_i
51
- @plays = xml_doc.elements["rsp/video/number_of_plays"].text.to_i
52
- @width = xml_doc.elements["rsp/video/width"].text.to_i
53
- @height = xml_doc.elements["rsp/video/height"].text.to_i
54
- @num_comments =
55
- xml_doc.elements["rsp/video/number_of_comments"].text.to_i
43
+ @title = xml_doc.at("title").inner_html
44
+ @caption = xml_doc.at("caption").inner_html
45
+ @upload_date = xml_doc.at("upload_date").inner_html
46
+ @likes = xml_doc.at("number_of_likes").inner_html.to_i
47
+ @plays = xml_doc.at("number_of_plays").inner_html.to_i
48
+ @width = xml_doc.at("width").inner_html.to_i
49
+ @height = xml_doc.at("height").inner_html.to_i
50
+ @num_comments = xml_doc.at("number_of_comments").inner_html.to_i
51
+
56
52
  @owner = User.new
57
- @owner.id = xml_doc.elements["rsp/video/owner"].attributes["id"].to_i
58
- @owner.username =
59
- xml_doc.elements["rsp/video/owner"].attributes["username"]
60
- @owner.fullname =
61
- xml_doc.elements["rsp/video/owner"].attributes["fullname"]
62
- @url = xml_doc.elements["rsp/video/urls/url"].text
63
-
64
- xml_doc.elements.each('rsp/video/thumbnails/thumbnail') do |thumb|
65
- url = thumb.text
66
- w = thumb.attributes["width"].to_i
67
- h = thumb.attributes["height"].to_i
53
+ @owner.id = xml_doc.at("owner").attributes["id"].to_i
54
+ @owner.username = xml_doc.at("owner").attributes["username"]
55
+ @owner.fullname = xml_doc.at("owner").attributes["fullname"]
56
+
57
+ @url = xml_doc.at("url").inner_html
58
+
59
+ (xml_doc/:thumbnail).each do |thumbnail|
60
+ url = thumbnail.inner_html
61
+ w = thumbnail.attributes['width'].to_i
62
+ h = thumbnail.attributes['height'].to_i
68
63
  thumbnail = Thumbnail.new(url, w, h)
69
64
  @thumbs << thumbnail
70
65
  end
@@ -77,59 +72,57 @@ module RBVIMEO
77
72
  # returns an Array of comments
78
73
  #
79
74
  # To load a movie with vimeo id 339189:
80
- # @vimeo = RBVIMEO::Vimeo.new api_key, api_secret
75
+ #
81
76
  # comments = video.comments 339189, @vimeo
82
- def get_comments id, vimeo, xml=nil
83
- comments = Array.new
84
- url = vimeo.generate_url({"method" => "vimeo.videos.comments.getList",
85
- "video_id" => id, "api_key" => vimeo.api_key}, "read")
77
+ def get_comments xml=nil
78
+ comments = []
79
+ url = @vimeo.generate_url({"method" => "vimeo.videos.comments.getList",
80
+ "video_id" => @id, "api_key" => @vimeo.api_key}, "read")
81
+
86
82
  unless xml
87
- #does not get covered by specs because we get an internal xml file
88
- xml_data = Net::HTTP.get_response(URI.parse(url)).body
83
+ # Does not get covered by specs because we get an internal xml file
84
+ xml_doc = Hpricot.XML(open(url))
89
85
  else
90
- xml_data = File.open(File.join(File.dirname(xml), File.basename(xml, '.xml')+'.comments.xml'))
86
+ xml_doc = open(xml) {|file| Hpricot.XML(file)}
91
87
  end
92
- xml_doc = REXML::Document.new(xml_data)
93
-
94
- xml_doc.elements.each('rsp/comments/comment') do |comment|
95
- id = comment.attributes["id"].to_i
96
- author = comment.attributes["author"]
97
- authorname = comment.attributes["authorname"]
98
- date = comment.attributes["datecreate"]
99
- url = comment.attributes["permalink"]
100
- text = comment.text
101
- @portraits = Array.new
102
- xml_doc.elements.each('rsp/comments/comment/portraits/portrait') do |thumb|
103
- portrait_url = thumb.text
104
- w = thumb.attributes["width"].to_i
105
- h = thumb.attributes["height"].to_i
88
+
89
+ (xml_doc/:comment).each do |comment|
90
+ text = comment.children.select{|e| e.text?}.join
91
+ id = comment.attributes['id'].to_i
92
+ author = comment.attributes['author']
93
+ authorname = comment.attributes['authorname']
94
+ date = comment.attributes['datecreate']
95
+ url = comment.attributes['permalink']
96
+
97
+ @portraits = []
98
+ (comment/'portraits'/'portrait').each do |thumb|
99
+ portrait_url = thumb.inner_html
100
+ w = thumb.attributes['width'].to_i
101
+ h = thumb.attributes['height'].to_i
106
102
  thumbnail = Thumbnail.new(portrait_url, w, h)
107
103
  @portraits << thumbnail
108
104
  end
109
105
  com = Comment.new(id, author, authorname, date, url, text, @portraits)
110
106
  @comments << com
111
107
  end
108
+ return self
112
109
  end
113
110
 
114
111
  # Returns the code to embed the video
115
112
  def embed width, height
116
- w = width.to_s
117
- h = height.to_s
118
- id = @id.to_s
119
- string = ''
120
- string += '<object type="application/x-shockwave-flash" width='
121
- string += w + '" height="' + h + '"'
122
- string += 'data="http://www.vimeo.com/moogaloop.swf?clip_id=' + id
123
- string += '&amp;server=www.vimeo.com&amp;fullscreen=0&amp;show_title=0'
124
- string += '&amp;show_byline=0&amp;showportrait=0&amp;color=00ADEF">'
125
- string += '<param name="quality" value="best" />'
126
- string += '<param name="allowfullscreen" value="false" />'
127
- string += '<param name="scale" value="showAll" />'
128
- string += '<param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id='
129
- string += id + '&amp;server=www.vimeo.com&amp;fullscreen=0&amp;'
130
- string += 'show_title=0&amp;show_byline=0&amp;showportrait=0&amp;color=00ADEF" /></object>'
113
+ string = <<EOF
114
+ <object type="application/x-shockwave-flash" width=#{width} height=#{height} data="http://www.vimeo.com/moogaloop.swf?clip_id=#{@id}&server=www.vimeo.com&fullscreen=0&show_title=0'&show_byline=0&showportrait=0&color=00ADEF">
115
+ <param name="quality" value="best" />
116
+ <param name="allowfullscreen" value="false" />
117
+ <param name="scale" value="showAll" />
118
+ <param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=#{@id}&server=www.vimeo.com&fullscreen=0&show_title=0&show_byline=0&showportrait=0&color=00ADEF" /></object>
119
+ EOF
120
+ string.gsub("\n", "")
121
+ end
131
122
 
132
- return string
123
+ def comments xml=nil
124
+ get_comments(xml) if @comments.empty?
125
+ return @comments
133
126
  end
134
127
  end
135
128
  end
data/lib/rbVimeo.rb CHANGED
@@ -5,7 +5,12 @@
5
5
  require 'digest/md5'
6
6
  require 'net/http'
7
7
  require 'rexml/document'
8
- require File.join(File.dirname(__FILE__), %w[Video])
8
+
9
+ require 'Video'
10
+ require 'Thumbnail'
11
+ require 'User'
12
+ require 'Comment'
13
+
9
14
 
10
15
  module RBVIMEO
11
16
  class Vimeo
@@ -14,6 +19,7 @@ module RBVIMEO
14
19
  @@API_REST_URL = "http://www.vimeo.com/api/rest"
15
20
  @@API_AUTH_URL = "http://www.vimeo.com/services/auth/"
16
21
  @@API_UPLOAD_URL = "http://www.vimeo.com/services/upload/"
22
+
17
23
  # api_key and api_secret should both be generated on www.vimeo.com
18
24
  def initialize api_key, api_secret
19
25
  @api_key = api_key
@@ -24,12 +30,12 @@ module RBVIMEO
24
30
  # "video_id" => "339189", "api_key" => @vimeo.api_key})
25
31
  # This example returns a url to the xml for the Vimeo video with id 339189
26
32
  def generate_url parameters, permissions = nil
27
- url = @@API_REST_URL + "?api_key=" + @api_key
33
+ url = "#{@@API_REST_URL}?api_key=#{@api_key}"
28
34
  params = parameters.sort
29
35
  params.each do |param|
30
- url += "&" + param[0].to_s + "=" + param[1].to_s unless param[0].to_s == "api_key"
36
+ url += "&#{param[0]}=#{param[1]}" unless param[0].to_s == "api_key"
31
37
  end
32
- url += "&api_sig=" + generate_signature(parameters)
38
+ url += "&api_sig=#{generate_signature(parameters)}"
33
39
  return url
34
40
  end
35
41
 
@@ -51,8 +57,11 @@ module RBVIMEO
51
57
  return nil if vid.id == -1
52
58
  return vid
53
59
  end
60
+
61
+ # Provides easier access to RBVIMEO::User
62
+ # user = @vimeo.user
54
63
  def user
55
64
  return User.new
56
65
  end
57
66
  end
58
- end
67
+ end
data/spec/Video_spec.rb CHANGED
@@ -47,7 +47,7 @@ describe Video, "initialization" do
47
47
  @vid.comments[0].author.should eql("ctd3")
48
48
  @vid.comments[0].authorname.should eql("CTD3")
49
49
  @vid.comments[0].date.should eql("2007-10-12 17:47:13")
50
- @vid.comments[0].url.should eql("http://www.vimeo.com/339189#comment_265313")
50
+ @vid.comments[0].url.should eql("http://vimeo.com/339189#comment_265313")
51
51
  @vid.comments[0].text.should eql("Sure is! Great changes!")
52
52
  @vid.comments[0].portraits[0].url.should eql("http://80.media.vimeo.com/d1/5/35/44/42/portrait-35444268.jpg")
53
53
  @vid.comments[0].portraits[0].width.should eql(24)
data/tasks/ann.rake CHANGED
@@ -9,12 +9,16 @@ require 'time'
9
9
 
10
10
  namespace :ann do
11
11
 
12
- file PROJ.ann_file do
13
- puts "Generating #{PROJ.ann_file}"
14
- File.open(PROJ.ann_file,'w') do |fd|
12
+ # A prerequisites task that all other tasks depend upon
13
+ task :prereqs
14
+
15
+ file PROJ.ann.file do
16
+ ann = PROJ.ann
17
+ puts "Generating #{ann.file}"
18
+ File.open(ann.file,'w') do |fd|
15
19
  fd.puts("#{PROJ.name} version #{PROJ.version}")
16
20
  fd.puts(" by #{Array(PROJ.authors).first}") if PROJ.authors
17
- fd.puts(" #{PROJ.url}") if PROJ.url
21
+ fd.puts(" #{PROJ.url}") if PROJ.url.valid?
18
22
  fd.puts(" (the \"#{PROJ.release_name}\" release)") if PROJ.release_name
19
23
  fd.puts
20
24
  fd.puts("== DESCRIPTION")
@@ -23,23 +27,24 @@ namespace :ann do
23
27
  fd.puts
24
28
  fd.puts(PROJ.changes.sub(%r/^.*$/, '== CHANGES'))
25
29
  fd.puts
26
- PROJ.ann_paragraphs.each do |p|
30
+ ann.paragraphs.each do |p|
27
31
  fd.puts "== #{p.upcase}"
28
32
  fd.puts
29
33
  fd.puts paragraphs_of(PROJ.readme_file, p).join("\n\n")
30
34
  fd.puts
31
35
  end
32
- fd.puts PROJ.ann_text if PROJ.ann_text
36
+ fd.puts ann.text if ann.text
33
37
  end
34
38
  end
35
39
 
36
40
  desc "Create an announcement file"
37
- task :announcement => PROJ.ann_file
41
+ task :announcement => ['ann:prereqs', PROJ.ann.file]
38
42
 
39
43
  desc "Send an email announcement"
40
- task :email => PROJ.ann_file do
41
- from = PROJ.ann_email[:from] || PROJ.email
42
- to = Array(PROJ.ann_email[:to])
44
+ task :email => ['ann:prereqs', PROJ.ann.file] do
45
+ ann = PROJ.ann
46
+ from = ann.email[:from] || PROJ.email
47
+ to = Array(ann.email[:to])
43
48
 
44
49
  ### build a mail header for RFC 822
45
50
  rfc822msg = "From: #{from}\n"
@@ -49,11 +54,11 @@ namespace :ann do
49
54
  rfc822msg << "\n"
50
55
  rfc822msg << "Date: #{Time.new.rfc822}\n"
51
56
  rfc822msg << "Message-Id: "
52
- rfc822msg << "<#{"%.8f" % Time.now.to_f}@#{PROJ.ann_email[:domain]}>\n\n"
53
- rfc822msg << File.read(PROJ.ann_file)
57
+ rfc822msg << "<#{"%.8f" % Time.now.to_f}@#{ann.email[:domain]}>\n\n"
58
+ rfc822msg << File.read(ann.file)
54
59
 
55
60
  params = [:server, :port, :domain, :acct, :passwd, :authtype].map do |key|
56
- PROJ.ann_email[key]
61
+ ann.email[key]
57
62
  end
58
63
 
59
64
  params[3] = PROJ.email if params[3].nil?
@@ -71,6 +76,6 @@ end # namespace :ann
71
76
  desc 'Alias to ann:announcement'
72
77
  task :ann => 'ann:announcement'
73
78
 
74
- CLOBBER << PROJ.ann_file
79
+ CLOBBER << PROJ.ann.file
75
80
 
76
81
  # EOF
@@ -9,7 +9,7 @@ task :notes do
9
9
  end
10
10
 
11
11
  namespace :notes do
12
- PROJ.annotation_tags.each do |tag|
12
+ PROJ.notes.tags.each do |tag|
13
13
  desc "Enumerate all #{tag} annotations"
14
14
  task tag.downcase.to_sym do
15
15
  Bones::AnnotationExtractor.enumerate(PROJ, tag)
data/tasks/bones.rake CHANGED
@@ -1,40 +1,21 @@
1
1
  # $Id$
2
2
 
3
- require 'pp'
4
- require 'stringio'
3
+ if HAVE_BONES
5
4
 
6
5
  namespace :bones do
7
6
 
8
7
  desc 'Show the PROJ open struct'
9
8
  task :debug do |t|
10
- atr = if ARGV.length == 2
9
+ atr = if t.application.top_level_tasks.length == 2
11
10
  t.application.top_level_tasks.pop
12
11
  end
13
- sio = StringIO.new
14
- sep = "\n" + ' '*27
15
- fmt = "%23s => %s"
16
12
 
17
- if atr
18
- PP.pp(PROJ.send(atr.to_sym), sio, 49)
19
- sio.seek 0
20
- val = sio.read
21
- val = val.split("\n").join(sep)
22
-
23
- puts fmt % [atr, val]
24
- else
25
- h = PROJ.instance_variable_get(:@table)
26
- h.keys.map {|k| k.to_s}.sort.each do |k|
27
- sio.truncate 0
28
- PP.pp(h[k.to_sym], sio, 49)
29
- sio.seek 0
30
- val = sio.read
31
- val = val.split("\n").join(sep)
32
-
33
- puts fmt % [k, val]
34
- end
35
- end
13
+ if atr then Bones::Debug.show_attr(PROJ, atr)
14
+ else Bones::Debug.show PROJ end
36
15
  end
37
16
 
38
17
  end # namespace :bones
39
18
 
19
+ end # HAVE_BONES
20
+
40
21
  # EOF
data/tasks/doc.rake CHANGED
@@ -6,12 +6,12 @@ namespace :doc do
6
6
 
7
7
  desc 'Generate RDoc documentation'
8
8
  Rake::RDocTask.new do |rd|
9
- rd.main = PROJ.rdoc_main
10
- rd.rdoc_dir = PROJ.rdoc_dir
9
+ rd.main = PROJ.rdoc.main
10
+ rd.rdoc_dir = PROJ.rdoc.dir
11
11
 
12
- incl = Regexp.new(PROJ.rdoc_include.join('|'))
13
- excl = Regexp.new(PROJ.rdoc_exclude.join('|'))
14
- files = PROJ.files.find_all do |fn|
12
+ incl = Regexp.new(PROJ.rdoc.include.join('|'))
13
+ excl = Regexp.new(PROJ.rdoc.exclude.join('|'))
14
+ files = PROJ.gem.files.find_all do |fn|
15
15
  case fn
16
16
  when excl; false
17
17
  when incl; true
@@ -20,10 +20,10 @@ namespace :doc do
20
20
  rd.rdoc_files.push(*files)
21
21
 
22
22
  title = "#{PROJ.name}-#{PROJ.version} Documentation"
23
- title = "#{PROJ.rubyforge_name}'s " + title if PROJ.rubyforge_name != title
23
+ title = "#{PROJ.rubyforge.name}'s " + title if PROJ.rubyforge.name != title
24
24
 
25
25
  rd.options << "-t #{title}"
26
- rd.options.concat(PROJ.rdoc_opts)
26
+ rd.options.concat(PROJ.rdoc.opts)
27
27
  end
28
28
 
29
29
  desc 'Generate ri locally for testing'
data/tasks/gem.rake CHANGED
@@ -4,84 +4,86 @@ require 'rake/gempackagetask'
4
4
 
5
5
  namespace :gem do
6
6
 
7
- PROJ.spec = Gem::Specification.new do |s|
7
+ PROJ.gem._spec = Gem::Specification.new do |s|
8
8
  s.name = PROJ.name
9
9
  s.version = PROJ.version
10
10
  s.summary = PROJ.summary
11
11
  s.authors = Array(PROJ.authors)
12
12
  s.email = PROJ.email
13
13
  s.homepage = Array(PROJ.url).first
14
- s.rubyforge_project = PROJ.rubyforge_name
15
- s.post_install_message = PROJ.post_install_message
14
+ s.rubyforge_project = PROJ.rubyforge.name
16
15
 
17
16
  s.description = PROJ.description
18
17
 
19
- PROJ.dependencies.each do |dep|
18
+ PROJ.gem.dependencies.each do |dep|
20
19
  s.add_dependency(*dep)
21
20
  end
22
21
 
23
- s.files = PROJ.files
24
- s.executables = PROJ.executables.map {|fn| File.basename(fn)}
25
- s.extensions = PROJ.files.grep %r/extconf\.rb$/
22
+ s.files = PROJ.gem.files
23
+ s.executables = PROJ.gem.executables.map {|fn| File.basename(fn)}
24
+ s.extensions = PROJ.gem.files.grep %r/extconf\.rb$/
26
25
 
27
26
  s.bindir = 'bin'
28
27
  dirs = Dir["{#{PROJ.libs.join(',')}}"]
29
28
  s.require_paths = dirs unless dirs.empty?
30
29
 
31
- incl = Regexp.new(PROJ.rdoc_include.join('|'))
32
- excl = PROJ.rdoc_exclude.dup.concat %w[\.rb$ ^(\.\/|\/)?ext]
30
+ incl = Regexp.new(PROJ.rdoc.include.join('|'))
31
+ excl = PROJ.rdoc.exclude.dup.concat %w[\.rb$ ^(\.\/|\/)?ext]
33
32
  excl = Regexp.new(excl.join('|'))
34
- rdoc_files = PROJ.files.find_all do |fn|
33
+ rdoc_files = PROJ.gem.files.find_all do |fn|
35
34
  case fn
36
35
  when excl; false
37
36
  when incl; true
38
37
  else false end
39
38
  end
40
- s.rdoc_options = PROJ.rdoc_opts + ['--main', PROJ.rdoc_main]
39
+ s.rdoc_options = PROJ.rdoc.opts + ['--main', PROJ.rdoc.main]
41
40
  s.extra_rdoc_files = rdoc_files
42
41
  s.has_rdoc = true
43
42
 
44
- if test ?f, PROJ.test_file
45
- s.test_file = PROJ.test_file
43
+ if test ?f, PROJ.test.file
44
+ s.test_file = PROJ.test.file
46
45
  else
47
- s.test_files = PROJ.tests.to_a
46
+ s.test_files = PROJ.test.files.to_a
48
47
  end
49
48
 
50
49
  # Do any extra stuff the user wants
51
- # spec_extras.each do |msg, val|
52
- # case val
53
- # when Proc
54
- # val.call(s.send(msg))
55
- # else
56
- # s.send "#{msg}=", val
57
- # end
58
- # end
59
- end
50
+ PROJ.gem.extras.each do |msg, val|
51
+ case val
52
+ when Proc
53
+ val.call(s.send(msg))
54
+ else
55
+ s.send "#{msg}=", val
56
+ end
57
+ end
58
+ end # Gem::Specification.new
59
+
60
+ # A prerequisites task that all other tasks depend upon
61
+ task :prereqs
60
62
 
61
63
  desc 'Show information about the gem'
62
- task :debug do
63
- puts PROJ.spec.to_ruby
64
+ task :debug => 'gem:prereqs' do
65
+ puts PROJ.gem._spec.to_ruby
64
66
  end
65
67
 
66
68
  pkg = Rake::PackageTask.new(PROJ.name, PROJ.version) do |pkg|
67
- pkg.need_tar = PROJ.need_tar
68
- pkg.need_zip = PROJ.need_zip
69
- pkg.package_files += PROJ.spec.files
69
+ pkg.need_tar = PROJ.gem.need_tar
70
+ pkg.need_zip = PROJ.gem.need_zip
71
+ pkg.package_files += PROJ.gem._spec.files
70
72
  end
71
73
  Rake::Task['gem:package'].instance_variable_set(:@full_comment, nil)
72
74
 
73
- gem_file = if PROJ.spec.platform == Gem::Platform::RUBY
75
+ gem_file = if PROJ.gem._spec.platform == Gem::Platform::RUBY
74
76
  "#{pkg.package_name}.gem"
75
77
  else
76
- "#{pkg.package_name}-#{PROJ.spec.platform}.gem"
78
+ "#{pkg.package_name}-#{PROJ.gem._spec.platform}.gem"
77
79
  end
78
80
 
79
81
  desc "Build the gem file #{gem_file}"
80
- task :package => "#{pkg.package_dir}/#{gem_file}"
82
+ task :package => ['gem:prereqs', "#{pkg.package_dir}/#{gem_file}"]
81
83
 
82
- file "#{pkg.package_dir}/#{gem_file}" => [pkg.package_dir] + PROJ.spec.files do
84
+ file "#{pkg.package_dir}/#{gem_file}" => [pkg.package_dir] + PROJ.gem._spec.files do
83
85
  when_writing("Creating GEM") {
84
- Gem::Builder.new(PROJ.spec).build
86
+ Gem::Builder.new(PROJ.gem._spec).build
85
87
  verbose(true) {
86
88
  mv gem_file, "#{pkg.package_dir}/#{gem_file}"
87
89
  }
@@ -89,21 +91,29 @@ namespace :gem do
89
91
  end
90
92
 
91
93
  desc 'Install the gem'
92
- task :install => [:clobber, :package] do
93
- sh "#{SUDO} #{GEM} install pkg/#{PROJ.spec.full_name}"
94
+ task :install => [:clobber, 'gem:package'] do
95
+ sh "#{SUDO} #{GEM} install --local pkg/#{PROJ.gem._spec.full_name}"
96
+
97
+ # use this version of the command for rubygems > 1.0.0
98
+ #sh "#{SUDO} #{GEM} install --no-update-sources pkg/#{PROJ.gem._spec.full_name}"
94
99
  end
95
100
 
96
101
  desc 'Uninstall the gem'
97
102
  task :uninstall do
98
103
  installed_list = Gem.source_index.find_name(PROJ.name)
99
104
  if installed_list and installed_list.collect { |s| s.version.to_s}.include?(PROJ.version) then
100
- sh "#{SUDO} #{GEM} uninstall -v '#{PROJ.version}' -i -x #{PROJ.name}"
105
+ sh "#{SUDO} #{GEM} uninstall --version '#{PROJ.version}' --ignore-dependencies --executables #{PROJ.name}"
101
106
  end
102
107
  end
103
108
 
104
109
  desc 'Reinstall the gem'
105
110
  task :reinstall => [:uninstall, :install]
106
111
 
112
+ desc 'Cleanup the gem'
113
+ task :cleanup do
114
+ sh "#{SUDO} #{GEM} cleanup #{PROJ.gem._spec.name}"
115
+ end
116
+
107
117
  end # namespace :gem
108
118
 
109
119
  desc 'Alias to gem:package'
data/tasks/post_load.rake CHANGED
@@ -3,14 +3,21 @@
3
3
  # This file does not define any rake tasks. It is used to load some project
4
4
  # settings if they are not defined by the user.
5
5
 
6
- PROJ.rdoc_exclude << "^#{Regexp.escape(PROJ.manifest_file)}$"
7
- PROJ.exclude << "^#{Regexp.escape(PROJ.ann_file)}$"
8
-
9
- PROJ.instance_variable_get(:@table).each do |key,val|
10
- next unless val.instance_of? Array
11
- next if key == :dependencies
12
- val.flatten!
13
- end
6
+ PROJ.rdoc.exclude << "^#{Regexp.escape(PROJ.manifest_file)}$"
7
+ PROJ.exclude << ["^#{Regexp.escape(PROJ.ann.file)}$",
8
+ "^#{Regexp.escape(PROJ.rdoc.dir)}/",
9
+ "^#{Regexp.escape(PROJ.rcov.dir)}/"]
10
+
11
+ flatten_arrays = lambda do |this,os|
12
+ os.instance_variable_get(:@table).each do |key,val|
13
+ next if key == :dependencies
14
+ case val
15
+ when Array; val.flatten!
16
+ when OpenStruct; this.call(this,val)
17
+ end
18
+ end
19
+ end
20
+ flatten_arrays.call(flatten_arrays,PROJ)
14
21
 
15
22
  PROJ.changes ||= paragraphs_of(PROJ.history_file, 0..1).join("\n\n")
16
23
 
@@ -18,15 +25,15 @@ PROJ.description ||= paragraphs_of(PROJ.readme_file, 'description').join("\n\n")
18
25
 
19
26
  PROJ.summary ||= PROJ.description.split('.').first
20
27
 
21
- PROJ.files ||=
28
+ PROJ.gem.files ||=
22
29
  if test(?f, PROJ.manifest_file)
23
30
  files = File.readlines(PROJ.manifest_file).map {|fn| fn.chomp.strip}
24
31
  files.delete ''
25
32
  files
26
33
  else [] end
27
34
 
28
- PROJ.executables ||= PROJ.files.find_all {|fn| fn =~ %r/^bin/}
35
+ PROJ.gem.executables ||= PROJ.gem.files.find_all {|fn| fn =~ %r/^bin/}
29
36
 
30
- PROJ.rdoc_main ||= PROJ.readme_file
37
+ PROJ.rdoc.main ||= PROJ.readme_file
31
38
 
32
39
  # EOF
data/tasks/rubyforge.rake CHANGED
@@ -1,23 +1,23 @@
1
- # $Id$
2
1
 
3
- if PROJ.rubyforge_name && HAVE_RUBYFORGE
2
+ if PROJ.rubyforge.name.valid? && HAVE_RUBYFORGE
4
3
 
5
4
  require 'rubyforge'
6
5
  require 'rake/contrib/sshpublisher'
7
6
 
8
7
  namespace :gem do
9
8
  desc 'Package and upload to RubyForge'
10
- task :release => [:clobber, :package] do |t|
9
+ task :release => [:clobber, 'gem:package'] do |t|
11
10
  v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
12
11
  abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
13
- pkg = "pkg/#{PROJ.spec.full_name}"
12
+ pkg = "pkg/#{PROJ.gem._spec.full_name}"
14
13
 
15
14
  if $DEBUG then
16
- puts "release_id = rf.add_release #{PROJ.rubyforge_name.inspect}, #{PROJ.name.inspect}, #{PROJ.version.inspect}, \"#{pkg}.tgz\""
17
- puts "rf.add_file #{PROJ.rubyforge_name.inspect}, #{PROJ.name.inspect}, release_id, \"#{pkg}.gem\""
15
+ puts "release_id = rf.add_release #{PROJ.rubyforge.name.inspect}, #{PROJ.name.inspect}, #{PROJ.version.inspect}, \"#{pkg}.tgz\""
16
+ puts "rf.add_file #{PROJ.rubyforge.name.inspect}, #{PROJ.name.inspect}, release_id, \"#{pkg}.gem\""
18
17
  end
19
18
 
20
19
  rf = RubyForge.new
20
+ rf.configure rescue nil
21
21
  puts 'Logging in'
22
22
  rf.login
23
23
 
@@ -25,14 +25,13 @@ namespace :gem do
25
25
  c['release_notes'] = PROJ.description if PROJ.description
26
26
  c['release_changes'] = PROJ.changes if PROJ.changes
27
27
  c['preformatted'] = true
28
- c['processor_id'] = 8000
29
28
 
30
- files = [(PROJ.need_tar ? "#{pkg}.tgz" : nil),
31
- (PROJ.need_zip ? "#{pkg}.zip" : nil),
29
+ files = [(PROJ.gem.need_tar ? "#{pkg}.tgz" : nil),
30
+ (PROJ.gem.need_zip ? "#{pkg}.zip" : nil),
32
31
  "#{pkg}.gem"].compact
33
32
 
34
33
  puts "Releasing #{PROJ.name} v. #{PROJ.version}"
35
- rf.add_release PROJ.rubyforge_name, PROJ.name, PROJ.version, *files
34
+ rf.add_release PROJ.rubyforge.name, PROJ.name, PROJ.version, *files
36
35
  end
37
36
  end # namespace :gem
38
37
 
@@ -45,9 +44,9 @@ namespace :doc do
45
44
  )
46
45
 
47
46
  host = "#{config['username']}@rubyforge.org"
48
- remote_dir = "/var/www/gforge-projects/#{PROJ.rubyforge_name}/"
49
- remote_dir << PROJ.rdoc_remote_dir if PROJ.rdoc_remote_dir
50
- local_dir = PROJ.rdoc_dir
47
+ remote_dir = "/var/www/gforge-projects/#{PROJ.rubyforge.name}/"
48
+ remote_dir << PROJ.rdoc.remote_dir if PROJ.rdoc.remote_dir
49
+ local_dir = PROJ.rdoc.dir
51
50
 
52
51
  Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
53
52
  end
data/tasks/setup.rb CHANGED
@@ -6,94 +6,117 @@ require 'rake/clean'
6
6
  require 'fileutils'
7
7
  require 'ostruct'
8
8
 
9
- ENV['VERSION'] = '0.1.0'
10
-
11
- PROJ = OpenStruct.new
12
-
13
- PROJ.name = 'rbvimeo'
14
- PROJ.summary = 'Ruby Wrapper for the Vimeo API'
15
- PROJ.description = nil
16
- PROJ.changes = nil
17
- PROJ.authors = 'guitsaru'
18
- PROJ.email = 'guitsaru@gmail.com'
19
- PROJ.url = nil
20
- PROJ.version = ENV['VERSION'] || '0.1.0'
21
- PROJ.rubyforge_name = 'rbvimeo'
22
- PROJ.exclude = %w(tmp$ bak$ ~$ CVS .svn/ ^pkg/ ^doc/ .git/)
23
- PROJ.release_name = ENV['RELEASE']
24
- PROJ.history_file = 'History.txt'
25
- PROJ.manifest_file = 'Manifest.txt'
26
- PROJ.readme_file = 'README.txt'
27
-
28
- # Rspec
29
- PROJ.specs = FileList['spec/**/*_spec.rb']
30
- PROJ.spec_opts = []
31
-
32
- # Test::Unit
33
- PROJ.tests = FileList['test/**/test_*.rb']
34
- PROJ.test_file = 'test/all.rb'
35
- PROJ.test_opts = []
36
-
37
- # Rcov
38
- PROJ.rcov_dir = 'coverage'
39
- PROJ.rcov_opts = %w[--sort coverage -T]
40
- PROJ.rcov_threshold = 90.0
41
- PROJ.rcov_threshold_exact = false
42
-
43
- # Rdoc
44
- PROJ.rdoc_opts = []
45
- PROJ.rdoc_include = %w(^lib/ ^bin/ ^ext/ .txt$)
46
- PROJ.rdoc_exclude = %w(extconf.rb$)
47
- PROJ.rdoc_main = nil
48
- PROJ.rdoc_dir = 'doc'
49
- PROJ.rdoc_remote_dir = nil
50
-
51
- # Extensions
52
- PROJ.extensions = FileList['ext/**/extconf.rb']
53
- PROJ.ruby_opts = %w(-w)
54
- PROJ.libs = []
55
- %w(lib ext).each {|dir| PROJ.libs << dir if test ?d, dir}
56
-
57
- # Gem Packaging
58
- PROJ.files = nil
59
- PROJ.executables = nil
60
- PROJ.dependencies = []
61
- PROJ.need_tar = true
62
- PROJ.need_zip = false
63
- PROJ.post_install_message = nil
64
-
65
- # File Annotations
66
- PROJ.annotation_exclude = %w(^tasks/setup.rb$)
67
- PROJ.annotation_extensions = %w(.txt .rb .erb) << ''
68
- PROJ.annotation_tags = %w(FIXME OPTIMIZE TODO)
69
-
70
- # Subversion Repository
71
- PROJ.svn = false
72
- PROJ.svn_root = nil
73
- PROJ.svn_trunk = 'trunk'
74
- PROJ.svn_tags = 'tags'
75
- PROJ.svn_branches = 'branches'
76
-
77
- # Announce
78
- PROJ.ann_file = 'announcement.txt'
79
- PROJ.ann_text = nil
80
- PROJ.ann_paragraphs = []
81
- PROJ.ann_email = {
82
- :from => nil,
83
- :to => %w(ruby-talk@ruby-lang.org),
84
- :server => 'localhost',
85
- :port => 25,
86
- :domain => ENV['HOSTNAME'],
87
- :acct => nil,
88
- :passwd => nil,
89
- :authtype => :plain
90
- }
9
+ class OpenStruct; undef :gem; end
10
+
11
+ PROJ = OpenStruct.new(
12
+ # Project Defaults
13
+ :name => nil,
14
+ :summary => nil,
15
+ :description => nil,
16
+ :changes => nil,
17
+ :authors => nil,
18
+ :email => nil,
19
+ :url => "\000",
20
+ :version => ENV['VERSION'] || '0.0.0',
21
+ :exclude => %w(tmp$ bak$ ~$ CVS \.svn/ \.git/ ^pkg/),
22
+ :release_name => ENV['RELEASE'],
23
+
24
+ # System Defaults
25
+ :ruby_opts => %w(-w),
26
+ :libs => [],
27
+ :history_file => 'History.txt',
28
+ :manifest_file => 'Manifest.txt',
29
+ :readme_file => 'README.txt',
30
+
31
+ # Announce
32
+ :ann => OpenStruct.new(
33
+ :file => 'announcement.txt',
34
+ :text => nil,
35
+ :paragraphs => [],
36
+ :email => {
37
+ :from => nil,
38
+ :to => %w(ruby-talk@ruby-lang.org),
39
+ :server => 'localhost',
40
+ :port => 25,
41
+ :domain => ENV['HOSTNAME'],
42
+ :acct => nil,
43
+ :passwd => nil,
44
+ :authtype => :plain
45
+ }
46
+ ),
47
+
48
+ # Gem Packaging
49
+ :gem => OpenStruct.new(
50
+ :dependencies => [],
51
+ :executables => nil,
52
+ :extensions => FileList['ext/**/extconf.rb'],
53
+ :files => nil,
54
+ :need_tar => true,
55
+ :need_zip => false,
56
+ :extras => {}
57
+ ),
58
+
59
+ # File Annotations
60
+ :notes => OpenStruct.new(
61
+ :exclude => %w(^tasks/setup\.rb$),
62
+ :extensions => %w(.txt .rb .erb) << '',
63
+ :tags => %w(FIXME OPTIMIZE TODO)
64
+ ),
65
+
66
+ # Rcov
67
+ :rcov => OpenStruct.new(
68
+ :dir => 'coverage',
69
+ :opts => %w[--sort coverage -T],
70
+ :threshold => 90.0,
71
+ :threshold_exact => false
72
+ ),
73
+
74
+ # Rdoc
75
+ :rdoc => OpenStruct.new(
76
+ :opts => [],
77
+ :include => %w(^lib/ ^bin/ ^ext/ \.txt$),
78
+ :exclude => %w(extconf\.rb$),
79
+ :main => nil,
80
+ :dir => 'doc',
81
+ :remote_dir => nil
82
+ ),
83
+
84
+ # Rubyforge
85
+ :rubyforge => OpenStruct.new(
86
+ :name => "\000"
87
+ ),
88
+
89
+ # Rspec
90
+ :spec => OpenStruct.new(
91
+ :files => FileList['spec/**/*_spec.rb'],
92
+ :opts => []
93
+ ),
94
+
95
+ # Subversion Repository
96
+ :svn => OpenStruct.new(
97
+ :root => nil,
98
+ :path => '',
99
+ :trunk => 'trunk',
100
+ :tags => 'tags',
101
+ :branches => 'branches'
102
+ ),
103
+
104
+ # Test::Unit
105
+ :test => OpenStruct.new(
106
+ :files => FileList['test/**/test_*.rb'],
107
+ :file => 'test/all.rb',
108
+ :opts => []
109
+ )
110
+ )
91
111
 
92
112
  # Load the other rake files in the tasks folder
93
113
  rakefiles = Dir.glob('tasks/*.rake').sort
94
114
  rakefiles.unshift(rakefiles.delete('tasks/post_load.rake')).compact!
95
115
  import(*rakefiles)
96
116
 
117
+ # Setup the project libraries
118
+ %w(lib ext).each {|dir| PROJ.libs << dir if test ?d, dir}
119
+
97
120
  # Setup some constants
98
121
  WIN32 = %r/djgpp|(cyg|ms|bcc)win|mingw/ =~ RUBY_PLATFORM unless defined? WIN32
99
122
 
@@ -107,6 +130,7 @@ def quiet( &block )
107
130
  ensure
108
131
  STDOUT.reopen io.first
109
132
  STDERR.reopen io.last
133
+ $stdout, $stderr = STDOUT, STDERR
110
134
  end
111
135
 
112
136
  DIFF = if WIN32 then 'diff.exe'
@@ -122,6 +146,7 @@ SUDO = if WIN32 then ''
122
146
  end
123
147
 
124
148
  RCOV = WIN32 ? 'rcov.bat' : 'rcov'
149
+ RDOC = WIN32 ? 'rdoc.bat' : 'rdoc'
125
150
  GEM = WIN32 ? 'gem.bat' : 'gem'
126
151
 
127
152
  %w(rcov spec/rake/spectask rubyforge bones facets/ansicode).each do |lib|
@@ -132,6 +157,10 @@ GEM = WIN32 ? 'gem.bat' : 'gem'
132
157
  Object.instance_eval {const_set "HAVE_#{lib.tr('/','_').upcase}", false}
133
158
  end
134
159
  end
160
+ HAVE_SVN = (Dir.entries(Dir.pwd).include?('.svn') and
161
+ system("svn --version 2>&1 > #{DEV_NULL}"))
162
+ HAVE_GIT = (Dir.entries(Dir.pwd).include?('.git') and
163
+ system("git --version 2>&1 > #{DEV_NULL}"))
135
164
 
136
165
  # Reads a file at +path+ and spits out an array of the +paragraphs+
137
166
  # specified.
@@ -171,7 +200,7 @@ def depend_on( name, version = nil )
171
200
  spec = Gem.source_index.find_name(name).last
172
201
  version = spec.version.to_s if version.nil? and !spec.nil?
173
202
 
174
- PROJ.dependencies << case version
203
+ PROJ.gem.dependencies << case version
175
204
  when nil; [name]
176
205
  when %r/^\d/; [name, ">= #{version}"]
177
206
  else [name, version] end
@@ -226,4 +255,14 @@ def manifest_files
226
255
  files.sort!
227
256
  end
228
257
 
258
+ # We need a "valid" method thtat determines if a string is suitable for use
259
+ # in the gem specification.
260
+ #
261
+ class Object
262
+ def valid?
263
+ return !(self.empty? or self == "\000") if self.respond_to?(:to_str)
264
+ return false
265
+ end
266
+ end
267
+
229
268
  # EOF
data/tasks/spec.rake CHANGED
@@ -8,16 +8,16 @@ namespace :spec do
8
8
  desc 'Run all specs with basic output'
9
9
  Spec::Rake::SpecTask.new(:run) do |t|
10
10
  t.ruby_opts = PROJ.ruby_opts
11
- t.spec_opts = PROJ.spec_opts
12
- t.spec_files = PROJ.specs
11
+ t.spec_opts = PROJ.spec.opts
12
+ t.spec_files = PROJ.spec.files
13
13
  t.libs += PROJ.libs
14
14
  end
15
15
 
16
16
  desc 'Run all specs with text output'
17
17
  Spec::Rake::SpecTask.new(:specdoc) do |t|
18
18
  t.ruby_opts = PROJ.ruby_opts
19
- t.spec_opts = PROJ.spec_opts + ['--format', 'specdoc']
20
- t.spec_files = PROJ.specs
19
+ t.spec_opts = PROJ.spec.opts + ['--format', 'specdoc']
20
+ t.spec_files = PROJ.spec.files
21
21
  t.libs += PROJ.libs
22
22
  end
23
23
 
@@ -25,21 +25,22 @@ namespace :spec do
25
25
  desc 'Run all specs with RCov'
26
26
  Spec::Rake::SpecTask.new(:rcov) do |t|
27
27
  t.ruby_opts = PROJ.ruby_opts
28
- t.spec_opts = PROJ.spec_opts
29
- t.spec_files = PROJ.specs
28
+ t.spec_opts = PROJ.spec.opts
29
+ t.spec_files = PROJ.spec.files
30
30
  t.libs += PROJ.libs
31
31
  t.rcov = true
32
- t.rcov_dir = PROJ.rcov_dir
33
- t.rcov_opts = PROJ.rcov_opts + ['--exclude', 'spec']
32
+ t.rcov_dir = PROJ.rcov.dir
33
+ t.rcov_opts = PROJ.rcov.opts + ['--exclude', 'spec']
34
34
  end
35
35
 
36
36
  RCov::VerifyTask.new(:verify) do |t|
37
- t.threshold = PROJ.rcov_threshold
38
- t.index_html = File.join(PROJ.rcov_dir, 'index.html')
39
- t.require_exact_threshold = PROJ.rcov_threshold_exact
37
+ t.threshold = PROJ.rcov.threshold
38
+ t.index_html = File.join(PROJ.rcov.dir, 'index.html')
39
+ t.require_exact_threshold = PROJ.rcov.threshold_exact
40
40
  end
41
41
 
42
42
  task :verify => :rcov
43
+ remove_desc_for_task %w(spec:clobber_rcov)
43
44
  end
44
45
 
45
46
  end # namespace :spec
@@ -49,8 +50,6 @@ task :spec => 'spec:run'
49
50
 
50
51
  task :clobber => 'spec:clobber_rcov' if HAVE_RCOV
51
52
 
52
- remove_desc_for_task %w(spec:clobber_rcov)
53
-
54
53
  end # if HAVE_SPEC_RAKE_SPECTASK
55
54
 
56
55
  # EOF
data/tasks/svn.rake CHANGED
@@ -1,32 +1,36 @@
1
1
  # $Id$
2
2
 
3
+ if HAVE_SVN
3
4
 
4
- if PROJ.svn and system("svn --version 2>&1 > #{DEV_NULL}")
5
-
6
- unless PROJ.svn_root
5
+ unless PROJ.svn.root
7
6
  info = %x/svn info ./
8
7
  m = %r/^Repository Root:\s+(.*)$/.match(info)
9
- PROJ.svn_root = (m.nil? ? '' : m[1])
8
+ PROJ.svn.root = (m.nil? ? '' : m[1])
10
9
  end
11
- PROJ.svn_root = File.join(PROJ.svn_root, PROJ.svn) if String === PROJ.svn
10
+ PROJ.svn.root = File.join(PROJ.svn.root, PROJ.svn.path) unless PROJ.svn.path.empty?
12
11
 
13
12
  namespace :svn do
14
13
 
14
+ # A prerequisites task that all other tasks depend upon
15
+ task :prereqs
16
+
15
17
  desc 'Show tags from the SVN repository'
16
- task :show_tags do |t|
17
- tags = %x/svn list #{File.join(PROJ.svn_root, PROJ.svn_tags)}/
18
+ task :show_tags => 'svn:prereqs' do |t|
19
+ tags = %x/svn list #{File.join(PROJ.svn.root, PROJ.svn.tags)}/
18
20
  tags.gsub!(%r/\/$/, '')
21
+ tags = tags.split("\n").sort {|a,b| b <=> a}
19
22
  puts tags
20
23
  end
21
24
 
22
25
  desc 'Create a new tag in the SVN repository'
23
- task :create_tag do |t|
26
+ task :create_tag => 'svn:prereqs' do |t|
24
27
  v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
25
28
  abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
26
29
 
27
- trunk = File.join(PROJ.svn_root, PROJ.svn_trunk)
30
+ svn = PROJ.svn
31
+ trunk = File.join(svn.root, svn.trunk)
28
32
  tag = "%s-%s" % [PROJ.name, PROJ.version]
29
- tag = File.join(PROJ.svn_root, PROJ.svn_tags, tag)
33
+ tag = File.join(svn.root, svn.tags, tag)
30
34
  msg = "Creating tag for #{PROJ.name} version #{PROJ.version}"
31
35
 
32
36
  puts "Creating SVN tag '#{tag}'"
@@ -39,6 +43,6 @@ end # namespace :svn
39
43
 
40
44
  task 'gem:release' => 'svn:create_tag'
41
45
 
42
- end # if PROJ.svn
46
+ end # if PROJ.svn.path
43
47
 
44
48
  # EOF
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbvimeo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Pruitt
@@ -9,10 +9,19 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-04-11 00:00:00 -05:00
12
+ date: 2008-10-13 00:00:00 -05:00
13
13
  default_executable:
14
- dependencies: []
15
-
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hpricot
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
16
25
  description: A ruby wrapper for the Vimeo API
17
26
  email: guitsaru@gmail.com
18
27
  executables:
@@ -75,9 +84,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
84
  requirements: []
76
85
 
77
86
  rubyforge_project: rbvimeo
78
- rubygems_version: 1.1.0
87
+ rubygems_version: 1.3.0
79
88
  signing_key:
80
89
  specification_version: 2
81
- summary: Ruby Wrapper for the Vimeo API
90
+ summary: A ruby wrapper for the Vimeo API
82
91
  test_files: []
83
92