rake_deploy 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/rake_deploy.rb +92 -0
  3. metadata +72 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d6a4b711479e302ba58ad515a47d0eb42ffb8690
4
+ data.tar.gz: 623acae9450b6ee393b390413cdafdb9da8e4f9c
5
+ SHA512:
6
+ metadata.gz: 359e6611ee0acf0940dbeb23416057706027872061ff80bcaf682e40aa62e32605642a25a50f2a5472618be9fb580bc0e3f5568412238a2d657ef33d1ff395fa
7
+ data.tar.gz: c842b557d9d95e5cabec92c7778af142a4f778eeefee132a8cf6e451458d10df03236e9fc27f53b8d59de17dba65b4b5bd0357587232af99ab84015d9b623697
@@ -0,0 +1,92 @@
1
+ require 'rake'
2
+ require 'yaml'
3
+ require 'open3'
4
+
5
+ module RakeDeploy
6
+ def self.load_file(file)
7
+ self.load_yaml(File.read(file))
8
+ end
9
+
10
+ def self.load_yaml(string)
11
+ self.load(YAML.load(string))
12
+ end
13
+
14
+ def self.load(config)
15
+ Tasks.new(config).install_tasks
16
+ end
17
+
18
+ class Tasks
19
+ include Rake::DSL if defined? Rake::DSL
20
+ def initialize(config)
21
+ @config = config
22
+ end
23
+
24
+ def install_tasks
25
+ namespace :deploy do
26
+ @config.each do |name, options|
27
+ desc "Deploy #{name}"
28
+ task name do |t, args|
29
+ Rsyncer.new(name, options).rsync
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ class Error < ArgumentError; end
37
+
38
+ class Rsyncer
39
+ attr_reader :name
40
+
41
+ def initialize(name, options)
42
+ @name = name
43
+ @options = options
44
+ end
45
+
46
+ def indifferent_hash_access(name)
47
+ @options[name.to_s] || @options[name]
48
+ end
49
+
50
+ def self.option_accessor(name)
51
+ define_method name do
52
+ indifferent_hash_access(name) || missing_option(name)
53
+ end
54
+ end
55
+ option_accessor :source
56
+ option_accessor :user
57
+ option_accessor :domain
58
+ option_accessor :target_dir
59
+
60
+ def missing_option(name)
61
+ raise Error.new("Missing option #{name}")
62
+ end
63
+
64
+ def rsync_options
65
+ indifferent_hash_access(:rsync_options).to_a.join(' ')
66
+ end
67
+
68
+ def rsync
69
+ _stdin, @stdout, @stderr, @wait_thr = Open3.popen3(rsync_command)
70
+ write_output
71
+ end
72
+
73
+ def write_output
74
+ write_if_exists(@stdout)
75
+ write_if_exists(@stderr)
76
+ puts "Deploying #{name} #{exitstatus}."
77
+ end
78
+
79
+ def write_if_exists(io)
80
+ op = io.read
81
+ puts op unless op.empty?
82
+ end
83
+
84
+ def exitstatus
85
+ @wait_thr.value.exitstatus == 0 ? 'succeeded' : 'failed'
86
+ end
87
+
88
+ def rsync_command
89
+ "rsync -r #{rsync_options} #{source} #{user}@#{domain}:#{target_dir}"
90
+ end
91
+ end
92
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rake_deploy
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Dan Corrigan
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-05-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
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
+ description: Configurable rake tasks for deploying static content via rsync
42
+ email: df.corrigan@gmail.com
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/rake_deploy.rb
48
+ homepage: https://github.com/dcorrigan/rake_deploy
49
+ licenses:
50
+ - MIT
51
+ metadata: {}
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ requirements: []
67
+ rubyforge_project:
68
+ rubygems_version: 2.5.2
69
+ signing_key:
70
+ specification_version: 4
71
+ summary: Rake tasks for static site deployment
72
+ test_files: []