entangler 1.0.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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