ipaddr 1.2.0 → 1.2.4

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
- SHA1:
3
- metadata.gz: 409feb75e6b948e43ff047dfab95e15d71cb744a
4
- data.tar.gz: 7c4860ccfb49a0a60c896dbe992949f4e6414933
2
+ SHA256:
3
+ metadata.gz: 36032dfe23b1e485b8028f2ef7a33bf22830dfceab14f8fa87bc36b9be641257
4
+ data.tar.gz: b9287bd1261a2632fdecff1aa087883a535d6f5743344916fbe778570dcabe59
5
5
  SHA512:
6
- metadata.gz: 0f8c85dec1cd6721254f2696b665b552864454288caea21f794d652fcce9c7e8783e816fbf0902699c99cf859b197cef1ddd1bda9fd89b417fa6d19c5a151a5b
7
- data.tar.gz: fd661af42fbe9c53c5a2cf386790b91d32e4d78b49373f2ad14ac2f5bc28ddab4f01efc4b3e3bf8736d701fe1db8ba1bfab3664d487eec2a23f212b10df3cc94
6
+ metadata.gz: f54ad4ceab5bec23c4c63369301a199dcd9558e9cc5b718bae845e9fa2d2892c76ca1207767100b0f4099c0b2a8e0bff1c7f3d52d722e40d1f6bf9ede02e757a
7
+ data.tar.gz: accdd06106c29eaa3f54ee9b230db907b8edc51c954086573f8c9fae353fc76423196e075d8b4e076499fc67e60f81d9d7a4b4471212654d93f060a4a950d984
data/README.md CHANGED
@@ -3,6 +3,8 @@
3
3
  IPAddr provides a set of methods to manipulate an IP address. Both
4
4
  IPv4 and IPv6 are supported.
5
5
 
6
+ [![Build Status](https://travis-ci.org/ruby/ipaddr.svg?branch=master)](https://travis-ci.org/ruby/ipaddr)
7
+
6
8
  ## Installation
7
9
 
8
10
  This library is part of the standard ruby distribution as default gem
data/ipaddr.gemspec CHANGED
@@ -1,10 +1,15 @@
1
+ # frozen_string_literal: true
1
2
  # coding: utf-8
2
3
  lib = File.expand_path("../lib", __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
 
6
+ version = File.foreach(File.expand_path("ipaddr.rb", lib)).find do |line|
7
+ /^\s*VERSION\s*=\s*["'](.*)["']/ =~ line and break $1
8
+ end
9
+
5
10
  Gem::Specification.new do |spec|
6
11
  spec.name = "ipaddr"
7
- spec.version = "1.2.0"
12
+ spec.version = version
8
13
  spec.authors = ["Akinori MUSHA", "Hajimu UMEMOTO"]
9
14
  spec.email = ["knu@idaemons.org", "ume@mahoroba.org"]
10
15
 
@@ -14,13 +19,10 @@ IPAddr provides a set of methods to manipulate an IP address.
14
19
  Both IPv4 and IPv6 are supported.
15
20
  DESCRIPTION
16
21
  spec.homepage = "https://github.com/ruby/ipaddr"
22
+ spec.licenses = ["Ruby", "BSD-2-Clause"]
17
23
 
18
- spec.files = [".gitignore", ".travis.yml", "Gemfile", "LICENSE.txt", "README.md", "Rakefile", "bin/console", "bin/setup", "ipaddr.gemspec", "lib/ipaddr.rb"]
19
- spec.bindir = "exe"
20
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
+ spec.files = ["LICENSE.txt", "README.md", "ipaddr.gemspec", "lib/ipaddr.rb"]
21
25
  spec.require_paths = ["lib"]
22
26
 
23
- spec.add_development_dependency "bundler", "~> 1.15"
24
- spec.add_development_dependency "rake", "~> 10.0"
25
- spec.add_development_dependency "test-unit"
27
+ spec.required_ruby_version = ">= 2.3"
26
28
  end
data/lib/ipaddr.rb CHANGED
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  #
3
3
  # ipaddr.rb - A class to manipulate an IP address
4
4
  #
@@ -40,6 +40,7 @@ require 'socket'
40
40
  # p ipaddr3 #=> #<IPAddr: IPv4:192.168.2.0/255.255.255.0>
41
41
 
42
42
  class IPAddr
43
+ VERSION = "1.2.4"
43
44
 
44
45
  # 32 bit mask for IPv4
45
46
  IN4MASK = 0xffffffff
@@ -103,22 +104,21 @@ class IPAddr
103
104
 
104
105
  # Creates a new ipaddr containing the given network byte ordered
105
106
  # string form of an IP address.
106
- def IPAddr::new_ntoh(addr)
107
- return IPAddr.new(IPAddr::ntop(addr))
107
+ def self.new_ntoh(addr)
108
+ return new(ntop(addr))
108
109
  end
109
110
 
110
111
  # Convert a network byte ordered string form of an IP address into
111
112
  # human readable form.
112
- def IPAddr::ntop(addr)
113
+ def self.ntop(addr)
113
114
  case addr.size
114
115
  when 4
115
- s = addr.unpack('C4').join('.')
116
+ addr.unpack('C4').join('.')
116
117
  when 16
117
- s = IN6FORMAT % addr.unpack('n8')
118
+ IN6FORMAT % addr.unpack('n8')
118
119
  else
119
120
  raise AddressFamilyError, "unsupported address family"
120
121
  end
121
- return s
122
122
  end
123
123
 
124
124
  # Returns a new ipaddr built by bitwise AND.
@@ -168,34 +168,17 @@ class IPAddr
168
168
  # net1 = IPAddr.new("192.168.2.0/24")
169
169
  # net2 = IPAddr.new("192.168.2.100")
170
170
  # net3 = IPAddr.new("192.168.3.0")
171
+ # net4 = IPAddr.new("192.168.2.0/16")
171
172
  # p net1.include?(net2) #=> true
172
173
  # p net1.include?(net3) #=> false
174
+ # p net1.include?(net4) #=> false
175
+ # p net4.include?(net1) #=> true
173
176
  def include?(other)
174
177
  other = coerce_other(other)
175
- if ipv4_mapped?
176
- if (@mask_addr >> 32) != 0xffffffffffffffffffffffff
177
- return false
178
- end
179
- mask_addr = (@mask_addr & IN4MASK)
180
- addr = (@addr & IN4MASK)
181
- family = Socket::AF_INET
182
- else
183
- mask_addr = @mask_addr
184
- addr = @addr
185
- family = @family
186
- end
187
- if other.ipv4_mapped?
188
- other_addr = (other.to_i & IN4MASK)
189
- other_family = Socket::AF_INET
190
- else
191
- other_addr = other.to_i
192
- other_family = other.family
193
- end
194
-
195
- if family != other_family
196
- return false
197
- end
198
- return ((addr & mask_addr) == (other_addr & mask_addr))
178
+ return false unless other.family == family
179
+ range = to_range
180
+ other = other.to_range
181
+ range.begin <= other.begin && range.end >= other.end
199
182
  end
200
183
  alias === include?
201
184
 
@@ -232,7 +215,13 @@ class IPAddr
232
215
  # Returns a string containing the IP address representation in
233
216
  # canonical form.
234
217
  def to_string
235
- return _to_string(@addr)
218
+ str = _to_string(@addr)
219
+
220
+ if @family == Socket::AF_INET6
221
+ str << zone_id.to_s
222
+ end
223
+
224
+ return str
236
225
  end
237
226
 
238
227
  # Returns a network byte ordered string form of the IP address.
@@ -310,7 +299,7 @@ class IPAddr
310
299
 
311
300
  # Returns true if the ipaddr is an IPv4-compatible IPv6 address.
312
301
  def ipv4_compat?
313
- warn "#{caller(1)[0]}: warning: IPAddr\##{__callee__} is obsolete" if $VERBOSE
302
+ warn "IPAddr\##{__callee__} is obsolete", uplevel: 1 if $VERBOSE
314
303
  _ipv4_compat?
315
304
  end
316
305
 
@@ -328,17 +317,19 @@ class IPAddr
328
317
  # into an IPv4-mapped IPv6 address.
329
318
  def ipv4_mapped
330
319
  if !ipv4?
331
- raise InvalidAddressError, "not an IPv4 address"
320
+ raise InvalidAddressError, "not an IPv4 address: #{@addr}"
332
321
  end
333
- return self.clone.set(@addr | 0xffff00000000, Socket::AF_INET6)
322
+ clone = self.clone.set(@addr | 0xffff00000000, Socket::AF_INET6)
323
+ clone.instance_variable_set(:@mask_addr, @mask_addr | 0xffffffffffffffffffffffff00000000)
324
+ clone
334
325
  end
335
326
 
336
327
  # Returns a new ipaddr built by converting the native IPv4 address
337
328
  # into an IPv4-compatible IPv6 address.
338
329
  def ipv4_compat
339
- warn "#{caller(1)[0]}: warning: IPAddr\##{__callee__} is obsolete" if $VERBOSE
330
+ warn "IPAddr\##{__callee__} is obsolete", uplevel: 1 if $VERBOSE
340
331
  if !ipv4?
341
- raise InvalidAddressError, "not an IPv4 address"
332
+ raise InvalidAddressError, "not an IPv4 address: #{@addr}"
342
333
  end
343
334
  return self.clone.set(@addr, Socket::AF_INET6)
344
335
  end
@@ -369,7 +360,7 @@ class IPAddr
369
360
  # Returns a string for DNS reverse lookup compatible with RFC3172.
370
361
  def ip6_arpa
371
362
  if !ipv6?
372
- raise InvalidAddressError, "not an IPv6 address"
363
+ raise InvalidAddressError, "not an IPv6 address: #{@addr}"
373
364
  end
374
365
  return _reverse + ".ip6.arpa"
375
366
  end
@@ -377,7 +368,7 @@ class IPAddr
377
368
  # Returns a string for DNS reverse lookup compatible with RFC1886.
378
369
  def ip6_int
379
370
  if !ipv6?
380
- raise InvalidAddressError, "not an IPv6 address"
371
+ raise InvalidAddressError, "not an IPv6 address: #{@addr}"
381
372
  end
382
373
  return _reverse + ".ip6.int"
383
374
  end
@@ -404,7 +395,7 @@ class IPAddr
404
395
 
405
396
  # Returns a hash value used by Hash, Set, and Array classes
406
397
  def hash
407
- return ([@addr, @mask_addr].hash << 1) | (ipv4? ? 0 : 1)
398
+ return ([@addr, @mask_addr, @zone_id].hash << 1) | (ipv4? ? 0 : 1)
408
399
  end
409
400
 
410
401
  # Creates a Range object for the network address.
@@ -420,7 +411,7 @@ class IPAddr
420
411
  raise AddressFamilyError, "unsupported address family"
421
412
  end
422
413
 
423
- return clone.set(begin_addr, @family)..clone.set(end_addr, @family)
414
+ self.class.new(begin_addr, @family)..self.class.new(end_addr, @family)
424
415
  end
425
416
 
426
417
  # Returns the prefix length in bits for the ipaddr.
@@ -448,7 +439,7 @@ class IPAddr
448
439
  when Integer
449
440
  mask!(prefix)
450
441
  else
451
- raise InvalidPrefixError, "prefix must be an integer"
442
+ raise InvalidPrefixError, "prefix must be an integer: #{@addr}"
452
443
  end
453
444
  end
454
445
 
@@ -460,11 +451,42 @@ class IPAddr
460
451
  af = "IPv4"
461
452
  when Socket::AF_INET6
462
453
  af = "IPv6"
454
+ zone_id = @zone_id.to_s
463
455
  else
464
456
  raise AddressFamilyError, "unsupported address family"
465
457
  end
466
- return sprintf("#<%s: %s:%s/%s>", self.class.name,
467
- af, _to_string(@addr), _to_string(@mask_addr))
458
+ return sprintf("#<%s: %s:%s%s/%s>", self.class.name,
459
+ af, _to_string(@addr), zone_id, _to_string(@mask_addr))
460
+ end
461
+
462
+ # Returns the netmask in string format e.g. 255.255.0.0
463
+ def netmask
464
+ _to_string(@mask_addr)
465
+ end
466
+
467
+ # Returns the IPv6 zone identifier, if present.
468
+ # Raises InvalidAddressError if not an IPv6 address.
469
+ def zone_id
470
+ if @family == Socket::AF_INET6
471
+ @zone_id
472
+ else
473
+ raise InvalidAddressError, "not an IPv6 address"
474
+ end
475
+ end
476
+
477
+ # Returns the IPv6 zone identifier, if present.
478
+ # Raises InvalidAddressError if not an IPv6 address.
479
+ def zone_id=(zid)
480
+ if @family == Socket::AF_INET6
481
+ case zid
482
+ when nil, /\A%(\w+)\z/
483
+ @zone_id = zid
484
+ else
485
+ raise InvalidAddressError, "invalid zone identifier for address"
486
+ end
487
+ else
488
+ raise InvalidAddressError, "not an IPv6 address"
489
+ end
468
490
  end
469
491
 
470
492
  protected
@@ -476,11 +498,11 @@ class IPAddr
476
498
  case family[0] ? family[0] : @family
477
499
  when Socket::AF_INET
478
500
  if addr < 0 || addr > IN4MASK
479
- raise InvalidAddressError, "invalid address"
501
+ raise InvalidAddressError, "invalid address: #{@addr}"
480
502
  end
481
503
  when Socket::AF_INET6
482
504
  if addr < 0 || addr > IN6MASK
483
- raise InvalidAddressError, "invalid address"
505
+ raise InvalidAddressError, "invalid address: #{@addr}"
484
506
  end
485
507
  else
486
508
  raise AddressFamilyError, "unsupported address family"
@@ -488,6 +510,9 @@ class IPAddr
488
510
  @addr = addr
489
511
  if family[0]
490
512
  @family = family[0]
513
+ if @family == Socket::AF_INET
514
+ @mask_addr &= IN4MASK
515
+ end
491
516
  end
492
517
  return self
493
518
  end
@@ -496,17 +521,20 @@ class IPAddr
496
521
  def mask!(mask)
497
522
  case mask
498
523
  when String
499
- if mask =~ /\A\d+\z/
524
+ case mask
525
+ when /\A(0|[1-9]+\d*)\z/
500
526
  prefixlen = mask.to_i
527
+ when /\A\d+\z/
528
+ raise InvalidPrefixError, "leading zeros in prefix"
501
529
  else
502
530
  m = IPAddr.new(mask)
503
531
  if m.family != @family
504
- raise InvalidPrefixError, "address family is not same"
532
+ raise InvalidPrefixError, "address family is not same: #{@addr}"
505
533
  end
506
534
  @mask_addr = m.to_i
507
535
  n = @mask_addr ^ m.instance_variable_get(:@mask_addr)
508
536
  unless ((n + 1) & n).zero?
509
- raise InvalidPrefixError, "invalid mask #{mask}"
537
+ raise InvalidPrefixError, "invalid mask #{mask}: #{@addr}"
510
538
  end
511
539
  @addr &= @mask_addr
512
540
  return self
@@ -517,13 +545,13 @@ class IPAddr
517
545
  case @family
518
546
  when Socket::AF_INET
519
547
  if prefixlen < 0 || prefixlen > 32
520
- raise InvalidPrefixError, "invalid length"
548
+ raise InvalidPrefixError, "invalid length: #{@addr}"
521
549
  end
522
550
  masklen = 32 - prefixlen
523
551
  @mask_addr = ((IN4MASK >> masklen) << masklen)
524
552
  when Socket::AF_INET6
525
553
  if prefixlen < 0 || prefixlen > 128
526
- raise InvalidPrefixError, "invalid length"
554
+ raise InvalidPrefixError, "invalid length: #{@addr}"
527
555
  end
528
556
  masklen = 128 - prefixlen
529
557
  @mask_addr = ((IN6MASK >> masklen) << masklen)
@@ -555,6 +583,7 @@ class IPAddr
555
583
  # those, such as &, |, include? and ==, accept a string, or a packed
556
584
  # in_addr value instead of an IPAddr object.
557
585
  def initialize(addr = '::', family = Socket::AF_UNSPEC)
586
+ @mask_addr = nil
558
587
  if !addr.kind_of?(String)
559
588
  case family
560
589
  when Socket::AF_INET, Socket::AF_INET6
@@ -567,11 +596,16 @@ class IPAddr
567
596
  raise AddressFamilyError, "unsupported address family: #{family}"
568
597
  end
569
598
  end
570
- prefix, prefixlen = addr.split('/')
599
+ prefix, prefixlen = addr.split('/', 2)
571
600
  if prefix =~ /\A\[(.*)\]\z/i
572
601
  prefix = $1
573
602
  family = Socket::AF_INET6
574
603
  end
604
+ if prefix =~ /\A(.*)(%\w+)\z/
605
+ prefix = $1
606
+ zone_id = $2
607
+ family = Socket::AF_INET6
608
+ end
575
609
  # It seems AI_NUMERICHOST doesn't do the job.
576
610
  #Socket.getaddrinfo(left, nil, Socket::AF_INET6, Socket::SOCK_STREAM, nil,
577
611
  # Socket::AI_NUMERICHOST)
@@ -586,6 +620,7 @@ class IPAddr
586
620
  @addr = in6_addr(prefix)
587
621
  @family = Socket::AF_INET6
588
622
  end
623
+ @zone_id = zone_id
589
624
  if family != Socket::AF_UNSPEC && @family != family
590
625
  raise AddressFamilyError, "address family mismatch"
591
626
  end
@@ -616,8 +651,8 @@ class IPAddr
616
651
  octets = m.captures
617
652
  end
618
653
  octets.inject(0) { |i, s|
619
- (n = s.to_i) < 256 or raise InvalidAddressError, "invalid address"
620
- s.match(/\A0./) and raise InvalidAddressError, "zero-filled number in IPv4 address is ambiguous"
654
+ (n = s.to_i) < 256 or raise InvalidAddressError, "invalid address: #{@addr}"
655
+ s.match(/\A0./) and raise InvalidAddressError, "zero-filled number in IPv4 address is ambiguous: #{@addr}"
621
656
  i << 8 | n
622
657
  }
623
658
  end
@@ -634,19 +669,19 @@ class IPAddr
634
669
  right = ''
635
670
  when RE_IPV6ADDRLIKE_COMPRESSED
636
671
  if $4
637
- left.count(':') <= 6 or raise InvalidAddressError, "invalid address"
672
+ left.count(':') <= 6 or raise InvalidAddressError, "invalid address: #{@addr}"
638
673
  addr = in_addr($~[4,4])
639
674
  left = $1
640
675
  right = $3 + '0:0'
641
676
  else
642
677
  left.count(':') <= ($1.empty? || $2.empty? ? 8 : 7) or
643
- raise InvalidAddressError, "invalid address"
678
+ raise InvalidAddressError, "invalid address: #{@addr}"
644
679
  left = $1
645
680
  right = $2
646
681
  addr = 0
647
682
  end
648
683
  else
649
- raise InvalidAddressError, "invalid address"
684
+ raise InvalidAddressError, "invalid address: #{@addr}"
650
685
  end
651
686
  l = left.split(':')
652
687
  r = right.split(':')
metadata CHANGED
@@ -1,58 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ipaddr
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Akinori MUSHA
8
8
  - Hajimu UMEMOTO
9
9
  autorequire:
10
- bindir: exe
10
+ bindir: bin
11
11
  cert_chain: []
12
- date: 2017-10-21 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: bundler
16
- requirement: !ruby/object:Gem::Requirement
17
- requirements:
18
- - - "~>"
19
- - !ruby/object:Gem::Version
20
- version: '1.15'
21
- type: :development
22
- prerelease: false
23
- version_requirements: !ruby/object:Gem::Requirement
24
- requirements:
25
- - - "~>"
26
- - !ruby/object:Gem::Version
27
- version: '1.15'
28
- - !ruby/object:Gem::Dependency
29
- name: rake
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - "~>"
33
- - !ruby/object:Gem::Version
34
- version: '10.0'
35
- type: :development
36
- prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - "~>"
40
- - !ruby/object:Gem::Version
41
- version: '10.0'
42
- - !ruby/object:Gem::Dependency
43
- name: test-unit
44
- requirement: !ruby/object:Gem::Requirement
45
- requirements:
46
- - - ">="
47
- - !ruby/object:Gem::Version
48
- version: '0'
49
- type: :development
50
- prerelease: false
51
- version_requirements: !ruby/object:Gem::Requirement
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- version: '0'
12
+ date: 2022-02-05 00:00:00.000000000 Z
13
+ dependencies: []
56
14
  description: |
57
15
  IPAddr provides a set of methods to manipulate an IP address.
58
16
  Both IPv4 and IPv6 are supported.
@@ -63,18 +21,14 @@ executables: []
63
21
  extensions: []
64
22
  extra_rdoc_files: []
65
23
  files:
66
- - ".gitignore"
67
- - ".travis.yml"
68
- - Gemfile
69
24
  - LICENSE.txt
70
25
  - README.md
71
- - Rakefile
72
- - bin/console
73
- - bin/setup
74
26
  - ipaddr.gemspec
75
27
  - lib/ipaddr.rb
76
28
  homepage: https://github.com/ruby/ipaddr
77
- licenses: []
29
+ licenses:
30
+ - Ruby
31
+ - BSD-2-Clause
78
32
  metadata: {}
79
33
  post_install_message:
80
34
  rdoc_options: []
@@ -84,15 +38,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
84
38
  requirements:
85
39
  - - ">="
86
40
  - !ruby/object:Gem::Version
87
- version: '0'
41
+ version: '2.3'
88
42
  required_rubygems_version: !ruby/object:Gem::Requirement
89
43
  requirements:
90
44
  - - ">="
91
45
  - !ruby/object:Gem::Version
92
46
  version: '0'
93
47
  requirements: []
94
- rubyforge_project:
95
- rubygems_version: 2.6.14
48
+ rubygems_version: 3.0.3.1
96
49
  signing_key:
97
50
  specification_version: 4
98
51
  summary: A class to manipulate an IP address in ruby
data/.gitignore DELETED
@@ -1,9 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
data/.travis.yml DELETED
@@ -1,14 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.4
5
- - ruby-head
6
- - jruby
7
- - jruby-head
8
- matrix:
9
- allow_failures:
10
- # Even `rvm use jruby` does not work reliably on Travis:
11
- # https://travis-ci.org/ruby/ipaddr/jobs/277222999
12
- - rvm: jruby
13
- - rvm: jruby-head
14
- before_install: gem install bundler
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in ipaddr.gemspec
4
- gemspec
data/Rakefile DELETED
@@ -1,10 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
3
-
4
- Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
7
- t.test_files = FileList["test/**/test_*.rb"]
8
- end
9
-
10
- task :default => :test
data/bin/console DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require "ipaddr"
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(__FILE__)
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