auto 0.1.0 → 0.1.1
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.markdown +97 -23
- data/Rakefile +28 -25
- data/gemspec.rb +18 -0
- data/lib/auto.rb +6 -0
- data/lib/{automaton → auto}/alias.rb +0 -0
- data/lib/{automaton → auto}/class.rb +0 -0
- data/lib/{automaton → auto}/plugins.rb +10 -10
- data/lib/{automaton → auto}/require.rb +1 -1
- data/lib/{automaton → auto}/runner.rb +4 -5
- data/lib/{automaton → auto}/string.rb +0 -0
- data/spec/{automaton → auto}/plugins_spec.rb +8 -8
- data/spec/{automaton → auto}/runner_spec.rb +4 -4
- data/spec/plugins/{user-automaton-plugin-0.0.0 → auto-plugin-0.0.0}/lib/plugin.rb +1 -1
- data/spec/plugins/{automaton-plugin2 → auto-plugin2}/lib/plugin2.rb +1 -1
- data/spec/spec_helper.rb +4 -3
- metadata +26 -20
- data/config/externals.yml +0 -6
- data/lib/automaton.rb +0 -8
- data/spec/plugins/automaton-plugin2/auto/plugin2/task.rb +0 -0
- data/spec/plugins/automaton-plugin2/auto/plugin2/task2.rb +0 -0
- data/spec/plugins/user-automaton-plugin-0.0.0/auto/plugin/task.rb +0 -0
data/README.markdown
CHANGED
@@ -1,35 +1,109 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
Auto
|
2
|
+
====
|
3
3
|
|
4
4
|
Automate everything!
|
5
5
|
|
6
6
|
Notice
|
7
7
|
------
|
8
8
|
|
9
|
-
This gem is
|
9
|
+
This gem is currently under development. Some of what you see below is a fantasy.
|
10
10
|
|
11
|
-
|
11
|
+
Install
|
12
|
+
-------
|
13
|
+
|
14
|
+
<pre>
|
15
|
+
sudo gem install auto --source http://gemcutter.org
|
16
|
+
</pre>
|
17
|
+
|
18
|
+
Introduction
|
19
|
+
------------
|
20
|
+
|
21
|
+
Auto is a framework for writing automation scripts and plugins for those scripts.
|
22
|
+
|
23
|
+
<pre>
|
24
|
+
require 'rubygems'
|
25
|
+
require 'auto'
|
26
|
+
|
27
|
+
question :name => "What is your name?"
|
28
|
+
question :delete => "Delete file when finished? (y/n)"
|
29
|
+
|
30
|
+
file "#{@name}.txt" do |f|
|
31
|
+
f << 'Append to text file'
|
32
|
+
f = 'Overwrite text file'
|
33
|
+
end
|
34
|
+
|
35
|
+
file("#{@name}.txt").delete if @delete
|
36
|
+
</pre>
|
37
|
+
|
38
|
+
Save it and run it like you would any other Ruby script.
|
39
|
+
|
40
|
+
In this example, <code>question</code> and <code>file</code> are both methods provided by the plugins <code>auto-question</code> and <code>auto-file</code>, respectively. They are included when you install the <code>auto</code> gem, but other plugins can be obtained via Rubygems.
|
41
|
+
|
42
|
+
Tasks
|
12
43
|
-----
|
13
44
|
|
14
|
-
|
15
|
-
* Global namespace
|
16
|
-
* A library of simple methods that do complex things
|
17
|
-
* Adding outside scripts and script functionality should be simple
|
18
|
-
* Obvious plugin structure
|
19
|
-
* Automated installation/updates
|
20
|
-
* Running tasks should be simple
|
21
|
-
* Everything available via "auto task" command
|
22
|
-
* Easy to ask questions
|
23
|
-
* Sessions
|
24
|
-
* Record input for any number of questions
|
25
|
-
* Replay using "auto session" command
|
26
|
-
* Or, use the web interface
|
27
|
-
* Make it easy for novices to use and extend
|
45
|
+
Auto has a tasks system similar to Capistrano or Rake. In the previous example, if you had saved your script to <code>~/.auto/my/name.rb</code>, you would be able to run it by executing <code>auto my:name</code> in Terminal.
|
28
46
|
|
29
|
-
|
30
|
-
|
47
|
+
Tasks may also be included via plugin. See the **Authoring Plugins** section for more information.
|
48
|
+
|
49
|
+
Sessions
|
50
|
+
--------
|
51
|
+
|
52
|
+
Installing the <code>auto</code> gem also installs <code>auto-session</code>, which allows you to record the input to your Auto scripts and replay them later.
|
53
|
+
|
54
|
+
To save a session, run your script or task with the <code>SESSION</code> environment variable:
|
31
55
|
|
32
56
|
<pre>
|
33
|
-
|
34
|
-
|
35
|
-
</pre>
|
57
|
+
SESSION=name ruby my_name.rb
|
58
|
+
SESSION=name auto my:name
|
59
|
+
</pre>
|
60
|
+
|
61
|
+
This session would be saved in <code>~/.auto/session/name.rb</code> (run it by executing <code>auto session:name</code>). It might look like this:
|
62
|
+
|
63
|
+
<pre>
|
64
|
+
answer :name => 'Joe'
|
65
|
+
answer :delete => false
|
66
|
+
run 'my:name'
|
67
|
+
</pre>
|
68
|
+
|
69
|
+
The session script is executed as any other Auto script. This is cool because you can modify your session files to get custom input for certain questions.
|
70
|
+
|
71
|
+
<pre>
|
72
|
+
question :name => "What is your last name?"
|
73
|
+
answer :delete => false
|
74
|
+
run 'my:name'
|
75
|
+
</pre>
|
76
|
+
|
77
|
+
You also could have deleted the <code>:name</code> answer to ask that question upon running the session.
|
78
|
+
|
79
|
+
Authoring Plugins
|
80
|
+
-----------------
|
81
|
+
|
82
|
+
Plugins have a lib directory just like any other gem. Here is how the lib file for the Foo plugin might look:
|
83
|
+
|
84
|
+
<pre>
|
85
|
+
# lib/foo.rb
|
86
|
+
module Auto
|
87
|
+
module Foo
|
88
|
+
|
89
|
+
def foo(*args)
|
90
|
+
Foo.instance args
|
91
|
+
end
|
92
|
+
|
93
|
+
class Foo
|
94
|
+
class <<self
|
95
|
+
|
96
|
+
def instance(args)
|
97
|
+
# Do something
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
</pre>
|
104
|
+
|
105
|
+
Auto uses the gem name (<code>auto-foo</code>) to find <code>lib/foo.rb</code> and include <code>Auto::Foo</code> into the environment. Now you can call the <code>foo</code> method in any of your Auto scripts.
|
106
|
+
|
107
|
+
Auto plugins must have gem names with <code>auto-</code> as a prefix to be automatically required.
|
108
|
+
|
109
|
+
Include Auto tasks with your plugin by adding a <code>.auto</code> directory to your gem, just as you do with your home directory (<code>~/.auto</code>).
|
data/Rakefile
CHANGED
@@ -2,28 +2,13 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
require 'rake/gempackagetask'
|
4
4
|
require 'spec/rake/spectask'
|
5
|
+
require 'gemspec'
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
s.email = "mail@wintoni.us"
|
12
|
-
s.extra_rdoc_files = [ "README.markdown" ]
|
13
|
-
s.files = PKG_FILES.to_a
|
14
|
-
s.has_rdoc = false
|
15
|
-
s.homepage = "http://github.com/winton/#{GEM_NAME}"
|
16
|
-
s.name = 'auto'
|
17
|
-
s.platform = Gem::Platform::RUBY
|
18
|
-
s.require_path = "lib"
|
19
|
-
s.summary = "Automate everything!"
|
20
|
-
s.version = "0.1.0"
|
21
|
-
end
|
22
|
-
|
23
|
-
|
24
|
-
desc "Package gem"
|
25
|
-
Rake::GemPackageTask.new(spec) do |pkg|
|
26
|
-
pkg.gem_spec = spec
|
7
|
+
desc "Generate gemspec"
|
8
|
+
task :gemspec do
|
9
|
+
File.open("#{Dir.pwd}/#{GEM_NAME}.gemspec", 'w') do |f|
|
10
|
+
f.write(GEM_SPEC.to_ruby)
|
11
|
+
end
|
27
12
|
end
|
28
13
|
|
29
14
|
desc "Install gem"
|
@@ -34,10 +19,28 @@ task :install do
|
|
34
19
|
`rm -Rf pkg`
|
35
20
|
end
|
36
21
|
|
37
|
-
desc "
|
38
|
-
|
39
|
-
|
40
|
-
|
22
|
+
desc "Package gem"
|
23
|
+
Rake::GemPackageTask.new(GEM_SPEC) do |pkg|
|
24
|
+
pkg.gem_spec = GEM_SPEC
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "Rename project"
|
28
|
+
task :rename do
|
29
|
+
name = ENV['NAME'] || File.basename(Dir.pwd)
|
30
|
+
begin
|
31
|
+
dir = Dir['**/gem_template*']
|
32
|
+
from = dir.pop
|
33
|
+
if from
|
34
|
+
rb = from.include?('.rb')
|
35
|
+
to = File.dirname(from) + "/#{name}#{'.rb' if rb}"
|
36
|
+
FileUtils.mv(from, to)
|
37
|
+
end
|
38
|
+
end while dir.length > 0
|
39
|
+
Dir["**/*"].each do |path|
|
40
|
+
next if path.include?('Rakefile')
|
41
|
+
if File.file?(path)
|
42
|
+
`sed -i "" 's/gem_template/#{name}/g' #{path}`
|
43
|
+
end
|
41
44
|
end
|
42
45
|
end
|
43
46
|
|
data/gemspec.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
GEM_NAME = 'auto'
|
2
|
+
GEM_FILES = FileList['**/*'] - FileList['coverage', 'coverage/**/*', 'pkg', 'pkg/**/*']
|
3
|
+
GEM_SPEC = Gem::Specification.new do |s|
|
4
|
+
# == CONFIGURE ==
|
5
|
+
s.author = "Winton Welsh"
|
6
|
+
s.email = "mail@wintoni.us"
|
7
|
+
s.homepage = "http://github.com/winton/#{GEM_NAME}"
|
8
|
+
s.summary = "Automate everything!"
|
9
|
+
# == CONFIGURE ==
|
10
|
+
s.add_dependency('auto-terminal', '=0.0.1')
|
11
|
+
s.extra_rdoc_files = [ "README.markdown" ]
|
12
|
+
s.files = GEM_FILES.to_a
|
13
|
+
s.has_rdoc = false
|
14
|
+
s.name = GEM_NAME
|
15
|
+
s.platform = Gem::Platform::RUBY
|
16
|
+
s.require_path = "lib"
|
17
|
+
s.version = "0.1.1"
|
18
|
+
end
|
data/lib/auto.rb
ADDED
File without changes
|
File without changes
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
|
3
|
-
module
|
3
|
+
module Auto
|
4
4
|
class Plugins
|
5
5
|
|
6
6
|
@@directories = [
|
@@ -16,7 +16,7 @@ module Automaton
|
|
16
16
|
|
17
17
|
# Add a directory to the plugin load paths.
|
18
18
|
def add(path)
|
19
|
-
@@directories = [] if $
|
19
|
+
@@directories = [] if $testing
|
20
20
|
@@directories << path
|
21
21
|
@@directories.uniq!
|
22
22
|
@@plugins = nil
|
@@ -26,7 +26,7 @@ module Automaton
|
|
26
26
|
def plugins
|
27
27
|
return @@plugins if @@plugins
|
28
28
|
directories = @@directories.collect do |d|
|
29
|
-
File.expand_path("#{d}/*
|
29
|
+
File.expand_path("#{d}/*auto-*/")
|
30
30
|
end
|
31
31
|
@@plugins = Dir[*directories].collect do |d|
|
32
32
|
Plugin.new(d)
|
@@ -80,23 +80,23 @@ module Automaton
|
|
80
80
|
name = File.basename(directory)
|
81
81
|
name = name.split('-')
|
82
82
|
|
83
|
-
return nil unless name.include?('
|
84
|
-
@name = name[name.index('
|
83
|
+
return nil unless name.include?('auto')
|
84
|
+
@name = name[name.index('auto') + 1]
|
85
85
|
|
86
|
-
# ~/.auto/
|
86
|
+
# ~/.auto/auto-plugin/lib/plugin.rb
|
87
87
|
@library = "#{directory}/lib/#{@name}.rb"
|
88
88
|
@library = nil unless File.exists?(@library)
|
89
89
|
|
90
|
-
#
|
90
|
+
# Auto::Plugin
|
91
91
|
if @library
|
92
92
|
@module = File.basename(@library, '.rb').camelize
|
93
93
|
else
|
94
94
|
@module = nil
|
95
95
|
end
|
96
96
|
|
97
|
-
# ~/.auto/
|
98
|
-
@tasks = Dir["#{directory}
|
99
|
-
relative = path.gsub("#{directory}
|
97
|
+
# ~/.auto/auto-plugin/auto/task.rb
|
98
|
+
@tasks = Dir["#{directory}/.auto/**/*.rb"].sort.collect do |path|
|
99
|
+
relative = path.gsub("#{directory}/.auto/", '')
|
100
100
|
{
|
101
101
|
:name => relative[0..-4].split('/').join(':').downcase,
|
102
102
|
:path => path
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# By default, <tt>require '
|
1
|
+
# By default, <tt>require 'auto'</tt> uses Runner to re-evaluate the script.
|
2
2
|
# If you don't want the environment (just the classes), require this file.
|
3
3
|
|
4
4
|
require File.dirname(__FILE__) + "/alias"
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module Auto
|
2
2
|
class Runner
|
3
3
|
|
4
4
|
def initialize(path_or_task=nil, &block)
|
@@ -9,11 +9,10 @@ module Automaton
|
|
9
9
|
def run(path_or_task=nil, &block)
|
10
10
|
self.instance_eval(&block) if block
|
11
11
|
if path_or_task
|
12
|
-
|
13
|
-
if task
|
14
|
-
@path = task[:path]
|
15
|
-
elsif File.exists?(path_or_task)
|
12
|
+
if File.exists?(path_or_task)
|
16
13
|
@path = path_or_task
|
14
|
+
elsif task = Plugins.tasks(path_or_task)
|
15
|
+
@path = task[:path]
|
17
16
|
end
|
18
17
|
self.instance_eval(File.read(@path), @path) if @path
|
19
18
|
end
|
File without changes
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
2
|
|
3
|
-
module
|
4
|
-
describe
|
3
|
+
module Auto
|
4
|
+
describe Auto::Plugins do
|
5
5
|
|
6
6
|
before(:all) do
|
7
7
|
Plugins.add @fixtures = "#{SPEC}/plugins"
|
@@ -15,27 +15,27 @@ module Automaton
|
|
15
15
|
|
16
16
|
it "should provide an array of plugin library files" do
|
17
17
|
@libraries.should == [
|
18
|
-
"#{@fixtures}/
|
19
|
-
"#{@fixtures}/
|
18
|
+
"#{@fixtures}/auto-plugin-0.0.0/lib/plugin.rb",
|
19
|
+
"#{@fixtures}/auto-plugin2/lib/plugin2.rb"
|
20
20
|
]
|
21
21
|
end
|
22
22
|
|
23
23
|
it "should provide an array of module strings" do
|
24
|
-
@modules.should == [ '
|
24
|
+
@modules.should == [ 'Plugin', 'Plugin2' ]
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should provide a hash of plugin task information" do
|
28
28
|
@tasks.should == [
|
29
29
|
{
|
30
|
-
:path => "#{@fixtures}/
|
30
|
+
:path => "#{@fixtures}/auto-plugin-0.0.0/.auto/plugin/task.rb",
|
31
31
|
:name => "plugin:task"
|
32
32
|
},
|
33
33
|
{
|
34
|
-
:path => "#{@fixtures}/
|
34
|
+
:path => "#{@fixtures}/auto-plugin2/.auto/plugin2/task.rb",
|
35
35
|
:name => "plugin2:task"
|
36
36
|
},
|
37
37
|
{
|
38
|
-
:path => "#{@fixtures}/
|
38
|
+
:path => "#{@fixtures}/auto-plugin2/.auto/plugin2/task2.rb",
|
39
39
|
:name => "plugin2:task2"
|
40
40
|
}
|
41
41
|
]
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
2
|
|
3
|
-
module
|
4
|
-
describe
|
3
|
+
module Auto
|
4
|
+
describe Auto::Runner do
|
5
5
|
|
6
6
|
before(:all) do
|
7
7
|
Plugins.add @fixtures = "#{SPEC}/plugins"
|
@@ -9,8 +9,8 @@ module Automaton
|
|
9
9
|
end
|
10
10
|
|
11
11
|
it 'should require plugin library files' do
|
12
|
-
$".include?("#{@fixtures}/
|
13
|
-
$".include?("#{@fixtures}/
|
12
|
+
$".include?("#{@fixtures}/auto-plugin-0.0.0/lib/plugin.rb").should == true
|
13
|
+
$".include?("#{@fixtures}/auto-plugin2/lib/plugin2.rb").should == true
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'should include all plugin library modules' do
|
data/spec/spec_helper.rb
CHANGED
@@ -1,15 +1,16 @@
|
|
1
|
-
$
|
1
|
+
$testing = true
|
2
2
|
SPEC = File.dirname(__FILE__)
|
3
3
|
$:.unshift File.expand_path("#{SPEC}/../lib")
|
4
4
|
|
5
|
-
require '
|
5
|
+
require 'auto/require'
|
6
6
|
require 'pp'
|
7
7
|
|
8
8
|
Spec::Runner.configure do |config|
|
9
9
|
end
|
10
10
|
|
11
|
+
# For use with rspec textmate bundle
|
11
12
|
def debug(object)
|
12
13
|
puts "<pre>"
|
13
14
|
puts object.pretty_inspect.gsub('<', '<').gsub('>', '>')
|
14
15
|
puts "</pre>"
|
15
|
-
end
|
16
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: auto
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Winton Welsh
|
@@ -9,10 +9,19 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-11-
|
12
|
+
date: 2009-11-15 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
|
-
dependencies:
|
15
|
-
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: auto-terminal
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - "="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.1
|
24
|
+
version:
|
16
25
|
description:
|
17
26
|
email: mail@wintoni.us
|
18
27
|
executables: []
|
@@ -22,28 +31,25 @@ extensions: []
|
|
22
31
|
extra_rdoc_files:
|
23
32
|
- README.markdown
|
24
33
|
files:
|
25
|
-
-
|
26
|
-
- lib/
|
27
|
-
- lib/
|
28
|
-
- lib/
|
29
|
-
- lib/
|
30
|
-
- lib/
|
31
|
-
- lib/
|
32
|
-
- lib/
|
34
|
+
- gemspec.rb
|
35
|
+
- lib/auto/alias.rb
|
36
|
+
- lib/auto/class.rb
|
37
|
+
- lib/auto/plugins.rb
|
38
|
+
- lib/auto/require.rb
|
39
|
+
- lib/auto/runner.rb
|
40
|
+
- lib/auto/string.rb
|
41
|
+
- lib/auto.rb
|
33
42
|
- MIT-LICENSE
|
34
43
|
- Rakefile
|
35
44
|
- README.markdown
|
36
|
-
- spec/
|
37
|
-
- spec/
|
38
|
-
- spec/plugins/
|
39
|
-
- spec/plugins/
|
40
|
-
- spec/plugins/automaton-plugin2/lib/plugin2.rb
|
41
|
-
- spec/plugins/user-automaton-plugin-0.0.0/auto/plugin/task.rb
|
42
|
-
- spec/plugins/user-automaton-plugin-0.0.0/lib/plugin.rb
|
45
|
+
- spec/auto/plugins_spec.rb
|
46
|
+
- spec/auto/runner_spec.rb
|
47
|
+
- spec/plugins/auto-plugin-0.0.0/lib/plugin.rb
|
48
|
+
- spec/plugins/auto-plugin2/lib/plugin2.rb
|
43
49
|
- spec/spec.opts
|
44
50
|
- spec/spec_helper.rb
|
45
51
|
has_rdoc: true
|
46
|
-
homepage: http://github.com/winton/
|
52
|
+
homepage: http://github.com/winton/auto
|
47
53
|
licenses: []
|
48
54
|
|
49
55
|
post_install_message:
|
data/config/externals.yml
DELETED
data/lib/automaton.rb
DELETED
File without changes
|
File without changes
|
File without changes
|