nakajima-another 0.0.2

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/README ADDED
@@ -0,0 +1,18 @@
1
+ = Another =
2
+
3
+ My new Ruby project generator.
4
+
5
+ == Usage ==
6
+
7
+ First install:
8
+
9
+ $ gem install nakajima-another
10
+
11
+ Then use:
12
+
13
+ $ another some-project
14
+
15
+ A directory named "some-project" will then be generated with some
16
+ base project files.
17
+
18
+ (c) Copyright 2008 Pat Nakajima, released under the MIT License.
data/bin/another ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'another')
4
+
5
+ Another.run(ARGV)
data/lib/another.rb ADDED
@@ -0,0 +1,99 @@
1
+ require 'rubygems'
2
+ require 'nakajima'
3
+ require 'fileutils'
4
+ require 'activesupport'
5
+ require 'erb'
6
+
7
+ class String
8
+ def erb_eval(b)
9
+ ERB.new(self).result(b)
10
+ end
11
+
12
+ def write(path)
13
+ puts "- #{path}"
14
+ File.open(path, 'w') do |file|
15
+ file << self
16
+ end
17
+ end
18
+
19
+ def sans(str)
20
+ self.gsub(str, '')
21
+ end
22
+ end
23
+
24
+ module Another
25
+ class Runner
26
+ def initialize(args)
27
+ @args = args
28
+ return if test_mode?
29
+ return puts("Probably for the best.") unless confirmed?
30
+ say "Copying files..."
31
+ FileUtils.mkdir target_directory
32
+ Dir[File.join(template_directory, "**", "**")].each do |file|
33
+ copy!(file.split('/templates/').last)
34
+ end
35
+ say "done!"
36
+ end
37
+
38
+ def confirmed?
39
+ say "Warning: Creating new projects makes you vulnerable to mockery.".bold
40
+ ask "Are you sure you want to create a new project? ".bold do |answer|
41
+ answer =~ /^y/i
42
+ end
43
+ end
44
+
45
+ def test_mode?
46
+ defined?(Spec)
47
+ end
48
+
49
+ def project_name
50
+ @args.first
51
+ end
52
+
53
+ def module_name
54
+ project_name.underscore.camelize
55
+ end
56
+
57
+ def target_directory(path='')
58
+ File.expand_path \
59
+ [
60
+ Dir.pwd,
61
+ project_name,
62
+ path \
63
+ .gsub('PROJECT', project_name.underscore) \
64
+ .sans('.erb')
65
+ ].compact.join("/")
66
+ end
67
+
68
+ def template_directory(path='')
69
+ File.expand_path(File.dirname(__FILE__) + '/../templates/' + path)
70
+ end
71
+
72
+ def copy!(path)
73
+ begin
74
+ read(path) \
75
+ .erb_eval(binding) \
76
+ .write(target_directory(path))
77
+ rescue Errno::EISDIR
78
+ FileUtils.mkdir target_directory(path)
79
+ end
80
+ end
81
+
82
+ def read(path)
83
+ File.read(template_directory(path))
84
+ end
85
+
86
+ def say(msg)
87
+ puts(msg) unless test_mode?
88
+ end
89
+
90
+ def ask(msg)
91
+ print msg unless test_mode?
92
+ yield $stdin.gets.chomp
93
+ end
94
+ end
95
+
96
+ def self.run(args)
97
+ Runner.new(args)
98
+ end
99
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec/spec_helper'
2
+
3
+ describe Another do
4
+ it "runs" do
5
+ mock(Another::Runner).new(['one-more'])
6
+ Another.run(['one-more'])
7
+ end
8
+
9
+ describe Another::Runner do
10
+ attr_reader :runner
11
+
12
+ before(:each) do
13
+ @runner = Another::Runner.new(['one-more'])
14
+ end
15
+
16
+ it "gets project_name" do
17
+ runner.project_name.should == 'one-more'
18
+ end
19
+
20
+ it "gets module name" do
21
+ runner.module_name.should == 'OneMore'
22
+ end
23
+
24
+ it "get target_directory" do
25
+ stub(Dir).pwd { '/User/foo' }
26
+ runner.target_directory.should == '/User/foo/one-more'
27
+ end
28
+
29
+ describe "confirmation" do
30
+ context "when yes" do
31
+ it "is confirmed" do
32
+ stub($stdin).gets { "y" }
33
+ runner.should be_confirmed
34
+ end
35
+ end
36
+
37
+ context "when no" do
38
+ it "is not confirmed" do
39
+ stub($stdin).gets { "n" }
40
+ runner.should_not be_confirmed
41
+ end
42
+ end
43
+
44
+ context "when blank" do
45
+ it "it is not confirmed" do
46
+ stub($stdin).gets { '' }
47
+ runner.should_not be_confirmed
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,8 @@
1
+ require File.dirname(__FILE__) + '/../lib/another'
2
+ require 'rubygems'
3
+ require 'spec'
4
+ require 'rr'
5
+
6
+ Spec::Runner.configure do |config|
7
+ config.mock_with(:rr)
8
+ end
@@ -0,0 +1,3 @@
1
+ h1. <%= project_name %>
2
+
3
+ (c) Copyright 2008 Pat Nakajima, released under MIT License.
@@ -0,0 +1,6 @@
1
+ require 'rubygems'
2
+ require 'nakajima'
3
+
4
+ module <%= module_name %>
5
+ VERSION = '0.0.0'
6
+ end
File without changes
@@ -0,0 +1,9 @@
1
+ require 'spec/spec_helper'
2
+
3
+ describe <%= module_name %> do
4
+ it "should exist" do
5
+ proc {
6
+ <%= module_name %>
7
+ }.should_not raise_error
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+ require 'rr'
4
+
5
+ require File.dirname(__FILE__) + '/../lib/<%= project_name.underscore %>'
6
+
7
+ Spec::Runner.configure { |c| c.mock_with(:rr) }
metadata ADDED
@@ -0,0 +1,62 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nakajima-another
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Pat Nakajima
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-11-20 00:00:00 -08:00
13
+ default_executable: another
14
+ dependencies: []
15
+
16
+ description:
17
+ email: patnakajima@gmail.com
18
+ executables:
19
+ - another
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - README
26
+ - bin/another
27
+ - lib/another.rb
28
+ - spec/another_spec.rb
29
+ - spec/spec_helper.rb
30
+ - templates/README.textile
31
+ - templates/lib/PROJECT.rb.erb
32
+ - templates/lib/PROJECT/.gitignore
33
+ - templates/spec/PROJECT_spec.rb.erb
34
+ - templates/spec/spec_helper.rb.erb
35
+ has_rdoc: false
36
+ homepage:
37
+ post_install_message:
38
+ rdoc_options: []
39
+
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ version:
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: "0"
53
+ version:
54
+ requirements: []
55
+
56
+ rubyforge_project:
57
+ rubygems_version: 1.2.0
58
+ signing_key:
59
+ specification_version: 2
60
+ summary: My new Ruby project generator
61
+ test_files: []
62
+