woro 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +121 -0
- data/Rakefile +2 -0
- data/lib/mina/woro.rb +1 -0
- data/lib/woro/gister.rb +22 -0
- data/lib/woro/task.rb +66 -0
- data/lib/woro/tasks/mina.rake +113 -0
- data/lib/woro/templates/task.rake +6 -0
- data/lib/woro/templates/woro.rake +1 -0
- data/lib/woro/version.rb +3 -0
- data/woro.gemspec +35 -0
- metadata +240 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f2bd3ed37a7aad52ff1f43d5b0313b6caf9b6c48
|
4
|
+
data.tar.gz: 78b80cb0c1327dae3440728928e2fa920cff9ff0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bcc22210977dfd80a7ec89ac36a40efece5a277ae48cd9665aaf47a0e4dc26781621bd442f82debd7c9362c467fac0c43b8bdc5555731f9ff66c08c21d1109cc
|
7
|
+
data.tar.gz: 92ec94f072d44cbc0ed1f7a02bb5d0a88b11e332ef52084839a8108d65671a08e42498635a72e3b368c07295cfea67384666ce66aa467d3df03ceea222f9e93d
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 Daniel Senff
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
22
|
+
|
data/README.md
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
# Woro
|
2
|
+
|
3
|
+
Write once, run once.
|
4
|
+
|
5
|
+
Manage one-time remote tasks in your Rails project.
|
6
|
+
Plugins with Mina that adds support for rake tasks hosted as gists.
|
7
|
+
|
8
|
+
Say you have a data migration to perform on a remote server. The procedure is too complex to just do it in the remote console. Using database migration is evil. A rake task would be nice, but checking this in with the regular repository adds clutter, as you know you will only run this once.
|
9
|
+
Woro offers a quick way of pushing rake tasks on the remote server, execute them and delete them instantly. Using Github's gist, you keep version control of the tasks and can share them with colleagues.
|
10
|
+
|
11
|
+
Woro helps you create rake task, that you can develop and run locally.
|
12
|
+
Once you are ready, woro let's you push them online as a gist.
|
13
|
+
Using a mina deployment setup, you these tasks are downloaded on the remote system, executing using rake and cleaned up afterwards.
|
14
|
+
|
15
|
+
## Installation
|
16
|
+
|
17
|
+
Add this line to your application's Gemfile:
|
18
|
+
|
19
|
+
```rb
|
20
|
+
gem 'woro', require: false
|
21
|
+
```
|
22
|
+
|
23
|
+
And then execute:
|
24
|
+
|
25
|
+
```shell
|
26
|
+
$ bundle
|
27
|
+
```
|
28
|
+
|
29
|
+
Or install it yourself as:
|
30
|
+
|
31
|
+
```shell
|
32
|
+
$ gem install woro
|
33
|
+
```
|
34
|
+
|
35
|
+
Require `mina/woro` in your `config/deploy.rb`:
|
36
|
+
|
37
|
+
```rb
|
38
|
+
require 'mina/bundler'
|
39
|
+
require 'mina/rails'
|
40
|
+
require 'mina/git'
|
41
|
+
require 'mina/woro'
|
42
|
+
|
43
|
+
...
|
44
|
+
|
45
|
+
task setup: :environment do
|
46
|
+
...
|
47
|
+
end
|
48
|
+
|
49
|
+
desc 'Deploys the current version to the server.'
|
50
|
+
task deploy: :environment do
|
51
|
+
...
|
52
|
+
end
|
53
|
+
```
|
54
|
+
|
55
|
+
Then run:
|
56
|
+
|
57
|
+
```shell
|
58
|
+
$ mina woro:init
|
59
|
+
```
|
60
|
+
|
61
|
+
This will create `lib/woro_tasks/` folder and `lib/tasks/woro.rake`.
|
62
|
+
Here the Woro task files are stored and edited locally.
|
63
|
+
|
64
|
+
## Usage
|
65
|
+
|
66
|
+
```shell
|
67
|
+
$ mina woro:new task=cleanup_users
|
68
|
+
```
|
69
|
+
|
70
|
+
Can be used to create the template for a new task in `lib/tasks/`.
|
71
|
+
|
72
|
+
The task itself is a regular rake-task in the woro-namespace. You can test it locally using rake:
|
73
|
+
|
74
|
+
```shell
|
75
|
+
$ rake woro:cleanup_users
|
76
|
+
```
|
77
|
+
|
78
|
+
Once you are done writing the task and you want to execute it on the remote system.
|
79
|
+
First you have to push them online.
|
80
|
+
|
81
|
+
```shell
|
82
|
+
$ mina woro:push task=cleanup_users
|
83
|
+
```
|
84
|
+
|
85
|
+
_Attention, depending on whether you set up a Gist/Github login on
|
86
|
+
initialization. These tasks are online anonymous, but public, or
|
87
|
+
private under the specified Github account._
|
88
|
+
|
89
|
+
|
90
|
+
Now, to run a task remotely, specify the task:
|
91
|
+
|
92
|
+
```shell
|
93
|
+
$ mina woro:run task=cleanup_users
|
94
|
+
```
|
95
|
+
|
96
|
+
|
97
|
+
Or do pushing and running in one step:
|
98
|
+
|
99
|
+
```shell
|
100
|
+
$ mina woro:execute task=cleanup_users
|
101
|
+
```
|
102
|
+
|
103
|
+
To show a list of all uploaded tasks do:
|
104
|
+
|
105
|
+
```shell
|
106
|
+
$ mina woro:list
|
107
|
+
```
|
108
|
+
|
109
|
+
And finally you can download an existing task:
|
110
|
+
|
111
|
+
```shell
|
112
|
+
$ mina woro:pull task=cleanup_users
|
113
|
+
```
|
114
|
+
|
115
|
+
## Contributing
|
116
|
+
|
117
|
+
1. Fork it
|
118
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
119
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
120
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
121
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
data/lib/mina/woro.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
load File.expand_path("../../woro/tasks/mina.rake", __FILE__)
|
data/lib/woro/gister.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'gist'
|
2
|
+
require 'net/https'
|
3
|
+
|
4
|
+
module Woro
|
5
|
+
class Gister
|
6
|
+
class << self
|
7
|
+
def create_initial_gist(app_name)
|
8
|
+
Gist.gist("Welcome to the Woro Task Repository for #{app_name}", filename: app_name)
|
9
|
+
end
|
10
|
+
|
11
|
+
def retrieve_gist(gist_id)
|
12
|
+
service_url = "https://api.github.com/gists/#{gist_id}"
|
13
|
+
response = Net::HTTP.get_response(URI.parse(service_url))
|
14
|
+
JSON.parse(response.body)
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_list_of_files(gist_id)
|
18
|
+
retrieve_gist(gist_id)['files']
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/woro/task.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'net/https'
|
2
|
+
require 'erb'
|
3
|
+
|
4
|
+
module Woro
|
5
|
+
class Task
|
6
|
+
attr_reader :task_name, :gist_id, :gist
|
7
|
+
|
8
|
+
def initialize(gist_id, task_name)
|
9
|
+
@task_name = task_name
|
10
|
+
@gist_id = gist_id
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.create(gist_id, task_name)
|
14
|
+
task = Woro::Task.new(gist_id, task_name)
|
15
|
+
task.create_empty_task
|
16
|
+
end
|
17
|
+
|
18
|
+
def file_name
|
19
|
+
"#{task_name}.rake"
|
20
|
+
end
|
21
|
+
|
22
|
+
def file_path
|
23
|
+
"lib/woro_tasks/#{file_name}"
|
24
|
+
end
|
25
|
+
|
26
|
+
def create_empty_task
|
27
|
+
b = binding
|
28
|
+
template = ERB.new(read_template_file).result(b)
|
29
|
+
File.open(file_path, 'w') do |f|
|
30
|
+
f.puts template
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def read_template_file
|
35
|
+
File.read(File.dirname(__FILE__) +"/templates/task.rake")
|
36
|
+
end
|
37
|
+
|
38
|
+
def read_task_file
|
39
|
+
File.read(file_path)
|
40
|
+
end
|
41
|
+
|
42
|
+
def push
|
43
|
+
Gist.multi_gist({ file_name => read_task_file },
|
44
|
+
public: false,
|
45
|
+
update: gist_id,
|
46
|
+
output: :all)
|
47
|
+
end
|
48
|
+
|
49
|
+
def gist
|
50
|
+
@gist ||= Gister.retrieve_gist(gist_id)
|
51
|
+
end
|
52
|
+
|
53
|
+
def retrieve_file_data
|
54
|
+
gist['files'][file_name]
|
55
|
+
end
|
56
|
+
|
57
|
+
def raw_url
|
58
|
+
retrieve_file_data['raw_url']
|
59
|
+
end
|
60
|
+
|
61
|
+
def retrieve_raw_file
|
62
|
+
response = Net::HTTP.get_response(raw_url)
|
63
|
+
response.body
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'woro/gister'
|
3
|
+
require 'woro/task'
|
4
|
+
|
5
|
+
def _tasks_dir
|
6
|
+
fetch(:tasks_dir, 'lib/woro_tasks')
|
7
|
+
end
|
8
|
+
|
9
|
+
def prompt(*args)
|
10
|
+
print(*args)
|
11
|
+
STDIN.gets.chomp
|
12
|
+
end
|
13
|
+
|
14
|
+
def sanitized_task_name
|
15
|
+
ENV['task'].strip.split(' ').first
|
16
|
+
end
|
17
|
+
|
18
|
+
def check_presence_of_task_name
|
19
|
+
if ENV['task'].nil?
|
20
|
+
print_error('No taskname given.')
|
21
|
+
raise 'No taskname given'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def extract_description(data)
|
26
|
+
data['content'].match(/desc ['"]([a-zA-Z0-9\s]*)['"]/)[1]
|
27
|
+
end
|
28
|
+
|
29
|
+
# tasks available to mina to run remotely
|
30
|
+
namespace :woro do
|
31
|
+
|
32
|
+
desc 'Initialize new Woro repository'
|
33
|
+
task :init do
|
34
|
+
print status 'Configure Gist/Github access'
|
35
|
+
|
36
|
+
login_gist = prompt "Login to Gist/Github for private Woro tasks (Yes/No):"
|
37
|
+
if %w(yes y).include? login_gist
|
38
|
+
Gist.login!
|
39
|
+
#else
|
40
|
+
# access_token = prompt "Secure gists via Access Token:"
|
41
|
+
end
|
42
|
+
|
43
|
+
# create Gist with welcome file
|
44
|
+
# additional tasks will be added to this first gist
|
45
|
+
app_name = fetch(:app_name, 'TestApp') #Rails.application.class.parent_name
|
46
|
+
result = Woro::Gister.create_initial_gist(app_name)
|
47
|
+
|
48
|
+
print status 'Setup in your project'
|
49
|
+
print_stdout "add this to your deploy.rb:"
|
50
|
+
print_stdout "set :woro_token, '#{result['id']}"
|
51
|
+
|
52
|
+
print status 'Create woro_tasks in lib/'
|
53
|
+
FileUtils.mkdir_p _tasks_dir if !File.exists? _tasks_dir
|
54
|
+
|
55
|
+
print status 'Create woro.rake in lib/tasks/'
|
56
|
+
FileUtils.cp(File.dirname(__FILE__) +"/templates/woro.rake", 'lib/tasks/')
|
57
|
+
end
|
58
|
+
|
59
|
+
desc 'Create new Woro task'
|
60
|
+
task :new do
|
61
|
+
check_presence_of_task_name
|
62
|
+
print_status "Create lib/woro_tasks/#{sanitized_task_name}.rake"
|
63
|
+
Woro::Task.create(fetch(:woro_token), sanitized_task_name)
|
64
|
+
end
|
65
|
+
|
66
|
+
desc 'Push and run Woro task remotely'
|
67
|
+
task execute: environment do
|
68
|
+
invoke :'woro:push'
|
69
|
+
invoke :'woro:run'
|
70
|
+
end
|
71
|
+
|
72
|
+
desc 'Push Woro task to remote repository, updates existing'
|
73
|
+
task :push do
|
74
|
+
check_presence_of_task_name
|
75
|
+
# Pushes a new woro task by given name to gist, this can be done multiple time.
|
76
|
+
task = Woro::Task.new(fetch(:woro_token), sanitized_task_name)
|
77
|
+
print_status "Upload lib/woro_tasks/#{sanitized_task_name}.rake"
|
78
|
+
task.push
|
79
|
+
end
|
80
|
+
|
81
|
+
desc 'Pull Woro task from remote repository'
|
82
|
+
task :pull do
|
83
|
+
check_presence_of_task_name
|
84
|
+
# Pulls the woro task by given name to gist, this can be done multiple time.
|
85
|
+
task = Woro::Task.new(fetch(:woro_token), sanitized_task_name)
|
86
|
+
print_status "Download #{sanitized_task_name} to lib/woro_tasks/#{sanitized_task_name}.rake"
|
87
|
+
system "cd 'lib/tasks' && curl -O -# #{task.raw_url}"
|
88
|
+
end
|
89
|
+
|
90
|
+
desc 'Run Woro task remotely'
|
91
|
+
task run: :environment do
|
92
|
+
check_presence_of_task_name
|
93
|
+
task = Woro::Task.new(fetch(:woro_token), sanitized_task_name)
|
94
|
+
|
95
|
+
print_status "Execute #{sanitized_task_name} remotely"
|
96
|
+
in_directory "#{app_path}" do
|
97
|
+
queue! "cd 'lib/tasks' && curl -O #{task.raw_url}"
|
98
|
+
queue! "#{bundle_prefix} rake woro:#{sanitized_task_name}"
|
99
|
+
queue! "rm lib/tasks/#{task.file_name}"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
desc 'List all remote Woro tasks'
|
104
|
+
task :list do
|
105
|
+
files = Woro::Gister.get_list_of_files(fetch(:woro_token))
|
106
|
+
tasks = files.map { |file_name, data| OpenStruct.new(name_with_args: file_name.split('.rake').first, comment: extract_description(data)) if file_name.include? '.rake' }
|
107
|
+
tasks.compact!
|
108
|
+
width ||= tasks.map { |t| t.name_with_args.length }.max || 10
|
109
|
+
tasks.each do |t|
|
110
|
+
puts " #{name} %-#{width}s # %s" % [ t.name_with_args, t.comment ]
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Dir.glob('lib/woro_tasks/*.rake').each { |r| load r}
|
data/lib/woro/version.rb
ADDED
data/woro.gemspec
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'woro/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "woro"
|
8
|
+
spec.version = Woro::VERSION
|
9
|
+
spec.authors = ["Daniel Senff"]
|
10
|
+
spec.email = ["mail@danielsenff.de"]
|
11
|
+
spec.summary = %q{Write once, run once. One-time migration task management on remote servers through mina.}
|
12
|
+
spec.description = %q{Write once, run once.}
|
13
|
+
spec.homepage = "http://github.com/Dahie/woro"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "mina", ">= 0.2.1"
|
22
|
+
spec.add_dependency "gist"
|
23
|
+
spec.add_dependency "cmdparse"
|
24
|
+
|
25
|
+
spec.add_development_dependency "bundler", "~> 1.7"
|
26
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
27
|
+
spec.add_development_dependency "rspec"
|
28
|
+
spec.add_development_dependency "rspec-nc"
|
29
|
+
spec.add_development_dependency "guard"
|
30
|
+
spec.add_development_dependency "guard-rspec"
|
31
|
+
spec.add_development_dependency "pry"
|
32
|
+
spec.add_development_dependency "pry-remote"
|
33
|
+
spec.add_development_dependency "pry-nav"
|
34
|
+
spec.add_development_dependency "pry-byebug"
|
35
|
+
end
|
metadata
ADDED
@@ -0,0 +1,240 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: woro
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Daniel Senff
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-04-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: mina
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.2.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.2.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: gist
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: cmdparse
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.7'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.7'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '10.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '10.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec-nc
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: guard
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: guard-rspec
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: pry
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: pry-remote
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: pry-nav
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: pry-byebug
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
description: Write once, run once.
|
196
|
+
email:
|
197
|
+
- mail@danielsenff.de
|
198
|
+
executables: []
|
199
|
+
extensions: []
|
200
|
+
extra_rdoc_files: []
|
201
|
+
files:
|
202
|
+
- ".gitignore"
|
203
|
+
- Gemfile
|
204
|
+
- LICENSE
|
205
|
+
- README.md
|
206
|
+
- Rakefile
|
207
|
+
- lib/mina/woro.rb
|
208
|
+
- lib/woro/gister.rb
|
209
|
+
- lib/woro/task.rb
|
210
|
+
- lib/woro/tasks/mina.rake
|
211
|
+
- lib/woro/templates/task.rake
|
212
|
+
- lib/woro/templates/woro.rake
|
213
|
+
- lib/woro/version.rb
|
214
|
+
- woro.gemspec
|
215
|
+
homepage: http://github.com/Dahie/woro
|
216
|
+
licenses:
|
217
|
+
- MIT
|
218
|
+
metadata: {}
|
219
|
+
post_install_message:
|
220
|
+
rdoc_options: []
|
221
|
+
require_paths:
|
222
|
+
- lib
|
223
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
224
|
+
requirements:
|
225
|
+
- - ">="
|
226
|
+
- !ruby/object:Gem::Version
|
227
|
+
version: '0'
|
228
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
229
|
+
requirements:
|
230
|
+
- - ">="
|
231
|
+
- !ruby/object:Gem::Version
|
232
|
+
version: '0'
|
233
|
+
requirements: []
|
234
|
+
rubyforge_project:
|
235
|
+
rubygems_version: 2.4.6
|
236
|
+
signing_key:
|
237
|
+
specification_version: 4
|
238
|
+
summary: Write once, run once. One-time migration task management on remote servers
|
239
|
+
through mina.
|
240
|
+
test_files: []
|