hashstruct 1.3 → 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: b294fd6bfb8888f1a2e70dce03330484aa9e8fb8f814f79add443b05a77957d2
4
- data.tar.gz: 7ef693f2940d8c6ded4ad69a7f6a37e0439f30bff994a94dc4dfc8a191bf1ee6
3
+ metadata.gz: 2859100ae0f6c106591cc4319e4748ef00dabc6fbc54fa44f0cd1cd9c8a56d4e
4
+ data.tar.gz: 0e26a1dde2d422f4ece4f61fa1aceb03fd394afcf7a0c85fe2bba3f1bbb3b4c5
5
5
  SHA512:
6
- metadata.gz: bb769f663bb2ba7e2821f6615506a8797f3644e67892d790d93384d26dc9be9edf87e329d48e726726de6324fd0ccf7cd2f2e6615125bb4d4639ec64417f514d
7
- data.tar.gz: c587a33e290f554f2f0c145a4e84e38c077e9c6fed9a9ddcd684c9c87abd8bc6d89dcf9bab7116cc04da52c3bbf47e18433884ff96819b174e5929f6db7fdbf3
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
@@ -1,8 +1,6 @@
1
1
  require 'date'
2
2
  require 'uri'
3
3
 
4
- require 'hashstruct/version'
5
-
6
4
  class HashStruct < Hash
7
5
 
8
6
  def initialize(args={})
@@ -11,22 +9,12 @@ class HashStruct < Hash
11
9
  end
12
10
 
13
11
  def [](key)
14
- key = key.to_sym
15
- if methods.include?(key)
16
- method(key).call
17
- elsif has_key?(key)
18
- fetch(key)
19
- else
20
- nil
21
- end
12
+ key = make_key(key)
13
+ has_key?(key) ? fetch(key) : nil
22
14
  end
23
15
 
24
16
  def []=(key, value)
25
- if methods.include?(:"#{key}=")
26
- method(:"#{key}=").call(convert_object(value))
27
- else
28
- store(key.to_s.to_sym, convert_object(value))
29
- end
17
+ store(make_key(key), convert_object(value))
30
18
  end
31
19
 
32
20
  def method_missing(method_id, *args)
@@ -34,13 +22,17 @@ class HashStruct < Hash
34
22
  if method_name =~ /=$/
35
23
  raise ArgumentError, "wrong number of arguments for method #{method_name.inspect} (#{args.length} for 1)", caller(1) if args.length != 1
36
24
  raise TypeError, "can't modify frozen #{self.class}", caller(1) if self.frozen?
37
- self[method_name.chop.to_sym] = args.first
25
+ self[method_name.chop] = args.first
38
26
  else
39
27
  raise ArgumentError, "wrong number of arguments (#{args.length} for 0)", caller(1) if args.length != 0
40
28
  self[method_id]
41
29
  end
42
30
  end
43
31
 
32
+ def make_key(obj)
33
+ obj.to_s.downcase.to_sym
34
+ end
35
+
44
36
  def convert_object(obj)
45
37
  case obj
46
38
  when String
@@ -64,11 +56,10 @@ class HashStruct < Hash
64
56
  when %r{^(\d+)/(\d+)$}
65
57
  Rational($1.to_i, $2.to_i)
66
58
  # date
67
- when %r{^\d{4}-\d{2}-\d{2}}, # 2010-06-06
68
- %r{^\d{1,2}/\d{1,2}/\d{4}}, # 06/06/2010
69
- %r{^\d{4}/\d{1,2}/\d{1,2}}, # 2010/06/06
70
- %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
71
- 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)
72
63
  # boolean true
73
64
  when 'true', 'yes', 'on'
74
65
  true
@@ -89,4 +80,4 @@ class HashStruct < Hash
89
80
  end
90
81
  end
91
82
 
92
- 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'
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'
4
-
5
- end