├── var ├── version ├── name ├── title ├── summary ├── description ├── resources ├── authors ├── created ├── requirements └── copyrights ├── Gemfile ├── pkg └── .gitignore ├── test └── helper.rb ├── lib └── __name__.rb ├── bin └── __name__ ├── .gitignore ├── .sow ├── HISTORY.rdoc ├── MANIFEST ├── README.md ├── Assembly ├── Rulefile └── .gemspec /var/version: -------------------------------------------------------------------------------- 1 | 0.0.0 2 | -------------------------------------------------------------------------------- /var/name: -------------------------------------------------------------------------------- 1 | <%= name %> 2 | -------------------------------------------------------------------------------- /var/title: -------------------------------------------------------------------------------- 1 | <%= title %> 2 | -------------------------------------------------------------------------------- /var/summary: -------------------------------------------------------------------------------- 1 | <%= summary %> 2 | -------------------------------------------------------------------------------- /var/description: -------------------------------------------------------------------------------- 1 | <%= description > 2 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source :rubygems 2 | gemspec 3 | -------------------------------------------------------------------------------- /pkg/.gitignore: -------------------------------------------------------------------------------- 1 | *.gem 2 | *.zip 3 | *.gz 4 | -------------------------------------------------------------------------------- /test/helper.rb: -------------------------------------------------------------------------------- 1 | require 'your-test-framework' 2 | -------------------------------------------------------------------------------- /var/resources: -------------------------------------------------------------------------------- 1 | --- 2 | home: <%= homepage %> 3 | -------------------------------------------------------------------------------- /var/authors: -------------------------------------------------------------------------------- 1 | --- 2 | - Trans <<%= email %> 3 | 4 | -------------------------------------------------------------------------------- /var/created: -------------------------------------------------------------------------------- 1 | <%= Time.now.strftime("%Y-%M-%D") %> 2 | -------------------------------------------------------------------------------- /lib/__name__.rb: -------------------------------------------------------------------------------- 1 | # 2 | module RenameMe 3 | 4 | end 5 | 6 | -------------------------------------------------------------------------------- /var/requirements: -------------------------------------------------------------------------------- 1 | --- 2 | - indexer (build) 3 | - detroit (build) 4 | 5 | -------------------------------------------------------------------------------- /bin/__name__: -------------------------------------------------------------------------------- 1 | require "<%= name %>/cli" 2 | <%= name.capitalize %>::CLI.run(ARGV) %> 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .reap/digest 2 | .yardoc 3 | doc 4 | tmp 5 | site 6 | web 7 | work/sandbox 8 | *.lock 9 | -------------------------------------------------------------------------------- /var/copyrights: -------------------------------------------------------------------------------- 1 | --- 2 | - <%= Time.now.strftime("%Y") %> (c) <%= name %> Rubyworks (BSD-2-Clause) 3 | 4 | -------------------------------------------------------------------------------- /.sow: -------------------------------------------------------------------------------- 1 | 2 | minitest : false 3 | cucumber : false 4 | qed : true 5 | ruby-test : true 6 | lemon : false 7 | 8 | -------------------------------------------------------------------------------- /HISTORY.rdoc: -------------------------------------------------------------------------------- 1 | = RELEASE HISTORY 2 | 3 | 0.1.0 | 2011-01-01 4 | 5 | Summary of release... 6 | 7 | * First release. 8 | 9 | -------------------------------------------------------------------------------- /MANIFEST: -------------------------------------------------------------------------------- 1 | #!mast -x *.lock .index .ruby .yardopts bin data demo info lib man spec test [A-Z][A-Z]* *.md *.rdoc *.txt 2 | 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | = <%= title %> 2 | 3 | "<%= title %>" is a empty Ruby project scaffold. To use it simply clone the repo 4 | and run `reap`. Obviously that means you need to install `reap` first. 5 | 6 | $ gem install reap 7 | 8 | So this is how it goes: 9 | 10 | $ git clone git://github.com/rubyworks/new.git project-name 11 | $ cd project-name 12 | $ reap 13 | 14 | New is pretty opinionated, but over time it will become increasingly flexible. 15 | 16 | 17 | == COPYRIGHTS 18 | 19 | Copyright (c) 2011 Thomas Sawyer 20 | 21 | 22 | -------------------------------------------------------------------------------- /Assembly: -------------------------------------------------------------------------------- 1 | --- 2 | github: {} 3 | 4 | gem: 5 | autospec: true 6 | 7 | dnote: 8 | service : DNote 9 | labels : ~ 10 | output : log/dnote.rdoc 11 | 12 | yard: 13 | yardopts: true 14 | priority: -1 15 | 16 | qedoc: 17 | files : qed/ 18 | output: doc/QED.rdoc 19 | title : AE Demonstrandum 20 | 21 | email: 22 | service : Email 23 | file : ~ 24 | subject : ~ 25 | mailto : 26 | - ruby-talk@ruby-lang.org 27 | - rubyworks-mailinglist@googlegroups.com 28 | #from : transfire@gmail.com 29 | #server : <%= ENV['EMAIL_SERVER'] %> 30 | #port : <%= ENV['EMAIL_PORT'] %> 31 | #account : <%= ENV['EMAIL_ACCOUNT'] %> 32 | #domain : <%= ENV['EMAIL_DOMAIN'] %> 33 | #login : <%= ENV['EMAIL_LOGIN'] %> 34 | #secure : <%= ENV['EMAIL_SECURE'] %> 35 | 36 | vclog: 37 | service : VClog 38 | output : log/history.rdoc 39 | type : history 40 | active : false 41 | 42 | -------------------------------------------------------------------------------- /Rulefile: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | # @todo move to reap proper 4 | #require 'facets/string/file' 5 | require 'facets/kernel/ask' # TODO: make sure reap provides this 6 | 7 | # 8 | # TODO: Do things in ruby instead of shelling out! 9 | # 10 | 11 | ignore 'pkg', 'site' 12 | 13 | trip 'manifest' do 14 | system 'mast -u' 15 | end 16 | 17 | trip 'release' do 18 | exit -1 unless system('detroit release') 19 | system 'pom news | git tag -a -F - #{version}' 20 | end 21 | 22 | file 'VERSION' do 23 | # `dotruby -r meta -r VERSION` 24 | system 'pom spec -u' 25 | end 26 | 27 | file 'PROFILE' do 28 | # TODO: Ultimately `dotruby` should be able to do this. 29 | # `dotruby -r meta -r VERSION` 30 | system 'pom spec -u' 31 | end 32 | 33 | file 'lib/**/*' do 34 | exit -1 unless system('detroit test') 35 | end 36 | 37 | state :create_project do 38 | ! File.exist?('.ruby') 39 | # gem install dotruby 40 | end 41 | 42 | rule :create_project do 43 | system '$EDITOR ruby.yaml' 44 | #break unless ask('creating new project?') 45 | #meta = YAML.load_file('ruby.yaml') 46 | #name = ARGV[1] || File.basename(Dir.pwd) 47 | #meta['name'] = name 48 | #meta.each do |k,v| 49 | # case v2 = ask("#{k} (#{v}):") 50 | # when nil, '' 51 | # when '`' then exit 52 | # when '!' then exit -1 53 | # else 54 | # meta[k] = YAML.load(v2) 55 | # end 56 | #end 57 | end 58 | 59 | 60 | #require 'facets/functor' 61 | #class String 62 | # def file 63 | # str = self 64 | # Functor.new do |op,*a,&b| 65 | # FileUtils.send(op,str,*a,&b) 66 | # end 67 | # end 68 | #end 69 | -------------------------------------------------------------------------------- /.gemspec: -------------------------------------------------------------------------------- 1 | # encoding: utf-8 2 | 3 | require 'yaml' 4 | 5 | module DotRuby 6 | 7 | # 8 | class GemSpec 9 | 10 | # For which revision of .ruby is this gemspec intended? 11 | REVISION = 0 unless defined?(REVISION) 12 | 13 | # 14 | PATTERNS = { 15 | :bin_files => 'bin/*', 16 | :lib_files => 'lib/{**/}*.rb', 17 | :ext_files => 'ext/{**/}extconf.rb', 18 | :doc_files => '*.{txt,rdoc,md,markdown,tt,textile}', 19 | :test_files => '{test/{**/}*_test.rb,spec/{**/}*_spec.rb}' 20 | } unless defined?(PATTERNS) 21 | 22 | # 23 | def self.instance 24 | new.to_gemspec 25 | end 26 | 27 | attr :metadata 28 | 29 | attr :manifest 30 | 31 | # 32 | def initialize 33 | @metadata = YAML.load_file('.ruby') 34 | @manifest = Dir.glob('manifest{,.txt}', File::FNM_CASEFOLD).first 35 | 36 | if @metadata['revision'].to_i != REVISION 37 | warn "You have the wrong revision. Trying anyway..." 38 | end 39 | end 40 | 41 | # 42 | def scm 43 | @scm ||= \ 44 | case 45 | when File.directory?('.git') 46 | :git 47 | end 48 | end 49 | 50 | # 51 | def files 52 | @files ||= \ 53 | #glob_files[patterns[:files]] 54 | case 55 | when manifest 56 | File.readlines(manifest). 57 | map{ |line| line.strip }. 58 | reject{ |line| line.empty? || line[0,1] == '#' } 59 | when scm == :git 60 | `git ls-files -z`.split("\0") 61 | else 62 | Dir.glob('{**/}{.*,*}') # TODO: be more specific using standard locations ? 63 | end.select{ |path| File.file?(path) } 64 | end 65 | 66 | # 67 | def glob_files(pattern) 68 | Dir.glob(pattern).select { |path| 69 | File.file?(path) && files.include?(path) 70 | } 71 | end 72 | 73 | # 74 | def patterns 75 | PATTERNS 76 | end 77 | 78 | # 79 | def executables 80 | @executables ||= \ 81 | glob_files(patterns[:bin_files]).map do |path| 82 | File.basename(path) 83 | end 84 | end 85 | 86 | def extensions 87 | @extensions ||= \ 88 | glob_files(patterns[:ext_files]).map do |path| 89 | File.basename(path) 90 | end 91 | end 92 | 93 | # 94 | def name 95 | metadata['name'] || metadata['title'].downcase.gsub(/\W+/,'_') 96 | end 97 | 98 | # 99 | def to_gemspec 100 | Gem::Specification.new do |gemspec| 101 | gemspec.name = name 102 | gemspec.version = metadata['version'] 103 | gemspec.summary = metadata['summary'] 104 | gemspec.description = metadata['description'] 105 | 106 | metadata['authors'].each do |author| 107 | gemspec.authors << author['name'] 108 | 109 | if author.has_key?('email') 110 | if gemspec.email 111 | gemspec.email << author['email'] 112 | else 113 | gemspec.email = [author['email']] 114 | end 115 | end 116 | end 117 | 118 | gemspec.licenses = metadata['copyrights'].map{ |c| c['license'] }.compact 119 | 120 | metadata['requirements'].each do |req| 121 | name = req['name'] 122 | version = req['version'] 123 | groups = req['groups'] || [] 124 | 125 | case version 126 | when /^(.*?)\+$/ 127 | version = ">= #{$1}" 128 | when /^(.*?)\-$/ 129 | version = "< #{$1}" 130 | when /^(.*?)\~$/ 131 | version = "~> #{$1}" 132 | end 133 | 134 | if groups.empty? or groups.include?('runtime') 135 | # populate runtime dependencies 136 | if gemspec.respond_to?(:add_runtime_dependency) 137 | gemspec.add_runtime_dependency(name,*version) 138 | else 139 | gemspec.add_dependency(name,*version) 140 | end 141 | else 142 | # populate development dependencies 143 | if gemspec.respond_to?(:add_development_dependency) 144 | gemspec.add_development_dependency(name,*version) 145 | else 146 | gemspec.add_dependency(name,*version) 147 | end 148 | end 149 | end 150 | 151 | # convert external dependencies into a requirements 152 | if metadata['external_dependencies'] 153 | ##gemspec.requirements = [] unless metadata['external_dependencies'].empty? 154 | metadata['external_dependencies'].each do |req| 155 | gemspec.requirements << req.to_s 156 | end 157 | end 158 | 159 | # determine homepage from resources 160 | homepage = metadata['resources'].find{ |r| r['type'].to_s =~ /^home/ || r['name'].to_s =~ /^(home|web)/i } 161 | gemspec.homepage = homepage['uri'] if homepage 162 | 163 | gemspec.require_paths = metadata['load_path'] || ['lib'] 164 | gemspec.post_install_message = metadata['install_message'] 165 | 166 | # RubyGems specific metadata 167 | gemspec.files = files 168 | gemspec.extensions = extensions 169 | gemspec.executables = executables 170 | 171 | if Gem::VERSION < '1.7.' 172 | gemspec.default_executable = gemspec.executables.first 173 | end 174 | 175 | gemspec.test_files = glob_files(patterns[:test_files]) 176 | 177 | unless gemspec.files.include?('.document') 178 | gemspec.extra_rdoc_files = glob_files(patterns[:doc_files]) 179 | end 180 | end 181 | end 182 | 183 | end #class GemSpec 184 | 185 | end 186 | 187 | DotRuby::GemSpec.instance 188 | --------------------------------------------------------------------------------