my_scripts 0.1.0 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY +12 -0
- data/VERSION +1 -1
- data/lib/my_scripts/cli.rb +3 -2
- data/lib/my_scripts/script.rb +4 -0
- data/lib/my_scripts/scripts/bon.rb +1 -1
- data/lib/my_scripts/scripts/gitto.rb +20 -5
- data/lib/my_scripts/scripts/jew.rb +4 -4
- data/spec/my_scripts/scripts/gitto_spec.rb +55 -0
- data/spec/my_scripts/scripts/shared.rb +7 -0
- data/spec/my_scripts_spec.rb +17 -30
- data/spec/spec_helper.rb +53 -0
- data/tasks/gem.rake +3 -0
- metadata +7 -3
data/HISTORY
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
data/lib/my_scripts/cli.rb
CHANGED
@@ -8,7 +8,7 @@ module MyScripts
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
attr_accessor :stdout, :stdin
|
11
|
+
attr_accessor :stdout, :stdin, :kernel
|
12
12
|
|
13
13
|
# Instantiates new CLI(command line interface) and runs script with given name (token)
|
14
14
|
# and argv inside new CLI instance
|
@@ -17,9 +17,10 @@ module MyScripts
|
|
17
17
|
end
|
18
18
|
|
19
19
|
# Creates new command line interface
|
20
|
-
def initialize( stdin=$stdin, stdout=$stdout )
|
20
|
+
def initialize( stdin=$stdin, stdout=$stdout, kernel = Kernel )
|
21
21
|
@stdin = stdin
|
22
22
|
@stdout = stdout
|
23
|
+
@kernel = kernel
|
23
24
|
end
|
24
25
|
|
25
26
|
# Runs a script with given name (token) and argv inside this CLI instance
|
data/lib/my_scripts/script.rb
CHANGED
@@ -11,7 +11,7 @@ module MyScripts
|
|
11
11
|
name = @argv.shift
|
12
12
|
|
13
13
|
# All the other args lumped into summary, or default summary
|
14
|
-
summary = @argv.empty? ? "New project #{
|
14
|
+
summary = @argv.empty? ? "New project #{name}" : @argv.join(' ')
|
15
15
|
|
16
16
|
puts "Creating Bones project #{name} with summary: #{summary}"
|
17
17
|
|
@@ -8,16 +8,31 @@ module MyScripts
|
|
8
8
|
usage "[0.1.2 - version, 100/10/1 - bump major/minor/patch, .patch - add patch] Commit message goes here" if @argv.empty?
|
9
9
|
|
10
10
|
# First Arg may indicate version command if it matches pattern
|
11
|
-
|
11
|
+
version_command = @argv[0] =~ /^(\d+\.\d+\.\d+(?:\.(.*?))?|\.(.*?)|\d{1}0{0,2})$/ ? @argv.shift : nil
|
12
12
|
|
13
13
|
# All the other args lumped into message, or default message
|
14
|
-
|
14
|
+
if @argv.empty?
|
15
|
+
commit_message = "Commit #{Time.now.to_s[0..-6]}"
|
16
|
+
history_message = nil
|
17
|
+
else
|
18
|
+
commit_message = history_message = @argv.join(' ')
|
19
|
+
end
|
15
20
|
|
16
|
-
|
21
|
+
# Updating version if version command set
|
22
|
+
if version_command
|
23
|
+
puts "Updating version with #{version_command}"
|
24
|
+
if history_message
|
25
|
+
system %Q{rake "version[#{version_command},#{history_message}]"}
|
26
|
+
else
|
27
|
+
system %Q{rake version[#{version_command}]}
|
28
|
+
end
|
29
|
+
end
|
17
30
|
|
18
|
-
|
31
|
+
puts "Committing with message: #{commit_message}"
|
19
32
|
system %Q{git add --all}
|
20
|
-
system %Q{git commit -a -m "#{
|
33
|
+
system %Q{git commit -a -m "#{commit_message}" --author arvicco}
|
34
|
+
|
35
|
+
puts "Pushing to remote(s)"
|
21
36
|
system %Q{git push}
|
22
37
|
end
|
23
38
|
end
|
@@ -7,14 +7,14 @@ module MyScripts
|
|
7
7
|
usage "project_name Summary or description goes here" if @argv.empty?
|
8
8
|
|
9
9
|
# First Arg should be project name
|
10
|
-
|
10
|
+
name = @argv.shift
|
11
11
|
|
12
12
|
# All the other args lumped into summary, or default summary
|
13
|
-
summary = @argv.empty? ? "New project #{
|
13
|
+
summary = @argv.empty? ? "New project #{name}" : @argv.join(' ')
|
14
14
|
|
15
|
-
puts "Creating Jeweler project #{
|
15
|
+
puts "Creating Jeweler project #{name} with summary/description: #{summary}"
|
16
16
|
|
17
|
-
system %Q[jeweler --rspec --cucumber --create-repo --summary "#{summary}" --description "#{summary}" #{
|
17
|
+
system %Q[jeweler --rspec --cucumber --create-repo --summary "#{summary}" --description "#{summary}" #{name}]
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'my_scripts/scripts/shared'
|
3
|
+
|
4
|
+
module MyScriptsTest
|
5
|
+
VERSION_COMMANDS = %W[1 10 100 1.2.3 1.2.3.beta2 0.0.1.patch .patch .b2a]
|
6
|
+
|
7
|
+
describe MyScripts::Gitto do
|
8
|
+
before(:each) do
|
9
|
+
create_cli(:system=> 'ok')
|
10
|
+
@name = 'gitto'
|
11
|
+
end
|
12
|
+
|
13
|
+
it_should_behave_like "script with args"
|
14
|
+
|
15
|
+
context 'No version command' do
|
16
|
+
it 'Commits with message, pushes to remote' do
|
17
|
+
message = 'This is bomb!'
|
18
|
+
stdout_should_receive "Committing with message: #{message}",
|
19
|
+
"Pushing to remote(s)"
|
20
|
+
system_should_receive "git add --all",
|
21
|
+
%Q{git commit -a -m "#{message}" --author arvicco},
|
22
|
+
"git push"
|
23
|
+
cli "#{@name} #{message}"
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'With version command' do
|
27
|
+
it 'Commits with message if message given, pushes to remote' do
|
28
|
+
VERSION_COMMANDS.each do |command|
|
29
|
+
message = 'This is bomb!'
|
30
|
+
|
31
|
+
stdout_should_receive "Committing with message: #{message}",
|
32
|
+
"Pushing to remote(s)"
|
33
|
+
system_should_receive %Q{rake "version[#{command},#{message}]"},
|
34
|
+
"git add --all",
|
35
|
+
%Q{git commit -a -m "#{message}" --author arvicco},
|
36
|
+
"git push"
|
37
|
+
cli "#{@name} #{command} #{message}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'Commits and pushes with default timestamped message if no message' do
|
42
|
+
VERSION_COMMANDS.each do |command|
|
43
|
+
stdout_should_receive "Committing with message: Commit #{Time.now.to_s[0..-6]}",
|
44
|
+
"Pushing to remote(s)"
|
45
|
+
system_should_receive "rake version[#{command}]",
|
46
|
+
"git add --all",
|
47
|
+
%Q{git commit -a -m "Commit #{Time.now.to_s[0..-6]}" --author arvicco},
|
48
|
+
"git push"
|
49
|
+
cli "#{@name} #{command}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/spec/my_scripts_spec.rb
CHANGED
@@ -2,35 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module MyScriptsTest
|
4
4
|
|
5
|
-
|
6
|
-
# stdin optionally preloaded with fake user input
|
7
|
-
def create_cli( opts={} )
|
8
|
-
@stdout = opts[:stdout] || mock('stdout').as_null_object
|
9
|
-
@stdin = opts[:stdin] || mock('stdin')
|
10
|
-
if opts[:input]
|
11
|
-
@stdin.stub(:gets).and_return(*opts[:input])
|
12
|
-
else
|
13
|
-
@stdin.stub(:gets).and_return('')
|
14
|
-
end
|
15
|
-
@cli = MyScripts::CLI.new @stdin, @stdout
|
16
|
-
end
|
17
|
-
|
18
|
-
# sets expectation for stdout to receive strictly ordered sequence of exact messages
|
19
|
-
def stdout_should_receive(*messages)
|
20
|
-
messages.each do |message|
|
21
|
-
@stdout.should_receive(:puts).with(message).once.ordered
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
# sets expectation for stdout to receive message(s) containing all of the patterns (unordered)
|
26
|
-
def stdout_should_include(*patterns)
|
27
|
-
patterns.each do |pattern|
|
28
|
-
re = Regexp === pattern ? pattern : Regexp.new(Regexp.escape(pattern))
|
29
|
-
@stdout.should_receive(:puts).with(re).at_least(:once)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe 'Script Execution' do
|
5
|
+
describe 'Script Execution (in general)' do
|
34
6
|
MyScripts.module_eval do
|
35
7
|
# Stub script that outputs @argv, prompts to stdout and echoes/returns what it gets from stdin
|
36
8
|
class Scriptest < Script #one word for script name
|
@@ -63,6 +35,13 @@ module MyScriptsTest
|
|
63
35
|
usage 'Blah'
|
64
36
|
end
|
65
37
|
end
|
38
|
+
|
39
|
+
# Stub script that calls system
|
40
|
+
class SystemScript < Script
|
41
|
+
def run
|
42
|
+
system 'Blah'
|
43
|
+
end
|
44
|
+
end
|
66
45
|
end
|
67
46
|
|
68
47
|
context 'trying to execute undefined script' do
|
@@ -128,7 +107,7 @@ module MyScriptsTest
|
|
128
107
|
end
|
129
108
|
end
|
130
109
|
|
131
|
-
context '
|
110
|
+
context 'printing usage' do
|
132
111
|
context 'unversioned script' do
|
133
112
|
it 'outputs script name, GEM version and usage note to stdout, then exits' do
|
134
113
|
cli = create_cli
|
@@ -148,6 +127,14 @@ module MyScriptsTest
|
|
148
127
|
end
|
149
128
|
end
|
150
129
|
|
130
|
+
context 'scripts calling system' do
|
131
|
+
it 'calls system method on cli.kernel' do
|
132
|
+
cli = create_cli :system => 'OK'
|
133
|
+
system_should_receive('Blah')
|
134
|
+
cli.run(:system_script, []).should == 'OK'
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
151
138
|
context 'scripts with snake_case names' do
|
152
139
|
it 'executes scripts with snake_case name' do
|
153
140
|
cli = create_cli
|
data/spec/spec_helper.rb
CHANGED
@@ -4,3 +4,56 @@ require 'spec/autorun'
|
|
4
4
|
|
5
5
|
Spec::Runner.configure do |config|
|
6
6
|
end
|
7
|
+
|
8
|
+
module MyScriptsTest
|
9
|
+
|
10
|
+
def create_cli(opts={})
|
11
|
+
@stdout = opts[:stdout] || mock('stdout').as_null_object
|
12
|
+
@stdin = opts[:stdin] || mock('stdin')
|
13
|
+
if opts[:input]
|
14
|
+
@stdin.stub(:gets).and_return(*opts[:input])
|
15
|
+
else
|
16
|
+
@stdin.stub(:gets).and_return('')
|
17
|
+
end
|
18
|
+
@kernel = Kernel
|
19
|
+
if opts[:system]
|
20
|
+
@kernel = mock('Kernel')
|
21
|
+
@kernel.stub(:system).and_return(*opts[:system])
|
22
|
+
end
|
23
|
+
@cli = MyScripts::CLI.new(@stdin, @stdout, @kernel)
|
24
|
+
end
|
25
|
+
|
26
|
+
def cli(command_line)
|
27
|
+
raise "Command line should be non-empty String" unless command_line.respond_to?(:split) && command_line != ''
|
28
|
+
argv = command_line.split(' ')
|
29
|
+
@cli.run argv.shift.to_sym, argv
|
30
|
+
end
|
31
|
+
|
32
|
+
# Sets expectation for Kernel to receive system call with specific messages/patterns
|
33
|
+
def system_should_receive(*messages)
|
34
|
+
entity_should_receive(@kernel, :system, *messages)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Sets expectation for stdout to receive puts with specific messages/patterns
|
38
|
+
def stdout_should_receive(*messages)
|
39
|
+
entity_should_receive(@stdout, :puts, *messages)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Sets expectation for entity to receive either:
|
43
|
+
# :message(s) - strictly ordered sequence of exact messages
|
44
|
+
# :pattern(s) - specific patterns (unordered)
|
45
|
+
#
|
46
|
+
def entity_should_receive(entity, method, *messages)
|
47
|
+
# If symbol is coming after method, it must be message type
|
48
|
+
type = messages.first.is_a?(Symbol) ? messages.shift : :message
|
49
|
+
messages.each do |message|
|
50
|
+
if type.to_s =~ /message/
|
51
|
+
entity.should_receive(method).with(message).once.ordered
|
52
|
+
elsif type.to_s =~ /(pattern|regex)/
|
53
|
+
re = Regexp === message ? message : Regexp.new(Regexp.escape(message))
|
54
|
+
entity.should_receive(method).with(re).at_least(:once)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
data/tasks/gem.rake
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 3
|
9
|
+
version: 0.1.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- arvicco
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-04-
|
17
|
+
date: 2010-04-14 00:00:00 +04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -76,6 +76,8 @@ files:
|
|
76
76
|
- lib/my_scripts/scripts/wake.rb
|
77
77
|
- lib/my_scripts.rb
|
78
78
|
- spec/my_scripts/extensions_spec.rb
|
79
|
+
- spec/my_scripts/scripts/gitto_spec.rb
|
80
|
+
- spec/my_scripts/scripts/shared.rb
|
79
81
|
- spec/my_scripts_spec.rb
|
80
82
|
- spec/spec.opts
|
81
83
|
- spec/spec_helper.rb
|
@@ -132,6 +134,8 @@ specification_version: 3
|
|
132
134
|
summary: Describe package my_scripts
|
133
135
|
test_files:
|
134
136
|
- spec/my_scripts/extensions_spec.rb
|
137
|
+
- spec/my_scripts/scripts/gitto_spec.rb
|
138
|
+
- spec/my_scripts/scripts/shared.rb
|
135
139
|
- spec/my_scripts_spec.rb
|
136
140
|
- spec/spec.opts
|
137
141
|
- spec/spec_helper.rb
|