rbvimeo 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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