hashstruct 1.4 → 1.5

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
  SHA256:
3
- metadata.gz: 2859100ae0f6c106591cc4319e4748ef00dabc6fbc54fa44f0cd1cd9c8a56d4e
4
- data.tar.gz: 0e26a1dde2d422f4ece4f61fa1aceb03fd394afcf7a0c85fe2bba3f1bbb3b4c5
3
+ metadata.gz: ef62c5e766986486e0eae763c0f1bef12da2b6a52bbe7d272f67467a0aee3eba
4
+ data.tar.gz: 10e99235757740e723af33d73811c25d434535a57be1f632a750cfde6c0032e8
5
5
  SHA512:
6
- metadata.gz: eabd38283c9d2f0750feb25b7a69bdf2264c1a76cd369ddbf22973561fb3239747a39312c1d159f20442634bf600f3ed24555e3537ed0d577515bee7969714ec
7
- data.tar.gz: 35d432323b4379676faf24b8bd00e221b033cc258705b761639712b146155cc3be22eb2b1ec07a21015effb35e8761f39472b103e2338b63c7f0cea7d03c49d1
6
+ metadata.gz: e9dea5dfff5fce6eaa30717d47015a44cc9d71435dd720932d3f28f617fd861352558db9197ade43d71a415ca8e9c39a150aee3d62503a5e63e42ad0f56696dd
7
+ data.tar.gz: 72edc59eb48835375aefe3cbfdbc9e6dcd779f67a78281ec141d53414dc9ed71f317cee03190f097a935c8f4fb64fadf892cb0b3b02f970ec748284c7f4a89d3
data/hashstruct.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'hashstruct'
3
- s.version = '1.4'
3
+ s.version = '1.5'
4
4
  s.summary = 'Overly helpful magic hash structure.'
5
5
  s.author = 'John Labovitz'
6
6
  s.email = 'johnl@johnlabovitz.com'
@@ -16,5 +16,8 @@ Gem::Specification.new do |s|
16
16
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
17
17
  s.require_path = 'lib'
18
18
 
19
- s.add_development_dependency 'rake', '~> 13.0'
19
+ s.add_development_dependency 'bundler', '~> 2.5'
20
+ s.add_development_dependency 'minitest', '~> 5.20'
21
+ s.add_development_dependency 'minitest-power_assert', '~> 0.3'
22
+ s.add_development_dependency 'rake', '~> 13.1'
20
23
  end
data/lib/hashstruct.rb CHANGED
@@ -9,12 +9,12 @@ class HashStruct < Hash
9
9
  end
10
10
 
11
11
  def [](key)
12
- key = make_key(key)
12
+ key = _make_key(key)
13
13
  has_key?(key) ? fetch(key) : nil
14
14
  end
15
15
 
16
16
  def []=(key, value)
17
- store(make_key(key), convert_object(value))
17
+ store(_make_key(key), _convert_object(value))
18
18
  end
19
19
 
20
20
  def method_missing(method_id, *args)
@@ -29,14 +29,14 @@ class HashStruct < Hash
29
29
  end
30
30
  end
31
31
 
32
- def make_key(obj)
33
- obj.to_s.downcase.to_sym
32
+ def _make_key(obj)
33
+ obj.to_s.downcase.gsub(/[^\w]/, '_').to_sym
34
34
  end
35
35
 
36
- def convert_object(obj)
36
+ def _convert_object(obj)
37
37
  case obj
38
38
  when String
39
- case obj
39
+ case obj.strip
40
40
  # URI
41
41
  when %r{^(ftp|http|https|mailto):}
42
42
  URI.parse(obj) rescue obj
@@ -56,9 +56,9 @@ class HashStruct < Hash
56
56
  when %r{^(\d+)/(\d+)$}
57
57
  Rational($1.to_i, $2.to_i)
58
58
  # date
59
- when %r{^\d{4}-\d{2}-\d{2}$}, # 2010-06-06
60
- %r{^\d{1,2}/\d{1,2}/\d{4}$}, # 06/06/2010
61
- %r{^\d{4}/\d{1,2}/\d{1,2}$} # 2010/06/06
59
+ when %r{^\d{4}-\d{2}-\d{2}}, # 2010-06-06
60
+ %r{^\d{1,2}/\d{1,2}/\d{4}}, # 06/06/2010
61
+ %r{^\d{4}/\d{1,2}/\d{1,2}} # 2010/06/06
62
62
  Date.parse(obj)
63
63
  # boolean true
64
64
  when 'true', 'yes', 'on'
@@ -66,11 +66,14 @@ class HashStruct < Hash
66
66
  # boolean false
67
67
  when 'false', 'no', 'off'
68
68
  false
69
+ # nil or empty string
70
+ when nil, ''
71
+ nil
69
72
  else
70
73
  obj
71
74
  end
72
75
  when Array
73
- obj.map { |o| convert_object(o) }
76
+ obj.map { |o| _convert_object(o) }
74
77
  when Hash
75
78
  HashStruct.new(obj)
76
79
  when HashStruct
data/test/test.rb ADDED
@@ -0,0 +1,23 @@
1
+ require 'minitest/autorun'
2
+ require 'minitest/power_assert'
3
+
4
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
5
+ require 'hashstruct'
6
+
7
+ class Test < Minitest::Test
8
+
9
+ def setup
10
+ @h = HashStruct.new(
11
+ date1: '2017-11-01',
12
+ 'Date-Time' => '2023-12-23T13:20:00-05:00',
13
+ )
14
+ end
15
+
16
+ def test_date
17
+ d1 = @h.date1
18
+ assert { d1.kind_of?(Date) }
19
+ d2 = @h.date_time
20
+ assert { d2.kind_of?(Date) }
21
+ end
22
+
23
+ end
metadata CHANGED
@@ -1,29 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hashstruct
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.4'
4
+ version: '1.5'
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Labovitz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-31 00:00:00.000000000 Z
11
+ date: 2023-12-23 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.5'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '5.20'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '5.20'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest-power_assert
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.3'
13
55
  - !ruby/object:Gem::Dependency
14
56
  name: rake
15
57
  requirement: !ruby/object:Gem::Requirement
16
58
  requirements:
17
59
  - - "~>"
18
60
  - !ruby/object:Gem::Version
19
- version: '13.0'
61
+ version: '13.1'
20
62
  type: :development
21
63
  prerelease: false
22
64
  version_requirements: !ruby/object:Gem::Requirement
23
65
  requirements:
24
66
  - - "~>"
25
67
  - !ruby/object:Gem::Version
26
- version: '13.0'
68
+ version: '13.1'
27
69
  description: "\n HashStruct provides an object based on Hash, but acts like Struct
28
70
  (or OpenStruct), providing helpful\n accessors for each key from the get-go.
29
71
  It also magically parses string values when it can (eg, dates,\n URIs, numbers,
@@ -39,6 +81,7 @@ files:
39
81
  - Rakefile
40
82
  - hashstruct.gemspec
41
83
  - lib/hashstruct.rb
84
+ - test/test.rb
42
85
  homepage: http://github.com/jslabovitz/hashstruct
43
86
  licenses:
44
87
  - MIT
@@ -58,8 +101,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
58
101
  - !ruby/object:Gem::Version
59
102
  version: '0'
60
103
  requirements: []
61
- rubygems_version: 3.4.17
104
+ rubygems_version: 3.5.3
62
105
  signing_key:
63
106
  specification_version: 4
64
107
  summary: Overly helpful magic hash structure.
65
- test_files: []
108
+ test_files:
109
+ - test/test.rb