noe 1.1.0 → 1.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/CHANGELOG.md +36 -1
- data/Gemfile.lock +40 -0
- data/Manifest.txt +15 -0
- data/README.md +10 -9
- data/Rakefile +3 -2
- data/lib/noe.rb +1 -1
- data/lib/noe/ext/array.rb +0 -4
- data/lib/noe/ext/hash.rb +1 -1
- data/lib/noe/loader.rb +3 -67
- data/lib/noe/main.rb +1 -0
- data/noe.gemspec +4 -3
- data/noe.noespec +44 -0
- data/tasks/debug_mail.rake +77 -0
- data/tasks/debug_mail.txt +13 -0
- data/tasks/gem.rake +30 -6
- data/tasks/spec_test.rake +34 -16
- data/tasks/unit_test.rake +26 -6
- data/tasks/yard.rake +24 -9
- data/templates/ruby/CHANGELOG.md +18 -2
- data/templates/ruby/noespec.yaml +110 -4
- data/templates/ruby/short.yaml +25 -4
- data/templates/ruby/src/Manifest.txt +3 -0
- data/templates/ruby/src/Rakefile +3 -2
- data/templates/ruby/src/__lower__.gemspec +1 -1
- data/templates/ruby/src/lib/__lower__.rb +1 -1
- data/templates/ruby/src/lib/__lower__/loader.rb +1 -65
- data/templates/ruby/src/tasks/debug_mail.rake +77 -0
- data/templates/ruby/src/tasks/debug_mail.txt +13 -0
- data/templates/ruby/src/tasks/gem.rake +32 -8
- data/templates/ruby/src/tasks/spec_test.rake +39 -21
- data/templates/ruby/src/tasks/unit_test.rake +31 -11
- data/templates/ruby/src/tasks/yard.rake +24 -9
- metadata +39 -200
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,39 @@
|
|
1
|
-
# 1.
|
1
|
+
# 1.2.0 / 2011-01-17
|
2
|
+
|
3
|
+
* Broken things
|
4
|
+
|
5
|
+
* Arrays are not union-merged anymore during YAML merging between .noespec and template's noespec.yaml.
|
6
|
+
This may introduce small problems on existing projects that use the default ruby skeleton while
|
7
|
+
specifying additional dependencies. Users have to copy default dependencies in their own .noespec
|
8
|
+
file.
|
9
|
+
* Noe does not contain its loader anymore. As a side effect, it does not require rubygems anymore
|
10
|
+
and 'noe' binary relies on the gem installer to meet its dependencies.
|
11
|
+
|
12
|
+
* Minor enhancements
|
13
|
+
|
14
|
+
* Fixed 'noe --backtrace go', which didn't print the ruby backtrace.
|
15
|
+
|
16
|
+
* Bug fixes
|
17
|
+
|
18
|
+
* A nil value on right of YAML merging (.noespec) correctly overrides the value specified on left
|
19
|
+
(typically template's noespec.yaml)
|
20
|
+
|
21
|
+
* Default ruby skeleton
|
22
|
+
|
23
|
+
* A 'description' variable is introduced in .noespec and made mandatory to avoid weird results
|
24
|
+
on rubygems.org when using the whole README.md file for project description.
|
25
|
+
* Enhanced 'rake package/gem' to be configurable from .noespec under variables/rake_tasks/gem
|
26
|
+
* Enhanced 'rake unit_test' to be configurable from .noespec under variables/rake_tasks/unit_test
|
27
|
+
* Enhanced 'rake spec_test' to be configurable from .noespec under variables/rake_tasks/unit_test
|
28
|
+
* Enhanced 'rake yard' to be configurable from .noespec under variables/rake_tasks/yard
|
29
|
+
* Added 'rake debug_mail' which is configurable from .noespec under variables/rake_tasks/debug_mail
|
30
|
+
* lib/__lower__/loader.rb only use plain requires instead of a more complex algorithm. This follows
|
31
|
+
the discussion with Luis Lavena on ruby-talk (http://bit.ly/gqukPw)
|
32
|
+
* Added a proposal dependency (wlang ~> 0.10.1) required by the debug_mail task
|
33
|
+
* Fixed tasks/unit_test.rake under 1.9.2 (raised 'no such file to load -- []' with options=[] instead
|
34
|
+
of nil)
|
35
|
+
|
36
|
+
# 1.1.0 / 2011-01-14
|
2
37
|
|
3
38
|
* Template specification/instantiation enhancements
|
4
39
|
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
noe (1.2.0)
|
5
|
+
highline (~> 1.6.0)
|
6
|
+
quickl (~> 0.2.0)
|
7
|
+
wlang (~> 0.10.1)
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: http://rubygems.org/
|
11
|
+
specs:
|
12
|
+
bluecloth (2.0.9)
|
13
|
+
diff-lcs (1.1.2)
|
14
|
+
highline (1.6.1)
|
15
|
+
quickl (0.2.0)
|
16
|
+
rake (0.8.7)
|
17
|
+
rspec (2.4.0)
|
18
|
+
rspec-core (~> 2.4.0)
|
19
|
+
rspec-expectations (~> 2.4.0)
|
20
|
+
rspec-mocks (~> 2.4.0)
|
21
|
+
rspec-core (2.4.0)
|
22
|
+
rspec-expectations (2.4.0)
|
23
|
+
diff-lcs (~> 1.1.2)
|
24
|
+
rspec-mocks (2.4.0)
|
25
|
+
wlang (0.10.1)
|
26
|
+
yard (0.6.4)
|
27
|
+
|
28
|
+
PLATFORMS
|
29
|
+
ruby
|
30
|
+
|
31
|
+
DEPENDENCIES
|
32
|
+
bluecloth (~> 2.0.9)
|
33
|
+
bundler (~> 1.0)
|
34
|
+
highline (~> 1.6.0)
|
35
|
+
noe!
|
36
|
+
quickl (~> 0.2.0)
|
37
|
+
rake (~> 0.8.7)
|
38
|
+
rspec (~> 2.4.0)
|
39
|
+
wlang (~> 0.10.1)
|
40
|
+
yard (~> 0.6.4)
|
data/Manifest.txt
ADDED
data/README.md
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# Noe - A simple and extensible project generator
|
2
2
|
|
3
|
-
Noe is a tool that generates
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
Noe is a tool that generates project skeletons from predefined templates. A template is designed
|
4
|
+
for a specific product (a ruby library, a static or dynamic web site, ...). Noe instantiates
|
5
|
+
templates and helps you maintaining your product via meta-information provided by a .noespec yaml
|
6
|
+
file. In contrast to other tools, Noe is not specific to certain kinds of products. Writing your
|
7
|
+
own template is possible and even simple!
|
7
8
|
|
8
|
-
Noe comes bundled with a skeleton for creating and maintaining a ruby gem. This skeleton
|
9
|
-
|
10
|
-
|
11
|
-
sections below.
|
9
|
+
Noe comes bundled with a skeleton for creating and maintaining a ruby gem. This skeleton is written
|
10
|
+
and maintained to follow ruby best practices and may also be tuned for your own needs. Read more
|
11
|
+
about it and related projects as well as the underlying philosophy in the sections below.
|
12
12
|
|
13
13
|
## Getting started
|
14
14
|
|
@@ -31,7 +31,8 @@ instantiate a ruby project simply execute the following commands in turn:
|
|
31
31
|
noe go
|
32
32
|
|
33
33
|
That's it! But also have a look at 'noe help prepare' and 'not help go' for additional
|
34
|
-
options.
|
34
|
+
options. Also have a look at [http://revision-zero.org/noe](http://revision-zero.org/noe)
|
35
|
+
for a blog post about basic usage.
|
35
36
|
|
36
37
|
## Philosophy
|
37
38
|
|
data/Rakefile
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
begin
|
2
2
|
gem "bundler", "~> 1.0"
|
3
3
|
require "bundler/setup"
|
4
|
-
rescue LoadError
|
5
|
-
|
4
|
+
rescue LoadError => ex
|
5
|
+
puts ex.message
|
6
|
+
abort "Bundler failed to load, (did you run 'gem install bundler' ?)"
|
6
7
|
end
|
7
8
|
|
8
9
|
# Dynamically load the gem spec
|
data/lib/noe.rb
CHANGED
data/lib/noe/ext/array.rb
CHANGED
data/lib/noe/ext/hash.rb
CHANGED
@@ -18,7 +18,7 @@ class Hash
|
|
18
18
|
# Makes a fully recursive merge
|
19
19
|
def noe_merge(right)
|
20
20
|
self.merge(right) do |key,oldval,newval|
|
21
|
-
if oldval.nil?
|
21
|
+
if oldval.nil? or newval.nil?
|
22
22
|
newval
|
23
23
|
elsif oldval.class != newval.class
|
24
24
|
raise Noe::Error, "Conflict on #{key} has to be resolved manually, sorry.\n"\
|
data/lib/noe/loader.rb
CHANGED
@@ -1,67 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
#
|
5
|
-
module Loader
|
6
|
-
|
7
|
-
#
|
8
|
-
# This method allows requiring dependencies with some flexibility.
|
9
|
-
#
|
10
|
-
# Implemented algorithm makes greedy choices about the environment:
|
11
|
-
# 1. It first attempts a simple <code>Kernel.require(name)</code> before
|
12
|
-
# anything else (even bypassing version requirement)
|
13
|
-
# 2. If step 1 fails with a LoadError then it falls back requiring the
|
14
|
-
# gem with specified version (defaults to >= 0) and retries step 1.
|
15
|
-
# 3. If step 2 fails with a NameError, 'rubygems' are required and step
|
16
|
-
# 2 is retried.
|
17
|
-
# 4. If step 3. fails, the initial LoadError is reraised.
|
18
|
-
#
|
19
|
-
# Doing so ensures flexibility for the users of the library by not making
|
20
|
-
# wrong assumptions about their environment. Testing the library is also
|
21
|
-
# made easier, as illustrated in the examples below. Please note that this
|
22
|
-
# method is useful to load external dependencies of your code only, not
|
23
|
-
# .rb files of your own library.
|
24
|
-
#
|
25
|
-
# Examples:
|
26
|
-
#
|
27
|
-
# # Require something from the standard library
|
28
|
-
# Noe::Loader.require('fileutils')
|
29
|
-
#
|
30
|
-
# # Require a gem without specifing any particular version
|
31
|
-
# Noe::Loader.require('highline')
|
32
|
-
#
|
33
|
-
# # Require a gem, specifing a particular version
|
34
|
-
# Noe::Loader.require('foo', "~> 1.6")
|
35
|
-
#
|
36
|
-
# # Twist the load path to use version of foo you've recently
|
37
|
-
# # forked (bypass the version requirement)
|
38
|
-
# $LOAD_PATH.unshift ... # or ruby -I...
|
39
|
-
# Noe::Loader.require('highline', "~> 1.6")
|
40
|
-
#
|
41
|
-
# Learn more about this pattern:
|
42
|
-
# - http://weblog.rubyonrails.org/2009/9/1/gem-packaging-best-practices
|
43
|
-
# - https://gist.github.com/54177
|
44
|
-
#
|
45
|
-
def require(name, version = nil)
|
46
|
-
Kernel.require name.to_s
|
47
|
-
rescue LoadError
|
48
|
-
begin
|
49
|
-
gem name.to_s, version || ">= 0"
|
50
|
-
rescue NameError
|
51
|
-
if $VERBOSE
|
52
|
-
Kernel.warn "#{__FILE__}:#{__LINE__}: warning: requiring rubygems myself, "\
|
53
|
-
" you should use 'ruby -rubygems' instead. "\
|
54
|
-
"See https://gist.github.com/54177"
|
55
|
-
end
|
56
|
-
require "rubygems"
|
57
|
-
gem name.to_s, version || ">= 0"
|
58
|
-
end
|
59
|
-
Kernel.require name.to_s
|
60
|
-
end
|
61
|
-
module_function :require
|
62
|
-
|
63
|
-
end # module Loader
|
64
|
-
end # module Noe
|
65
|
-
Noe::Loader.require("wlang", "~> 0.10.0")
|
66
|
-
Noe::Loader.require("quickl", "~> 0.2.0")
|
67
|
-
Noe::Loader.require("highline", "~> 1.6.0")
|
1
|
+
require "wlang"
|
2
|
+
require "quickl"
|
3
|
+
require "highline"
|
data/lib/noe/main.rb
CHANGED
data/noe.gemspec
CHANGED
@@ -21,13 +21,13 @@ Gem::Specification.new do |s|
|
|
21
21
|
# A short summary of this gem
|
22
22
|
#
|
23
23
|
# This is displayed in `gem list -d`.
|
24
|
-
s.summary = "Noe is a
|
24
|
+
s.summary = "Noe is a simple, general-purpose and extensible skeleton generator from project templates"
|
25
25
|
|
26
26
|
# A long description of this gem (required)
|
27
27
|
#
|
28
28
|
# The description should be more detailed than the summary. For example,
|
29
29
|
# you might wish to copy the entire README into the description.
|
30
|
-
s.description =
|
30
|
+
s.description = "Noe is a tool that generates project skeletons from predefined templates. A template is designed for a specific product (a ruby library, a static or dynamic web site, ...). Noe instantiates templates and helps you maintaining your product via meta-information provided by a .noespec yaml file. In contrast to other tools, Noe is not specific to certain kinds of products. Writing your own template is possible and even simple!"
|
31
31
|
|
32
32
|
# The URL of this gem home page (optional)
|
33
33
|
s.homepage = "http://github.com/blambeau/noe"
|
@@ -129,7 +129,8 @@ Gem::Specification.new do |s|
|
|
129
129
|
s.add_development_dependency("rspec", "~> 2.4.0")
|
130
130
|
s.add_development_dependency("yard", "~> 0.6.4")
|
131
131
|
s.add_development_dependency("bluecloth", "~> 2.0.9")
|
132
|
-
s.
|
132
|
+
s.add_development_dependency("wlang", "~> 0.10.1")
|
133
|
+
s.add_dependency("wlang", "~> 0.10.1")
|
133
134
|
s.add_dependency("quickl", "~> 0.2.0")
|
134
135
|
s.add_dependency("highline", "~> 1.6.0")
|
135
136
|
|
data/noe.noespec
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
template-info:
|
2
|
+
name: ruby
|
3
|
+
version: 1.2.0
|
4
|
+
author: Bernard Lambeau <blambeau@gmail.com>
|
5
|
+
variables:
|
6
|
+
lower: noe
|
7
|
+
upper: Noe
|
8
|
+
version: 1.2.0
|
9
|
+
summary:
|
10
|
+
Noe is a simple, general-purpose and extensible skeleton generator from project templates
|
11
|
+
description:
|
12
|
+
Noe is a tool that generates project skeletons from predefined templates. A template is designed
|
13
|
+
for a specific product (a ruby library, a static or dynamic web site, ...). Noe instantiates
|
14
|
+
templates and helps you maintaining your product via meta-information provided by a .noespec yaml
|
15
|
+
file. In contrast to other tools, Noe is not specific to certain kinds of products. Writing your
|
16
|
+
own template is possible and even simple!
|
17
|
+
authors:
|
18
|
+
- {name: Bernard Lambeau, email: blambeau@gmail.com}
|
19
|
+
links:
|
20
|
+
- http://github.com/blambeau/noe
|
21
|
+
- http://rubygems.org/gems/noe
|
22
|
+
- http://revision-zero.org/noe
|
23
|
+
dependencies:
|
24
|
+
- {name: rake, version: "~> 0.8.7", groups: [development]}
|
25
|
+
- {name: bundler, version: "~> 1.0", groups: [development]}
|
26
|
+
- {name: rspec, version: "~> 2.4.0", groups: [development]}
|
27
|
+
- {name: yard, version: "~> 0.6.4", groups: [development]}
|
28
|
+
- {name: bluecloth, version: "~> 2.0.9", groups: [development]}
|
29
|
+
#
|
30
|
+
- {name: wlang, version: "~> 0.10.1", groups: [development, runtime]}
|
31
|
+
- {name: quickl, version: "~> 0.2.0", groups: [runtime]}
|
32
|
+
- {name: highline, version: "~> 1.6.0", groups: [runtime]}
|
33
|
+
gemspec:
|
34
|
+
post_install_message: |
|
35
|
+
Noe successfully installed!
|
36
|
+
|
37
|
+
What's next?
|
38
|
+
- 'noe help install' for configuration and default templates
|
39
|
+
- 'noe prepare --template=ruby hello_world'
|
40
|
+
|
41
|
+
Thank you for using Noe, enjoy!
|
42
|
+
rake_tasks:
|
43
|
+
debug_mail:
|
44
|
+
nb_changelog_sections: 2
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# Installs a rake task for debuging the announcement mail.
|
2
|
+
#
|
3
|
+
# This file installs the 'rake debug_mail' that flushes an announcement mail
|
4
|
+
# for your library on the standard output. It is automatically generated
|
5
|
+
# by Noe from your .noespec file, and should therefore be configured there,
|
6
|
+
# under the variables/rake_tasks/debug_mail entry, as illustrated below:
|
7
|
+
#
|
8
|
+
# variables:
|
9
|
+
# rake_tasks:
|
10
|
+
# debug_mail:
|
11
|
+
# rx_changelog_sections: /^#/
|
12
|
+
# nb_changelog_sections: 1
|
13
|
+
# ...
|
14
|
+
#
|
15
|
+
# If you have specific needs requiring manual intervention on this file,
|
16
|
+
# don't forget to set safe-override to false in your noe specification:
|
17
|
+
#
|
18
|
+
# template-info:
|
19
|
+
# manifest:
|
20
|
+
# tasks/debug_mail.rake:
|
21
|
+
# safe-override: false
|
22
|
+
#
|
23
|
+
# The mail template used can be found in debug_mail.txt. That file may be
|
24
|
+
# changed to tune the mail you want to send. If you do so, don't forget to
|
25
|
+
# add a manifest entry in your .noespec file to avoid overriding you
|
26
|
+
# changes. The mail template uses wlang, with parentheses for block
|
27
|
+
# delimiters.
|
28
|
+
#
|
29
|
+
# template-info:
|
30
|
+
# manifest:
|
31
|
+
# tasks/debug_mail.txt:
|
32
|
+
# safe-override: false
|
33
|
+
#
|
34
|
+
begin
|
35
|
+
require 'wlang'
|
36
|
+
require 'yaml'
|
37
|
+
|
38
|
+
task :debug_mail do
|
39
|
+
# Check that a .noespec file exists
|
40
|
+
noespec_file = File.expand_path('../../noe.noespec', __FILE__)
|
41
|
+
unless File.exists?(noespec_file)
|
42
|
+
raise "Unable to find .noespec project file, sorry."
|
43
|
+
end
|
44
|
+
|
45
|
+
# Load it as well as variables and options
|
46
|
+
noespec = YAML::load(File.read(noespec_file))
|
47
|
+
vars = noespec['variables'] || {}
|
48
|
+
|
49
|
+
# Changes are taken from CHANGELOG
|
50
|
+
logs = Dir[File.expand_path("../../CHANGELOG.*", __FILE__)]
|
51
|
+
unless logs.size == 1
|
52
|
+
abort "Unable to find a changelog file"
|
53
|
+
end
|
54
|
+
|
55
|
+
# Load interesting changesets
|
56
|
+
changes, end_found = [], 0
|
57
|
+
File.readlines(logs.first).select{|line|
|
58
|
+
if line =~ /^#/
|
59
|
+
break if end_found >= 2
|
60
|
+
end_found += 1
|
61
|
+
end
|
62
|
+
changes << line
|
63
|
+
}
|
64
|
+
vars['changes'] = changes.join
|
65
|
+
|
66
|
+
# WLang template
|
67
|
+
template = File.expand_path('../debug_mail.txt', __FILE__)
|
68
|
+
|
69
|
+
# Let's go!
|
70
|
+
$stdout << WLang::file_instantiate(template, vars, "wlang/active-text")
|
71
|
+
end
|
72
|
+
|
73
|
+
rescue LoadError
|
74
|
+
task :debug_mail do
|
75
|
+
abort "wlang is not available. Try 'gem install wlang'"
|
76
|
+
end
|
77
|
+
end
|
data/tasks/gem.rake
CHANGED
@@ -1,4 +1,28 @@
|
|
1
|
-
#
|
1
|
+
# Installs rake tasks for gemming and packaging
|
2
|
+
#
|
3
|
+
# This file installs the 'rake package', 'rake gem' tasks and associates
|
4
|
+
# (clobber_package, repackage, ...). It is automatically generated by Noe
|
5
|
+
# from your .noespec file, and should therefore be configured there, under
|
6
|
+
# the variables/rake_tasks/gem entry, as illustrated below:
|
7
|
+
#
|
8
|
+
# variables:
|
9
|
+
# rake_tasks:
|
10
|
+
# gem:
|
11
|
+
# package_dir: pkg
|
12
|
+
# need_tar: false
|
13
|
+
# need_tar_gz: false
|
14
|
+
# need_tar_bz2: false
|
15
|
+
# need_zip: false
|
16
|
+
# ...
|
17
|
+
#
|
18
|
+
# If you have specific needs requiring manual intervention on this file,
|
19
|
+
# don't forget to set safe-override to false in your noe specification:
|
20
|
+
#
|
21
|
+
# template-info:
|
22
|
+
# manifest:
|
23
|
+
# tasks/gem.rake:
|
24
|
+
# safe-override: false
|
25
|
+
#
|
2
26
|
begin
|
3
27
|
require 'rubygems/package_task'
|
4
28
|
Gem::PackageTask.new($gemspec) do |t|
|
@@ -10,28 +34,28 @@ begin
|
|
10
34
|
t.version = $gemspec.version
|
11
35
|
|
12
36
|
# Directory used to store the package files
|
13
|
-
t.package_dir =
|
37
|
+
t.package_dir = "pkg"
|
14
38
|
|
15
39
|
# True if a gzipped tar file (tgz) should be produced
|
16
40
|
t.need_tar = false
|
17
41
|
|
18
42
|
# True if a gzipped tar file (tar.gz) should be produced
|
19
|
-
t.need_tar_gz =
|
43
|
+
t.need_tar_gz = false
|
20
44
|
|
21
45
|
# True if a bzip2'd tar file (tar.bz2) should be produced
|
22
46
|
t.need_tar_bz2 = false
|
23
47
|
|
24
48
|
# True if a zip file should be produced (default is false)
|
25
|
-
t.need_zip =
|
49
|
+
t.need_zip = false
|
26
50
|
|
27
51
|
# List of files to be included in the package.
|
28
52
|
t.package_files = $gemspec.files
|
29
53
|
|
30
54
|
# Tar command for gzipped or bzip2ed archives.
|
31
|
-
t.tar_command =
|
55
|
+
t.tar_command = "tar"
|
32
56
|
|
33
57
|
# Zip command for zipped archives.
|
34
|
-
t.zip_command =
|
58
|
+
t.zip_command = "zip"
|
35
59
|
|
36
60
|
end
|
37
61
|
rescue LoadError
|