libertine 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
- *.gem*
1
+ *.gemspec
2
+ .manifest
2
3
  tmp
data/Rakefile CHANGED
@@ -2,9 +2,9 @@
2
2
  # itself to drive this Rakefile.
3
3
 
4
4
  $:.unshift "./lib"
5
-
6
- begin require "libertine"; rescue LoadError; abort "Install libertine." end
5
+ require "libertine"
7
6
 
8
7
  Libertine do
9
8
  by "John Barnette", "code@jbarnette.com"
9
+ ruby ">= 1.8.7"
10
10
  end
@@ -6,7 +6,7 @@ require "isolate/rake"
6
6
  Isolate.now! :system => false
7
7
 
8
8
  module Libertine
9
- VERSION = "0.0.1"
9
+ VERSION = "0.0.2"
10
10
  end
11
11
 
12
12
  def Libertine name = nil, &block
@@ -1,7 +1,7 @@
1
1
  require "libertine/error"
2
+ require "libertine/scm/git"
2
3
  require "rubygems/builder"
3
4
  require "rubygems/specification"
4
- require "rubygems/version"
5
5
 
6
6
  Gem.configuration.verbose = false
7
7
 
@@ -9,15 +9,18 @@ module Libertine
9
9
  class Project
10
10
  attr_reader :dir
11
11
  attr_reader :name
12
+ attr_reader :scm
12
13
 
13
14
  def initialize name, dir = nil, &block
14
15
  @authors = []
15
16
  @dir = dir || "."
16
17
  @emails = []
18
+ @excludes = []
17
19
  @homepage = "http://github.com/#{ENV['USER']}/#{name}"
18
- @includes = []
20
+ @includes = %w(.manifest)
19
21
  @name = name
20
22
  @ruby = ">= 1.8.7"
23
+ @scm = Libertine::SCM::Git.new @dir
21
24
 
22
25
  if readme = glob("README*").first
23
26
  grafs = File.read(readme).delete("\r").split(/\n\n+/).reject do |t|
@@ -41,26 +44,41 @@ module Libertine
41
44
  desc ? @description = desc : @description
42
45
  end
43
46
 
47
+ def exclude *globs
48
+ @excludes.concat globs
49
+ end
50
+
44
51
  def files
45
- `git ls-files`.split.concat @includes
52
+ Dir.chdir dir do
53
+ scm.files.tap do |ls|
54
+ includes = @includes.map { |i| Dir[i] }.flatten
55
+ excludes = @excludes.map { |x| Dir[x] }.flatten
56
+
57
+ ls.concat includes
58
+ ls.reject! { |f| excludes.include? f }
59
+
60
+ ls.uniq!
61
+ ls.sort!
62
+ end
63
+ end
46
64
  end
47
65
 
48
66
  def gemfile
49
67
  "tmp/#{spec.file_name}"
50
68
  end
51
69
 
52
- def homepage url = nil
53
- url ? @homepage = url : @homepage
54
- end
55
-
56
70
  def glob *globs
57
71
  Dir.chdir dir do
58
72
  Dir[*globs].select { |f| files.include? f }
59
73
  end
60
74
  end
61
75
 
62
- def include *files
63
- @includes.concat files
76
+ def homepage url = nil
77
+ url ? @homepage = url : @homepage
78
+ end
79
+
80
+ def include *globs
81
+ @includes.concat globs
64
82
  end
65
83
 
66
84
  def inspect
@@ -90,7 +108,7 @@ module Libertine
90
108
  s.required_ruby_version = ruby
91
109
  s.rubyforge_project = name
92
110
  s.summary = summary
93
- s.version = version
111
+ s.version = scm.version
94
112
 
95
113
  if rubygems
96
114
  s.required_rubygems_version = rubygems
@@ -104,7 +122,8 @@ module Libertine
104
122
  end
105
123
  end
106
124
 
107
- unless s.dependencies.any? { |d| d.name == "libertine" }
125
+ unless name == "libertine" ||
126
+ s.dependencies.any? { |d| d.name == "libertine" }
108
127
  s.add_development_dependency "libertine", ">= #{VERSION}"
109
128
  end
110
129
 
@@ -122,10 +141,6 @@ module Libertine
122
141
  summ ? @summary = summ : @summary
123
142
  end
124
143
 
125
- def released?
126
- versions.include? version
127
- end
128
-
129
144
  def tasks!
130
145
  file(gemfile => files) do |t|
131
146
  Gem::Builder.new(spec).build
@@ -138,44 +153,21 @@ module Libertine
138
153
  desc "Show the current gemspec."
139
154
  task("gem:spec") { puts spec.to_ruby }
140
155
 
141
- desc "Release v#{version}." unless released?
142
- task "release" => "gem" do
143
- if released?
144
- raise Libertine::Error, "v#{version} is already released!"
145
- end
146
-
147
- unless /^\* master$/ =~ `git branch`
148
- raise Libertine::Error, "Only release from the master branch!"
149
- end
150
-
151
- unless `git status -s`.empty?
152
- sh "git commit --allow-empty -am 'Release v#{version}.'"
156
+ desc "Show the file manifest."
157
+ task "manifest" do
158
+ files.join("\n").tap do |manifest|
159
+ File.open(".manifest", "wb") { |f| f.write manifest }
160
+ puts manifest
153
161
  end
154
-
155
- sh "git tag v#{version}"
156
- sh "git push origin master"
157
- sh "git push origin v#{version}"
158
- sh "gem push #{gemfile}"
159
162
  end
160
- end
161
163
 
162
- def version
163
- return @version if defined? @version
164
- regexp = /VERSION += +([\"\'])([\d][\w\.]+)\1/
165
-
166
- files.select { |f| %r%lib/.*\.rb\Z% =~ f }.each do |file|
167
- break if @version = File.read(file)[regexp, 2]
164
+ if scm.releaseable?
165
+ desc "Release v#{scm.version}." unless scm.released?
166
+ task "release" => "gem" do
167
+ scm.release
168
+ sh "gem push #{gemfile}"
169
+ end
168
170
  end
169
-
170
- @version or raise Libertine::Error,
171
- "Can't find VERSION in lib/*.rb. Add it."
172
- end
173
-
174
- def versions
175
- `git tag -l 'v*'`.split("\n").
176
- select { |t| /^v\d/ =~ t }.
177
- map { |t| t[1..-1] }.
178
- sort_by { |v| Gem::Version.new v }
179
171
  end
180
172
  end
181
173
  end
@@ -0,0 +1,50 @@
1
+ require "libertine/error"
2
+ require "rubygems/version"
3
+
4
+ module Libertine
5
+ class SCM < Struct.new(:dir)
6
+ def files # FIX: includes & excludes here instead?
7
+ implement :files, []
8
+ end
9
+
10
+ def implement method, default = nil
11
+ $stderr.puts "#{self.class.name}##{method} isn't implemented!"
12
+ default
13
+ end
14
+
15
+ def release
16
+ if released? version
17
+ raise Libertine::Error, "v#{version} is already released!"
18
+ end
19
+ end
20
+
21
+ def released? version = nil
22
+ versions.include? version || self.version
23
+ end
24
+
25
+ def releaseable?
26
+ false
27
+ end
28
+
29
+ def tags
30
+ implement :tags, []
31
+ end
32
+
33
+ def version
34
+ return @version if defined? @version
35
+ regexp = /VERSION += +([\"\'])([\d][\w\.]+)\1/
36
+
37
+ files.select { |f| %r%lib/.*\.rb\Z% =~ f }.each do |file|
38
+ break if @version = File.read(file)[regexp, 2]
39
+ end
40
+
41
+ @version or raise Libertine::Error,
42
+ "Can't find VERSION in lib/*.rb. Add it."
43
+ end
44
+
45
+ def versions
46
+ tags.select { |t| /\Av#{Gem::Version::VERSION_PATTERN}\Z/ =~ t }.
47
+ map { |t| t[1..-1] }.sort_by { |v| Gem::Version.new v }
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,38 @@
1
+ require "libertine/error"
2
+ require "libertine/scm"
3
+
4
+ module Libertine
5
+ class SCM
6
+ class Git < Libertine::SCM
7
+ def files
8
+ Dir.chdir(dir) { `git ls-files`.split }
9
+ end
10
+
11
+ def release
12
+ super
13
+
14
+ Dir.chdir dir do
15
+ unless /^\* master$/ =~ `git branch`
16
+ raise Libertine::Error, "Only release from the master branch!"
17
+ end
18
+
19
+ unless `git status -s`.empty?
20
+ sh "git commit --allow-empty -am 'Release v#{version}.'"
21
+ end
22
+
23
+ sh "git tag v#{version}"
24
+ sh "git push origin master"
25
+ sh "git push origin v#{version}"
26
+ end
27
+ end
28
+
29
+ def releaseable?
30
+ true
31
+ end
32
+
33
+ def tags
34
+ Dir.chdir(dir) { `git tag -l 'v*'`.split }
35
+ end
36
+ end
37
+ end
38
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
8
+ - 2
9
+ version: 0.0.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - John Barnette
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-19 00:00:00 -07:00
17
+ date: 2010-10-20 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -46,21 +46,6 @@ dependencies:
46
46
  version: 1.7.2
47
47
  type: :development
48
48
  version_requirements: *id002
49
- - !ruby/object:Gem::Dependency
50
- name: libertine
51
- prerelease: false
52
- requirement: &id003 !ruby/object:Gem::Requirement
53
- none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- segments:
58
- - 0
59
- - 0
60
- - 1
61
- version: 0.0.1
62
- type: :development
63
- version_requirements: *id003
64
49
  description: Because there aren't enough ways to manage a RubyGem with a Rakefile. Libertine assumes Ruby 1.8.7+, Git, GitHub, and a Unixish operating system. Don't use this yet.
65
50
  email:
66
51
  - code@jbarnette.com
@@ -72,6 +57,7 @@ extra_rdoc_files: []
72
57
 
73
58
  files:
74
59
  - .gitignore
60
+ - .manifest
75
61
  - .rvmrc
76
62
  - Isolate
77
63
  - README.markdown
@@ -79,6 +65,8 @@ files:
79
65
  - lib/libertine.rb
80
66
  - lib/libertine/error.rb
81
67
  - lib/libertine/project.rb
68
+ - lib/libertine/scm.rb
69
+ - lib/libertine/scm/git.rb
82
70
  has_rdoc: true
83
71
  homepage: http://github.com/jbarnette/libertine
84
72
  licenses: []