rake-contrib 1.0.0

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9d1eb893bff9e8fff8aed2290b83149ea1f13160
4
+ data.tar.gz: 1dd670be75a52ea4205f4594dd5bd8eaa9a6d7bd
5
+ SHA512:
6
+ metadata.gz: 1dfe2609b92eab4cc8ecd67bad6254c3dcbbaee55b6d5682fcf1def762970565c9eb382278fe2da2d1bd91acd2ba52e89d1f861121180a48b34f581368666f20
7
+ data.tar.gz: fb4bf0620f2268009446c3ec1f1005106b7aed0d29aaaa1acf6f780b533beb7b336d7edbc1e975433c229710bdfd241b06d2f34320f64ae136b6a08b75a32083
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 SHIBATA Hiroshi
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
13
+ all 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
21
+ THE SOFTWARE.
@@ -0,0 +1,33 @@
1
+ # Rake::Contrib
2
+
3
+ Additional libraries for Rake
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'rake-contrib'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install rake-contrib
20
+
21
+ ## Development
22
+
23
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
24
+
25
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
26
+
27
+ ## Contributing
28
+
29
+ Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/rake-contrib.
30
+
31
+ ## License
32
+
33
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "rake/contrib"
5
+
6
+ require "irb"
7
+ IRB.start
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
@@ -0,0 +1,21 @@
1
+ module Rake
2
+
3
+ # Manage several publishers as a single entity.
4
+ class CompositePublisher
5
+ def initialize
6
+ @publishers = []
7
+ end
8
+
9
+ # Add a publisher to the composite.
10
+ def add(pub)
11
+ @publishers << pub
12
+ end
13
+
14
+ # Upload all the individual publishers.
15
+ def upload
16
+ @publishers.each { |p| p.upload }
17
+ end
18
+ end
19
+
20
+ end
21
+
@@ -0,0 +1,137 @@
1
+ # = Tools for FTP uploading.
2
+ #
3
+ # This file is still under development and is not released for general
4
+ # use.
5
+
6
+ require 'date'
7
+ require 'net/ftp'
8
+ require 'rake/file_list'
9
+
10
+ module Rake # :nodoc:
11
+
12
+ class FtpFile # :nodoc: all
13
+ attr_reader :name, :size, :owner, :group, :time
14
+
15
+ def self.date
16
+ @date_class ||= Date
17
+ end
18
+
19
+ def self.time
20
+ @time_class ||= Time
21
+ end
22
+
23
+ def initialize(path, entry)
24
+ @path = path
25
+ @mode, _, @owner, @group, size, d1, d2, d3, @name = entry.split(' ')
26
+ @size = size.to_i
27
+ @time = determine_time(d1, d2, d3)
28
+ end
29
+
30
+ def path
31
+ File.join(@path, @name)
32
+ end
33
+
34
+ def directory?
35
+ @mode[0] == ?d
36
+ end
37
+
38
+ def mode
39
+ parse_mode(@mode)
40
+ end
41
+
42
+ def symlink?
43
+ @mode[0] == ?l
44
+ end
45
+
46
+ private # --------------------------------------------------------
47
+
48
+ def parse_mode(m)
49
+ result = 0
50
+ (1..9).each do |i|
51
+ result = 2 * result + ((m[i] == ?-) ? 0 : 1)
52
+ end
53
+ result
54
+ end
55
+
56
+ def determine_time(d1, d2, d3)
57
+ now = self.class.time.now
58
+ if /:/ !~ d3
59
+ result = Time.parse("#{d1} #{d2} #{d3}")
60
+ else
61
+ result = Time.parse("#{d1} #{d2} #{now.year} #{d3}")
62
+ result = Time.parse("#{d1} #{d2} #{now.year - 1} #{d3}") if
63
+ result > now
64
+ end
65
+ result
66
+ end
67
+ end
68
+
69
+ ##
70
+ # Manage the uploading of files to an FTP account.
71
+ class FtpUploader # :nodoc:
72
+
73
+ # Log uploads to standard output when true.
74
+ attr_accessor :verbose
75
+
76
+ class << FtpUploader
77
+ # Create an uploader and pass it to the given block as +up+.
78
+ # When the block is complete, close the uploader.
79
+ def connect(path, host, account, password)
80
+ up = self.new(path, host, account, password)
81
+ begin
82
+ yield(up)
83
+ ensure
84
+ up.close
85
+ end
86
+ end
87
+ end
88
+
89
+ # Create an FTP uploader targeting the directory +path+ on +host+
90
+ # using the given account and password. +path+ will be the root
91
+ # path of the uploader.
92
+ def initialize(path, host, account, password)
93
+ @created = Hash.new
94
+ @path = path
95
+ @ftp = Net::FTP.new(host, account, password)
96
+ makedirs(@path)
97
+ @ftp.chdir(@path)
98
+ end
99
+
100
+ # Create the directory +path+ in the uploader root path.
101
+ def makedirs(path)
102
+ route = []
103
+ File.split(path).each do |dir|
104
+ route << dir
105
+ current_dir = File.join(route)
106
+ if @created[current_dir].nil?
107
+ @created[current_dir] = true
108
+ $stderr.puts "Creating Directory #{current_dir}" if @verbose
109
+ @ftp.mkdir(current_dir) rescue nil
110
+ end
111
+ end
112
+ end
113
+
114
+ # Upload all files matching +wildcard+ to the uploader's root
115
+ # path.
116
+ def upload_files(wildcard)
117
+ FileList.glob(wildcard).each do |fn|
118
+ upload(fn)
119
+ end
120
+ end
121
+
122
+ # Close the uploader.
123
+ def close
124
+ @ftp.close
125
+ end
126
+
127
+ private # --------------------------------------------------------
128
+
129
+ # Upload a single file to the uploader's root path.
130
+ def upload(file)
131
+ $stderr.puts "Uploading #{file}" if @verbose
132
+ dir = File.dirname(file)
133
+ makedirs(dir)
134
+ @ftp.putbinaryfile(file, file) unless File.directory?(file)
135
+ end
136
+ end
137
+ end
@@ -0,0 +1,60 @@
1
+ require 'rake/dsl_definition'
2
+ require 'rake/contrib/compositepublisher'
3
+
4
+ module Rake
5
+ # Publish an entire directory to an existing remote directory using
6
+ # SSH.
7
+ class SshDirPublisher
8
+ include Rake::DSL
9
+
10
+ # Creates an SSH publisher which will scp all files in +local_dir+ to
11
+ # +remote_dir+ on +host+
12
+
13
+ def initialize(host, remote_dir, local_dir)
14
+ @host = host
15
+ @remote_dir = remote_dir
16
+ @local_dir = local_dir
17
+ end
18
+
19
+ # Uploads the files
20
+
21
+ def upload
22
+ sh "scp", "-rq", "#{@local_dir}/*", "#{@host}:#{@remote_dir}"
23
+ end
24
+ end
25
+
26
+ # Publish an entire directory to a fresh remote directory using SSH.
27
+ class SshFreshDirPublisher < SshDirPublisher
28
+
29
+ # Uploads the files after removing the existing remote directory.
30
+
31
+ def upload
32
+ sh "ssh", @host, "rm", "-rf", @remote_dir rescue nil
33
+ sh "ssh", @host, "mkdir", @remote_dir
34
+ super
35
+ end
36
+ end
37
+
38
+ # Publish a list of files to an existing remote directory.
39
+ class SshFilePublisher
40
+ include Rake::DSL
41
+
42
+ # Creates an SSH publisher which will scp all +files+ in +local_dir+ to
43
+ # +remote_dir+ on +host+.
44
+
45
+ def initialize(host, remote_dir, local_dir, *files)
46
+ @host = host
47
+ @remote_dir = remote_dir
48
+ @local_dir = local_dir
49
+ @files = files
50
+ end
51
+
52
+ # Uploads the files
53
+
54
+ def upload
55
+ @files.each do |fn|
56
+ sh "scp", "-q", "#{@local_dir}/#{fn}", "#{@host}:#{@remote_dir}"
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,20 @@
1
+ Gem::Specification.new do |spec|
2
+ spec.name = "rake-contrib"
3
+ spec.version = "1.0.0"
4
+ spec.authors = ["SHIBATA Hiroshi"]
5
+ spec.email = ["hsbt@ruby-lang.org"]
6
+
7
+ spec.summary = %q{Additional libraries for Rake}
8
+ spec.description = %q{Additional libraries for Rake}
9
+ spec.homepage = "https://github.com/ruby/rake-contrib"
10
+ spec.license = "MIT"
11
+
12
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
13
+ spec.bindir = "exe"
14
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
15
+ spec.require_paths = ["lib"]
16
+
17
+ spec.add_dependency "rake"
18
+
19
+ spec.add_development_dependency "bundler"
20
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rake-contrib
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - SHIBATA Hiroshi
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-07-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
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: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Additional libraries for Rake
42
+ email:
43
+ - hsbt@ruby-lang.org
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".gitignore"
49
+ - Gemfile
50
+ - LICENSE.txt
51
+ - README.md
52
+ - Rakefile
53
+ - bin/console
54
+ - bin/setup
55
+ - lib/rake/contrib/compositepublisher.rb
56
+ - lib/rake/contrib/ftptools.rb
57
+ - lib/rake/contrib/sshpublisher.rb
58
+ - rake-contrib.gemspec
59
+ homepage: https://github.com/ruby/rake-contrib
60
+ licenses:
61
+ - MIT
62
+ metadata: {}
63
+ post_install_message:
64
+ rdoc_options: []
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ required_rubygems_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ requirements: []
78
+ rubyforge_project:
79
+ rubygems_version: 2.6.6
80
+ signing_key:
81
+ specification_version: 4
82
+ summary: Additional libraries for Rake
83
+ test_files: []