Skip to content

Commit

Permalink
Reorganize project based on bundle gem practices (#35)
Browse files Browse the repository at this point in the history
Remove the custom Rake tasks for packaging and release the gem in favor
of a standard layout as suggested by the `bundle gem` command:

* Add a Gemfile and gemspec
* Use Bundler's built-in `gem_tasks`
* Add appropriate file extension to LICENSE
* Add development utils in `bin`
* Move version number to `plist/version.rb`
* Use Bundler's recommended `.gitignore`
* Add `gem install bundler` to `.travis.yml`

This reorganization allows any Ruby open source developer to easily
check out, run tests, and release the gem without any special knowledge
or tooling.
  • Loading branch information
mattbrictson authored Apr 17, 2017
1 parent 47a3b34 commit e8c8321
Show file tree
Hide file tree
Showing 10 changed files with 76 additions and 154 deletions.
12 changes: 9 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
rdoc
coverage
pkg
/.bundle/
/.yardoc
/Gemfile.lock
/_yardoc/
/coverage/
/doc/
/pkg/
/spec/reports/
/tmp/
2 changes: 2 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
sudo: false
language: ruby
rvm:
- 1.9.3
Expand All @@ -8,3 +9,4 @@ rvm:
- jruby-head
- 1.8.7
- ree
before_install: gem install bundler -v '~> 1.14' --conservative
4 changes: 4 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
source "https://rubygems.org"

# Specify your gem's dependencies in plist.gemspec
gemspec
File renamed without changes.
156 changes: 6 additions & 150 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -1,154 +1,10 @@
#
# Plist Rakefile
#
# Based heavily on Geoffrey Grosenbach's Rakefile for gruff.
# Includes whitespace-fixing task based on code from Typo.
#
# Copyright 2006-2010 Ben Bleything and Patrick May
# Distributed under the MIT License
#
require "bundler/gem_tasks"
require "rake/testtask"

require 'fileutils'
require 'rubygems'
require 'rake'
require 'rake/testtask'
require 'rake/packagetask'
require 'rake/contrib/rubyforgepublisher'
require 'rubygems/package_task'

$:.unshift(File.dirname(__FILE__) + "/lib")
require 'plist'

PKG_NAME = 'plist'
PKG_VERSION = Plist::VERSION
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"

RELEASE_NAME = "REL #{PKG_VERSION}"

RUBYFORGE_PROJECT = "plist"
RUBYFORGE_USER = ENV['RUBYFORGE_USER']

TEST_FILES = Dir.glob('test/test_*')
TEST_ASSETS = Dir.glob('test/assets/*')
LIB_FILES = Dir.glob('lib/**/*')
RELEASE_FILES = [ "Rakefile", "README.rdoc", "CHANGELOG", "LICENSE" ] + LIB_FILES + TEST_FILES + TEST_ASSETS

task :default => [ :test ]
# Run the unit tests
Rake::TestTask.new { |t|
Rake::TestTask.new(:test) do |t|
t.libs << "test"
t.test_files = TEST_FILES
t.verbose = true
}

desc "Clean pkg, coverage, and rdoc; remove .bak files"
task :clean => [ :clobber_rdoc, :clobber_package, :clobber_coverage ] do
puts cmd = "find . -type f -name *.bak -delete"
`#{cmd}`
end

task :clobber_coverage do
puts cmd = "rm -rf coverage"
`#{cmd}`
end

desc "Generate coverage analysis with rcov (requires rcov to be installed)"
task :rcov => [ :clobber_coverage ] do
puts cmd = "rcov -Ilib --xrefs -T test/*.rb"
puts `#{cmd}`
end

desc "Strip trailing whitespace and fix newlines for all release files"
task :fix_whitespace => [ :clean ] do
RELEASE_FILES.reject {|i| i =~ /assets/}.each do |filename|
next if File.directory? filename

File.open(filename) do |file|
newfile = ''
needs_love = false

file.readlines.each_with_index do |line, lineno|
if line =~ /[ \t]+$/
needs_love = true
puts "#{filename}: trailing whitespace on line #{lineno}"
line.gsub!(/[ \t]*$/, '')
end

if line.chomp == line
needs_love = true
puts "#{filename}: no newline on line #{lineno}"
line << "\n"
end

newfile << line
end

if needs_love
tempname = "#{filename}.new"

File.open(tempname, 'w').write(newfile)
File.chmod(File.stat(filename).mode, tempname)

FileUtils.ln filename, "#{filename}.bak"
FileUtils.ln tempname, filename, :force => true
File.unlink(tempname)
end
end
end
end

desc "Copy documentation to rubyforge"
task :update_rdoc => [ :rdoc ] do
Rake::SshDirPublisher.new("#{RUBYFORGE_USER}@rubyforge.org", "/var/www/gforge-projects/#{RUBYFORGE_PROJECT}", "rdoc").upload
end

begin
require 'rdoc/task'

# Generate the RDoc documentation
RDoc::Task.new do |rdoc|
rdoc.title = "All-purpose Property List manipulation library"
rdoc.main = "README.rdoc"

rdoc.rdoc_dir = 'rdoc'
rdoc.rdoc_files.include('README.rdoc', 'LICENSE', 'CHANGELOG')
rdoc.rdoc_files.include('lib/**')

rdoc.options = [
'-H', # show hash marks on method names in comments
'-N', # show line numbers
]
end
rescue LoadError
$stderr.puts "Could not load rdoc tasks"
end

# Create compressed packages
spec = Gem::Specification.new do |s|
s.name = PKG_NAME
s.version = PKG_VERSION

s.summary = "All-purpose Property List manipulation library."
s.description = <<-EOD
Plist is a library to manipulate Property List files, also known as plists. It can parse plist files into native Ruby data structures as well as generating new plist files from your Ruby objects.
EOD

s.authors = "Ben Bleything and Patrick May"
s.homepage = "http://plist.rubyforge.org"

s.rubyforge_project = RUBYFORGE_PROJECT

s.has_rdoc = true

s.files = RELEASE_FILES
s.test_files = TEST_FILES

s.autorequire = 'plist'
end

Gem::PackageTask.new(spec) do |p|
p.gem_spec = spec
p.need_tar = true
p.need_zip = true
t.libs << "lib"
t.test_files = FileList["test/**/test_*.rb"]
end

task :default => :test
14 changes: 14 additions & 0 deletions bin/console
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/env ruby

require "bundler/setup"
require "plist"

# You can add fixtures and/or initialization code here to make experimenting
# with your gem easier. You can also use a different console, if you like.

# (If you use this, don't forget to add pry to your Gemfile!)
# require "pry"
# Pry.start

require "irb"
IRB.start(__FILE__)
8 changes: 8 additions & 0 deletions bin/setup
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
set -vx

bundle install

# Do any other automated setup that you need to do here
1 change: 0 additions & 1 deletion lib/plist.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,4 @@
require 'plist/parser'

module Plist
VERSION = '3.2.0'
end
3 changes: 3 additions & 0 deletions lib/plist/version.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module Plist
VERSION = '3.2.0'.freeze
end
30 changes: 30 additions & 0 deletions plist.gemspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# coding: utf-8

lib = File.expand_path("../lib", __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require "plist/version"

Gem::Specification.new do |spec|
spec.name = "plist"
spec.version = Plist::VERSION
spec.authors = ["Ben Bleything", "Patrick May"]

spec.summary = "All-purpose Property List manipulation library"
spec.description = "Plist is a library to manipulate Property List files, "\
"also known as plists. It can parse plist files into "\
"native Ruby data structures as well as generating new "\
"plist files from your Ruby objects."
spec.homepage = "https://github.com/patsplat/plist"
spec.license = "MIT"

spec.files = `git ls-files -z`.split("\x0").reject do |f|
f.match(%r{^(test|spec|features)/})
end
spec.bindir = "exe"
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
spec.require_paths = ["lib"]

spec.add_development_dependency "bundler", "~> 1.14"
spec.add_development_dependency "rake", "~> 10.5"
spec.add_development_dependency "test-unit", "~> 1.2"
end

0 comments on commit e8c8321

Please sign in to comment.