hashstruct 1.3.1 → 1.4

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: 015c8589bd7af72a393ec494cf5c044adc9b45170d09f8c7207027c0450aae34
4
- data.tar.gz: 23ec8d2a0848ecfbb212cd68694ca2e151559c35e640e7c78bc930e948d813be
3
+ metadata.gz: 2859100ae0f6c106591cc4319e4748ef00dabc6fbc54fa44f0cd1cd9c8a56d4e
4
+ data.tar.gz: 0e26a1dde2d422f4ece4f61fa1aceb03fd394afcf7a0c85fe2bba3f1bbb3b4c5
5
5
  SHA512:
6
- metadata.gz: 8403282f22c80051296c10a65c17b4b9398288859d40c2ca10c41db2d26ccd9429a5c0ea0a90fe3c678f71c3f68f53c0ed9c5b2ea9e9d94a6f7258de394150c6
7
- data.tar.gz: 645ca574efb7cd3e93eec60dc78e48a29070861db6f4f4a6406ecdfac0f53e9e97c7376b8b93bff0b023d63f9dbd4301e86748c20fbea4f89aa4c3b59d4ccfbf
6
+ metadata.gz: eabd38283c9d2f0750feb25b7a69bdf2264c1a76cd369ddbf22973561fb3239747a39312c1d159f20442634bf600f3ed24555e3537ed0d577515bee7969714ec
7
+ data.tar.gz: 35d432323b4379676faf24b8bd00e221b033cc258705b761639712b146155cc3be22eb2b1ec07a21015effb35e8761f39472b103e2338b63c7f0cea7d03c49d1
data/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
1
  .DS_Store
2
+ Gemfile.lock
2
3
  *.gem
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/Rakefile CHANGED
@@ -1,2 +1,9 @@
1
- require 'rubygems/tasks'
2
- Gem::Tasks.new
1
+ require 'bundler/gem_tasks'
2
+ Bundler.require
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.test_files = FileList['test/*test.rb']
7
+ end
8
+
9
+ task :default => :test
data/hashstruct.gemspec CHANGED
@@ -1,10 +1,6 @@
1
- #encoding: utf-8
2
-
3
- require_relative 'lib/hashstruct/version'
4
-
5
1
  Gem::Specification.new do |s|
6
2
  s.name = 'hashstruct'
7
- s.version = HashStruct::VERSION
3
+ s.version = '1.4'
8
4
  s.summary = 'Overly helpful magic hash structure.'
9
5
  s.author = 'John Labovitz'
10
6
  s.email = 'johnl@johnlabovitz.com'
@@ -20,6 +16,5 @@ Gem::Specification.new do |s|
20
16
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
21
17
  s.require_path = 'lib'
22
18
 
23
- s.add_development_dependency 'rake', '~> 12.3'
24
- s.add_development_dependency 'rubygems-tasks', '~> 0.2'
19
+ s.add_development_dependency 'rake', '~> 13.0'
25
20
  end
data/lib/hashstruct.rb CHANGED
@@ -9,22 +9,12 @@ class HashStruct < Hash
9
9
  end
10
10
 
11
11
  def [](key)
12
- key = key.to_sym
13
- if methods.include?(key)
14
- method(key).call
15
- elsif has_key?(key)
16
- fetch(key)
17
- else
18
- nil
19
- end
12
+ key = make_key(key)
13
+ has_key?(key) ? fetch(key) : nil
20
14
  end
21
15
 
22
16
  def []=(key, value)
23
- if methods.include?(:"#{key}=")
24
- method(:"#{key}=").call(convert_object(value))
25
- else
26
- store(key.to_s.to_sym, convert_object(value))
27
- end
17
+ store(make_key(key), convert_object(value))
28
18
  end
29
19
 
30
20
  def method_missing(method_id, *args)
@@ -32,13 +22,17 @@ class HashStruct < Hash
32
22
  if method_name =~ /=$/
33
23
  raise ArgumentError, "wrong number of arguments for method #{method_name.inspect} (#{args.length} for 1)", caller(1) if args.length != 1
34
24
  raise TypeError, "can't modify frozen #{self.class}", caller(1) if self.frozen?
35
- self[method_name.chop.to_sym] = args.first
25
+ self[method_name.chop] = args.first
36
26
  else
37
27
  raise ArgumentError, "wrong number of arguments (#{args.length} for 0)", caller(1) if args.length != 0
38
28
  self[method_id]
39
29
  end
40
30
  end
41
31
 
32
+ def make_key(obj)
33
+ obj.to_s.downcase.to_sym
34
+ end
35
+
42
36
  def convert_object(obj)
43
37
  case obj
44
38
  when String
@@ -62,11 +56,10 @@ class HashStruct < Hash
62
56
  when %r{^(\d+)/(\d+)$}
63
57
  Rational($1.to_i, $2.to_i)
64
58
  # date
65
- when %r{^\d{4}-\d{2}-\d{2}}, # 2010-06-06
66
- %r{^\d{1,2}/\d{1,2}/\d{4}}, # 06/06/2010
67
- %r{^\d{4}/\d{1,2}/\d{1,2}}, # 2010/06/06
68
- %r{^(Sun|Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s*\d*\s*\b(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\b} # Sun, 06 Jun 2010 23:02:25 GMT
69
- DateTime.parse(obj)
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
+ Date.parse(obj)
70
63
  # boolean true
71
64
  when 'true', 'yes', 'on'
72
65
  true
@@ -87,4 +80,4 @@ class HashStruct < Hash
87
80
  end
88
81
  end
89
82
 
90
- end
83
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hashstruct
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: '1.4'
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Labovitz
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-08 00:00:00.000000000 Z
11
+ date: 2023-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -16,28 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '12.3'
19
+ version: '13.0'
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: '12.3'
27
- - !ruby/object:Gem::Dependency
28
- name: rubygems-tasks
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '0.2'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '0.2'
26
+ version: '13.0'
41
27
  description: "\n HashStruct provides an object based on Hash, but acts like Struct
42
28
  (or OpenStruct), providing helpful\n accessors for each key from the get-go.
43
29
  It also magically parses string values when it can (eg, dates,\n URIs, numbers,
@@ -48,16 +34,16 @@ extensions: []
48
34
  extra_rdoc_files: []
49
35
  files:
50
36
  - ".gitignore"
37
+ - Gemfile
51
38
  - README.md
52
39
  - Rakefile
53
40
  - hashstruct.gemspec
54
41
  - lib/hashstruct.rb
55
- - lib/hashstruct/version.rb
56
42
  homepage: http://github.com/jslabovitz/hashstruct
57
43
  licenses:
58
44
  - MIT
59
45
  metadata: {}
60
- post_install_message:
46
+ post_install_message:
61
47
  rdoc_options: []
62
48
  require_paths:
63
49
  - lib
@@ -72,9 +58,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
72
58
  - !ruby/object:Gem::Version
73
59
  version: '0'
74
60
  requirements: []
75
- rubyforge_project:
76
- rubygems_version: 2.7.4
77
- signing_key:
61
+ rubygems_version: 3.4.17
62
+ signing_key:
78
63
  specification_version: 4
79
64
  summary: Overly helpful magic hash structure.
80
65
  test_files: []
@@ -1,5 +0,0 @@
1
- class HashStruct
2
-
3
- VERSION = '1.3.1'
4
-
5
- end