entangler 1.0.2 → 1.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d318a183e429b424739510c6387797f1662ca70d
4
- data.tar.gz: 85e3be687d52b674b03fe019c4b5a23b0e2a8eee
3
+ metadata.gz: 9903130b1c46dd5555b89bfeaca78446d9326108
4
+ data.tar.gz: eaab17609bbbbcfb18f48a52558114096a5f2a8b
5
5
  SHA512:
6
- metadata.gz: 87f64fef3ac2ab2c405b0c889959cdd4d611632d60503be33d68ba54692221a4a7b00235b4383d5d5064318f032b0d942c39a77bcef1e22938a2e28d927706e0
7
- data.tar.gz: 9c0fb5dabbeddaf2eb9c94e06cf5fc185e53ade82b98ecc00ae1b00f8771b217fa92dfc68b060a249bdce61dee9c2bdd981a498d7cf1effe6b75e8cbf20e1f49
6
+ metadata.gz: 1ff26850233910d6a3f0868571f3e6c8c69ef371417784d62cda84e48d7026052245ba4ddddbcb708ec9ef1ef1299c0bdb9ee6f6cb6698f61ce6a9c3863825bd
7
+ data.tar.gz: ef43547587b7ed6085a630eb82cd9a57ec7d282a7924af8dda5efda5d13b2b5fd96688e7460a8d09e29bacb4137b5759df61c334e9abfde4e72fb4fd9ab66059
data/README.md CHANGED
@@ -18,7 +18,7 @@ $ entangler master /some/base/path user@remote:/some/remote/path
18
18
 
19
19
  ```
20
20
  $ entangler -h
21
- Entangler v1.0.2
21
+ Entangler v1.1.0
22
22
 
23
23
  Usage:
24
24
  entangler master <base_dir> <remote_user>@<remote_host>:<remote_base_dir> [options]
@@ -30,6 +30,7 @@ Options:
30
30
  -p, --port PORT Overwrite the SSH port (usually 22)
31
31
  (doesn't do anything in slave mode)
32
32
  -v, --verbose Log Debug lines
33
+ -q, --quiet Don't log to stdout in master process
33
34
  --version Show version number
34
35
  -h, --help Show this message
35
36
  ```
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  lib = File.expand_path('../lib', __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'entangler/version'
@@ -14,15 +13,16 @@ Gem::Specification.new do |spec|
14
13
  spec.homepage = 'https://github.com/daveallie/entangler'
15
14
  spec.license = 'MIT'
16
15
 
17
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
+ spec.files = Dir['lib/**/*'] + Dir['exe/**/*'] + %w[CODE_OF_CONDUCT.md LICENSE.txt README.md
17
+ Gemfile entangler.gemspec]
18
18
  spec.bindir = 'exe'
19
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.executables = ['entangler']
20
20
  spec.require_paths = ['lib']
21
21
 
22
- spec.add_development_dependency 'bundler', '~> 1.12'
22
+ spec.add_development_dependency 'bundler', '~> 1.13'
23
23
  spec.add_development_dependency 'rake', '~> 10.0'
24
24
  spec.add_development_dependency 'rspec', '~> 3.0'
25
- spec.add_development_dependency 'rubocop', '~> 0.46'
25
+ spec.add_development_dependency 'rubocop', '~> 0.49.1'
26
26
  spec.add_dependency 'listen', '~> 3.1'
27
- spec.add_dependency 'to_regexp', '~> 0.2'
27
+ spec.add_dependency 'to_regexp', '~> 0.2.0'
28
28
  end
@@ -4,6 +4,18 @@ require 'optparse'
4
4
  require 'to_regexp'
5
5
 
6
6
  options = {}
7
+ def bool_opt(opts, key, *args)
8
+ opts.on(*args) do
9
+ options[key] = true
10
+ end
11
+ end
12
+
13
+ def value_opt(opts, key, *args)
14
+ opts.on(*args) do |val|
15
+ options[key] = val
16
+ end
17
+ end
18
+
7
19
  OptionParser.new do |opts|
8
20
  opts.banner = %(Entangler v#{Entangler::VERSION}
9
21
 
@@ -20,13 +32,10 @@ Usage:
20
32
  options[:ignore] << ignore
21
33
  end
22
34
 
23
- opts.on('-p', '--port PORT', 'Overwrite the SSH port (usually 22)', "(doesn't do anything in slave mode)") do |port|
24
- options[:port] = port
25
- end
26
-
27
- opts.on('-v', '--verbose', 'Log Debug lines') do
28
- options[:verbose] = true
29
- end
35
+ value_opt(opts, :port, '-p', '--port PORT', 'Overwrite the SSH port (usually 22)',
36
+ "(doesn't do anything in slave mode)")
37
+ bool_opt(opts, :verbose, '-v', '--verbose', 'Log Debug lines')
38
+ bool_opt(opts, :quiet, '-q', '--quiet', "Don't log to stdout in master process")
30
39
 
31
40
  opts.on_tail('--version', 'Show version number') do
32
41
  puts Entangler::VERSION
@@ -40,7 +49,7 @@ Usage:
40
49
  end.parse!
41
50
 
42
51
  mode = ARGV.shift
43
- unless mode && %w(master slave).include?(mode)
52
+ unless mode && %w[master slave].include?(mode)
44
53
  puts "Mode unknown, please read help:\nentangler -h"
45
54
  exit 1
46
55
  end
@@ -103,6 +112,7 @@ if options[:ignore]
103
112
  end
104
113
  end
105
114
 
115
+ opts[:quiet] = options[:quiet]
106
116
  opts[:verbose] = options[:verbose]
107
117
 
108
118
  begin
@@ -1,5 +1,6 @@
1
1
  require_relative 'entangler/version'
2
2
  require_relative 'entangler/errors'
3
+ require_relative 'entangler/logger'
3
4
  require_relative 'entangler/entangled_file'
4
5
 
5
6
  module Entangler
@@ -2,11 +2,13 @@ require 'logger'
2
2
  require 'fileutils'
3
3
  require 'thread'
4
4
  require_relative 'background/base'
5
+ require_relative 'validation/base'
5
6
 
6
7
  module Entangler
7
8
  module Executor
8
9
  class Base
9
10
  include Entangler::Executor::Background::Base
11
+ include Entangler::Executor::Validation::Base
10
12
 
11
13
  attr_reader :base_dir
12
14
 
@@ -20,6 +22,7 @@ module Entangler
20
22
  @opts[:ignore] << /^\.entangler.*/
21
23
 
22
24
  validate_opts
25
+ Entangler::Logger.create_log_dir(base_dir)
23
26
  end
24
27
 
25
28
  def generate_abs_path(rel_path)
@@ -44,36 +47,16 @@ module Entangler
44
47
 
45
48
  protected
46
49
 
47
- def validate_opts; end
48
-
49
50
  def send_to_remote(msg = {})
50
51
  Marshal.dump(msg, @remote_writer)
51
52
  end
52
53
 
53
54
  def logger
54
- FileUtils.mkdir_p log_dir
55
- @logger ||= begin
56
- l = Logger.new(File.join(log_dir, 'entangler.log'))
57
- l.level = @opts[:verbose] ? Logger::DEBUG : Logger::INFO
58
- l.formatter = logger_formatter
59
- l
60
- end
61
- end
62
-
63
- def logger_formatter
64
- proc do |severity, datetime, _, msg|
65
- date_format = datetime.strftime('%Y-%m-%d %H:%M:%S')
66
- "[#{date_format}] #{severity.rjust(5)}: #{msg}\n"
67
- end
68
- end
69
-
70
- def log_dir
71
- File.join(base_dir, '.entangler', 'log')
55
+ @logger ||= Entangler::Logger.new(log_outputs, @opts[:verbose])
72
56
  end
73
57
 
74
- def validate_base_dir(base_dir)
75
- raise Entangler::ValidationError, "Base directory doesn't exist" unless File.exist?(base_dir)
76
- raise Entangler::ValidationError, 'Base directory is a file' unless File.directory?(base_dir)
58
+ def log_outputs
59
+ [Entangler::Logger.log_file_path(base_dir)]
77
60
  end
78
61
  end
79
62
  end
@@ -0,0 +1,11 @@
1
+ module Entangler
2
+ module Helper
3
+ def self.with_temp_file(name: 'tmp_file', contents: nil)
4
+ t = Tempfile.new(name)
5
+ t.puts(contents) unless contents.nil?
6
+ t.close
7
+ yield t
8
+ t.unlink
9
+ end
10
+ end
11
+ end
@@ -1,9 +1,12 @@
1
+ require_relative 'helpers'
1
2
  require_relative 'background/master'
3
+ require_relative 'validation/master'
2
4
 
3
5
  module Entangler
4
6
  module Executor
5
7
  class Master < Base
6
8
  include Entangler::Executor::Background::Master
9
+ include Entangler::Executor::Validation::Master
7
10
 
8
11
  def run
9
12
  perform_initial_rsync
@@ -16,64 +19,17 @@ module Entangler
16
19
 
17
20
  private
18
21
 
19
- def validate_opts
20
- super
21
- if @opts[:remote_mode]
22
- @opts[:remote_port] ||= '22'
23
- validate_remote_opts
24
- else
25
- validate_local_opts
26
- end
27
- end
28
-
29
- def validate_local_opts
30
- unless File.exist?(@opts[:remote_base_dir])
31
- raise Entangler::ValidationError, "Destination directory doesn't exist"
32
- end
33
- unless File.directory?(@opts[:remote_base_dir])
34
- raise Entangler::ValidationError, 'Destination directory is a file'
35
- end
36
- @opts[:remote_base_dir] = File.realpath(File.expand_path(@opts[:remote_base_dir]))
37
- return unless @opts[:remote_base_dir] == base_dir
38
- raise Entangler::ValidationError, "Destination directory can't be the same as the base directory"
39
- end
40
-
41
- def validate_remote_opts
42
- keys = @opts.keys
43
- raise Entangler::ValidationError, 'Missing remote base dir' unless keys.include?(:remote_base_dir)
44
- raise Entangler::ValidationError, 'Missing remote user' unless keys.include?(:remote_user)
45
- raise Entangler::ValidationError, 'Missing remote host' unless keys.include?(:remote_host)
46
- validate_remote_base_dir
47
- validate_remote_entangler_version
48
- end
49
-
50
- def validate_remote_base_dir
51
- res = `#{generate_ssh_command("[[ -d '#{@opts[:remote_base_dir]}' ]] && echo 'ok' || echo 'missing'")}`
52
- raise Entangler::ValidationError, 'Cannot connect to remote' if res.empty?
53
- raise Entangler::ValidationError, 'Remote base dir invalid' unless res.strip == 'ok'
54
- end
55
-
56
- def validate_remote_entangler_version
57
- return unless @opts[:remote_mode]
58
- res = `#{generate_ssh_command('source ~/.rvm/environments/default && entangler --version')}`
59
- remote_version = Gem::Version.new(res.strip)
60
- local_version = Gem::Version.new(Entangler::VERSION)
61
- return unless major_version_mismatch?(local_version, remote_version)
62
- msg = 'Entangler version too far apart, please update either local or remote Entangler.' \
63
- " Local version is #{local_version} and remote version is #{remote_version}."
64
- raise Entangler::VersionMismatchError, msg
65
- end
66
-
67
- def major_version_mismatch?(version1, version2)
68
- version1.segments[0] != version2.segments[0] ||
69
- (version1.segments[0].zero? && version1 != version2) ||
70
- ((version1.prerelease? || version2.prerelease?) && version1 != version2)
22
+ def log_outputs
23
+ outs = [Entangler::Logger.log_file_path(base_dir)]
24
+ outs << STDOUT unless @opts[:quiet]
71
25
  end
72
26
 
73
27
  def perform_initial_rsync
74
28
  logger.info 'Running initial sync'
75
- IO.popen(rsync_cmd_string).each do |line|
76
- logger.debug line.chomp
29
+ with_temp_rsync_ignores do |file_path|
30
+ IO.popen(rsync_cmd_string(file_path)).each do |line|
31
+ logger.debug line.chomp
32
+ end
77
33
  end
78
34
  logger.debug 'Initial sync complete'
79
35
  end
@@ -107,12 +63,17 @@ module Entangler
107
63
  "#{@opts[:remote_user]}@#{@opts[:remote_host]}"
108
64
  end
109
65
 
110
- def rsync_cmd_string
111
- exclude_args = find_rsync_ignore_folders.map { |path| "--exclude #{path}" }.join(' ')
66
+ def with_temp_rsync_ignores
67
+ Entangler::Helper.with_temp_file(name: 'rsync_ignores', contents: find_rsync_ignore_folders.join("\n")) do |f|
68
+ yield f.path
69
+ end
70
+ end
71
+
72
+ def rsync_cmd_string(rsync_ignores_file_path)
112
73
  remote_path = @opts[:remote_mode] ? "#{@opts[:remote_user]}@#{@opts[:remote_host]}:" : ''
113
74
  remote_path += "#{@opts[:remote_base_dir]}/"
114
75
 
115
- cmd = "rsync -azv #{exclude_args}"
76
+ cmd = "rsync -azv --exclude-from #{rsync_ignores_file_path}"
116
77
  cmd += " -e \"ssh -p #{@opts[:remote_port]}\"" if @opts[:remote_mode]
117
78
  cmd + " --delete #{base_dir}/ #{remote_path}"
118
79
  end
@@ -10,8 +10,7 @@ module Entangler
10
10
 
11
11
  @remote_reader = STDIN
12
12
  @remote_writer = STDOUT
13
- FileUtils.mkdir_p log_dir
14
- $stderr.reopen(File.join(log_dir, 'entangler.err'), 'w')
13
+ $stderr.reopen(File.join(Entangler::Logger.log_file_path(base_dir, 'entangler.err')), 'w')
15
14
  end
16
15
  end
17
16
  end
@@ -0,0 +1,16 @@
1
+ module Entangler
2
+ module Executor
3
+ module Validation
4
+ module Base
5
+ protected
6
+
7
+ def validate_opts; end
8
+
9
+ def validate_base_dir(base_dir)
10
+ raise Entangler::ValidationError, "Base directory doesn't exist" unless File.exist?(base_dir)
11
+ raise Entangler::ValidationError, 'Base directory is a file' unless File.directory?(base_dir)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,63 @@
1
+ module Entangler
2
+ module Executor
3
+ module Validation
4
+ module Master
5
+ private
6
+
7
+ def validate_opts
8
+ super
9
+ if @opts[:remote_mode]
10
+ @opts[:remote_port] ||= '22'
11
+ validate_remote_opts
12
+ else
13
+ validate_local_opts
14
+ end
15
+ end
16
+
17
+ def validate_local_opts
18
+ unless File.exist?(@opts[:remote_base_dir])
19
+ raise Entangler::ValidationError, "Destination directory doesn't exist"
20
+ end
21
+ unless File.directory?(@opts[:remote_base_dir])
22
+ raise Entangler::ValidationError, 'Destination directory is a file'
23
+ end
24
+ @opts[:remote_base_dir] = File.realpath(File.expand_path(@opts[:remote_base_dir]))
25
+ return unless @opts[:remote_base_dir] == base_dir
26
+ raise Entangler::ValidationError, "Destination directory can't be the same as the base directory"
27
+ end
28
+
29
+ def validate_remote_opts
30
+ keys = @opts.keys
31
+ raise Entangler::ValidationError, 'Missing remote base dir' unless keys.include?(:remote_base_dir)
32
+ raise Entangler::ValidationError, 'Missing remote user' unless keys.include?(:remote_user)
33
+ raise Entangler::ValidationError, 'Missing remote host' unless keys.include?(:remote_host)
34
+ validate_remote_base_dir
35
+ validate_remote_entangler_version
36
+ end
37
+
38
+ def validate_remote_base_dir
39
+ res = `#{generate_ssh_command("[[ -d '#{@opts[:remote_base_dir]}' ]] && echo 'ok' || echo 'missing'")}`
40
+ raise Entangler::ValidationError, 'Cannot connect to remote' if res.empty?
41
+ raise Entangler::ValidationError, 'Remote base dir invalid' unless res.strip == 'ok'
42
+ end
43
+
44
+ def validate_remote_entangler_version
45
+ return unless @opts[:remote_mode]
46
+ res = `#{generate_ssh_command('source ~/.rvm/environments/default && entangler --version')}`
47
+ remote_version = Gem::Version.new(res.strip)
48
+ local_version = Gem::Version.new(Entangler::VERSION)
49
+ return unless major_version_mismatch?(local_version, remote_version)
50
+ msg = 'Entangler version too far apart, please update either local or remote Entangler.' \
51
+ " Local version is #{local_version} and remote version is #{remote_version}."
52
+ raise Entangler::VersionMismatchError, msg
53
+ end
54
+
55
+ def major_version_mismatch?(version1, version2)
56
+ version1.segments[0] != version2.segments[0] ||
57
+ (version1.segments[0].zero? && version1 != version2) ||
58
+ ((version1.prerelease? || version2.prerelease?) && version1 != version2)
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,38 @@
1
+ require 'fileutils'
2
+ require 'logger'
3
+
4
+ module Entangler
5
+ class Logger
6
+ def self.create_log_dir(base_dir)
7
+ FileUtils.mkdir_p(File.dirname(log_file_path(base_dir)))
8
+ end
9
+
10
+ def self.log_file_path(base_dir, log_file_name = 'entangler.log')
11
+ File.join(base_dir, '.entangler', 'log', log_file_name)
12
+ end
13
+
14
+ def initialize(outputs, verbose = false)
15
+ @loggers = Array(outputs).map do |output|
16
+ logger = ::Logger.new(output)
17
+
18
+ logger.level = verbose ? ::Logger::DEBUG : ::Logger::INFO
19
+ logger.formatter = proc do |severity, datetime, _, msg|
20
+ date_format = datetime.strftime('%Y-%m-%d %H:%M:%S')
21
+ "[#{date_format}] #{severity.rjust(5)}: #{msg}\n"
22
+ end
23
+
24
+ logger
25
+ end
26
+ end
27
+
28
+ def level=(level)
29
+ @loggers.each { |logger| logger.level = level }
30
+ end
31
+
32
+ ::Logger::Severity.constants.each do |level|
33
+ define_method(level.downcase) do |*args|
34
+ @loggers.each { |logger| logger.send(level.downcase, *args) }
35
+ end
36
+ end
37
+ end
38
+ end
@@ -1,3 +1,3 @@
1
1
  module Entangler
2
- VERSION = '1.0.2'.freeze
2
+ VERSION = '1.1.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: entangler
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Allie
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-12-22 00:00:00.000000000 Z
11
+ date: 2017-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.12'
19
+ version: '1.13'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.12'
26
+ version: '1.13'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.46'
61
+ version: 0.49.1
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0.46'
68
+ version: 0.49.1
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: listen
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0.2'
89
+ version: 0.2.0
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0.2'
96
+ version: 0.2.0
97
97
  description: Two way file syncer using platform native notify.
98
98
  email:
99
99
  - dave@daveallie.com
@@ -102,17 +102,10 @@ executables:
102
102
  extensions: []
103
103
  extra_rdoc_files: []
104
104
  files:
105
- - ".gitignore"
106
- - ".rspec"
107
- - ".rubocop.yml"
108
- - ".travis.yml"
109
105
  - CODE_OF_CONDUCT.md
110
106
  - Gemfile
111
107
  - LICENSE.txt
112
108
  - README.md
113
- - Rakefile
114
- - bin/console
115
- - bin/setup
116
109
  - entangler.gemspec
117
110
  - exe/entangler
118
111
  - lib/entangler.rb
@@ -121,8 +114,12 @@ files:
121
114
  - lib/entangler/executor/background/base.rb
122
115
  - lib/entangler/executor/background/master.rb
123
116
  - lib/entangler/executor/base.rb
117
+ - lib/entangler/executor/helpers.rb
124
118
  - lib/entangler/executor/master.rb
125
119
  - lib/entangler/executor/slave.rb
120
+ - lib/entangler/executor/validation/base.rb
121
+ - lib/entangler/executor/validation/master.rb
122
+ - lib/entangler/logger.rb
126
123
  - lib/entangler/version.rb
127
124
  homepage: https://github.com/daveallie/entangler
128
125
  licenses:
@@ -144,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
144
141
  version: '0'
145
142
  requirements: []
146
143
  rubyforge_project:
147
- rubygems_version: 2.4.8
144
+ rubygems_version: 2.6.8
148
145
  signing_key:
149
146
  specification_version: 4
150
147
  summary: Two way file syncer using platform native notify.
data/.gitignore DELETED
@@ -1,11 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
10
- /log/
11
- *.gem
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --format documentation
2
- --color
@@ -1,9 +0,0 @@
1
- AllCops:
2
- DisplayCopNames: true
3
- ExtraDetails: true
4
-
5
- Metrics/LineLength:
6
- Max: 120
7
-
8
- Style/Documentation:
9
- Enabled: false
@@ -1,20 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- os:
4
- - linux
5
- - osx
6
- rvm:
7
- - 2.3.3
8
- - ruby-head
9
- matrix:
10
- include:
11
- - os: osx
12
- rvm: 2.2.5
13
- - os: linux
14
- rvm: 2.2.6
15
- allow_failures:
16
- - rvm: ruby-head
17
- before_install:
18
- - gem install bundler -v 1.13.6
19
- install:
20
- - bundle install --jobs=3 --retry=3
data/Rakefile DELETED
@@ -1,8 +0,0 @@
1
- require 'bundler/gem_tasks'
2
- require 'rspec/core/rake_task'
3
- require 'rubocop/rake_task'
4
-
5
- RuboCop::RakeTask.new(:rubocop)
6
- RSpec::Core::RakeTask.new(:spec)
7
-
8
- task default: [:rubocop, :spec]
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'bundler/setup'
4
- require 'entangler'
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require 'irb'
14
- IRB.start
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here