my_scripts 0.1.0 → 0.1.3
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/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
|