hashstruct 1.4 → 1.5

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
  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