ofstruct 0.2.0 → 0.3.0

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: cc0d0332d4b8b6ce6adc7df06f8d9aaf63c463bf
4
- data.tar.gz: 67e0a85b29683cef3e2e495f71a37e05b05defb2
2
+ SHA256:
3
+ metadata.gz: 532001ebb13a0232881e6b2a97c742f761df39e5a9ce99a7bb74da2c9300f400
4
+ data.tar.gz: 687b0b422e10f97696d6d0091d761afd94e5a81ec38932f5ce7b80fe7f22fece
5
5
  SHA512:
6
- metadata.gz: f2d567ec0621b81122b5924b8a49b9c9111a497a1d6fe53740f75e55ed46c008fc4952bad472ad16e7688fb37ada5b1871ed3eb765b25a4aff778a40e28d4444
7
- data.tar.gz: 11f6e81aec9ff93a8f7da30942df17392204a3f3a9fc249946eda3465e8b1935b1e2ae902b62a3a97fcc276f0124a337ef3711b96c6bcfee008e71cfa6a0b88e
6
+ metadata.gz: 2590e8f5c16a4f20e6ecc3a872f87e4c2822f4662e26d09f5a9998b6952627fb0267b40257b35fd858f80855937c293e21a9ea320cbd340ca59e173b82632de0
7
+ data.tar.gz: 35d64b5a9b08aa459c9d0b00317f53f1c7211eda342bdfcc8c0ca2378cc64d279f716cfb02089454df77b25ff16f2fc0b205fb603d68ccb8e60f2eea0bf1bf58
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # OpenFastStruct
2
2
 
3
3
  [![Code Climate](https://codeclimate.com/github/arturoherrero/ofstruct/badges/gpa.svg)](https://codeclimate.com/github/arturoherrero/ofstruct)
4
- [![Build Status](https://travis-ci.org/arturoherrero/ofstruct.svg)](https://travis-ci.org/arturoherrero/ofstruct)
4
+ [![Build Status](https://github.com/arturoherrero/ofstruct/workflows/Build/badge.svg?branch=master)](https://github.com/arturoherrero/ofstruct/actions)
5
5
 
6
6
  OpenStruct allows the creation of data objects with arbitrary attributes.
7
7
 
data/lib/ofstruct.rb CHANGED
@@ -1,11 +1,11 @@
1
1
  class OpenFastStruct
2
2
  def initialize(args = {})
3
3
  @members = {}
4
- assign(args)
4
+ update(args)
5
5
  end
6
6
 
7
7
  def delete_field(key)
8
- @members[key.to_sym] = self.class.new
8
+ assign(key, self.class.new)
9
9
  end
10
10
 
11
11
  def each_pair
@@ -13,17 +13,16 @@ class OpenFastStruct
13
13
  end
14
14
 
15
15
  def update(args)
16
- assign(args)
16
+ ensure_hash!(args)
17
+ args.each { |k, v| assign(k, v) }
17
18
  end
18
19
 
19
20
  def to_h
20
- @members.inject({}) do |result, (k, v)|
21
- result.tap { |result| result[k] = v.is_a?(self.class) ? v.to_h : v }
22
- end
21
+ @members.merge(@members) { |_, v| v.is_a?(self.class) ? v.to_h : v }
23
22
  end
24
23
 
25
24
  def inspect
26
- @members.each_with_object("#<#{self.class}") { |(k,v), output| output << " :#{k}=#{v.inspect}" } << ">"
25
+ "#<#{self.class}" + @members.map { |k, v| " :#{k}=#{v.inspect}" }.join + ">"
27
26
  end
28
27
  alias :to_s :inspect
29
28
 
@@ -32,28 +31,30 @@ class OpenFastStruct
32
31
  end
33
32
 
34
33
  def ==(other)
35
- return false unless other.is_a?(self.class)
36
- self.to_h == other.to_h
34
+ other.is_a?(self.class) && self.to_h == other.to_h
37
35
  end
38
36
 
39
37
  private
40
38
 
39
+ def ensure_hash!(args)
40
+ raise ArgumentError unless args.is_a?(Hash)
41
+ end
42
+
41
43
  def method_missing(name, *args)
42
44
  @members.fetch(name) do
43
45
  if name[-1] == "="
44
- @members[name[0..-2].to_sym] = args.first
46
+ assign(name[0..-2], args.first)
45
47
  else
46
- @members[name.to_sym] = self.class.new
48
+ delete_field(name)
47
49
  end
48
50
  end
49
51
  end
50
52
 
51
- def assign(args)
52
- ensure_hash(args)
53
- args.each { |k,v| @members[k.to_sym] = v }
54
- end
55
-
56
- def ensure_hash(args)
57
- raise ArgumentError unless args.is_a?(Hash)
53
+ def assign(key, value)
54
+ if value.is_a?(Hash)
55
+ @members[key.to_sym] = self.class.new(value)
56
+ else
57
+ @members[key.to_sym] = value
58
+ end
58
59
  end
59
60
  end
@@ -31,7 +31,7 @@ RSpec.describe OpenFastStruct do
31
31
  context "instantiated from arguments" do
32
32
  subject(:ofstruct) { described_class.new(args) }
33
33
 
34
- context "without Hash" do
34
+ context "without hash" do
35
35
  let(:args) { double }
36
36
 
37
37
  it "raises an exception" do
@@ -39,11 +39,20 @@ RSpec.describe OpenFastStruct do
39
39
  end
40
40
  end
41
41
 
42
- context "with Hash" do
43
- let(:symbol_args) { Hash[:name => "John"] }
44
- let(:string_args) { Hash["name" => "John"] }
42
+ context "with hash" do
43
+ let(:symbol_args) { { :name => "John" } }
44
+ let(:string_args) { { "name" => "John" } }
45
+ let(:nested_args) { { person: { name: "John" } } }
45
46
 
46
- context "with Symbol keys" do
47
+ context "with a nested hash" do
48
+ let(:args) { nested_args }
49
+
50
+ it "works with reader" do
51
+ expect(ofstruct.person.name).to eq("John")
52
+ end
53
+ end
54
+
55
+ context "with symbol keys" do
47
56
  let(:args) { symbol_args }
48
57
 
49
58
  it "works with reader" do
@@ -84,7 +93,7 @@ RSpec.describe OpenFastStruct do
84
93
  expect(ofstruct.surname).to eq("Smith")
85
94
  end
86
95
 
87
- context "without Hash" do
96
+ context "without hash" do
88
97
  it "raises an exception" do
89
98
  expect { ofstruct.update(double) }.to raise_error(ArgumentError)
90
99
  end
@@ -118,7 +127,7 @@ RSpec.describe OpenFastStruct do
118
127
  end
119
128
  end
120
129
 
121
- context "with String keys" do
130
+ context "with string keys" do
122
131
  let(:args) { string_args }
123
132
 
124
133
  it "works with reader" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ofstruct
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arturo Herrero
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-28 00:00:00.000000000 Z
11
+ date: 2023-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: benchmark-ips
@@ -16,56 +16,56 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.1'
19
+ version: '2.10'
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: '2.1'
26
+ version: '2.10'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: guard-rspec
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '4.5'
33
+ version: '4.7'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '4.5'
40
+ version: '4.7'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '10.4'
47
+ version: '13.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '10.4'
54
+ version: '13.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '3.2'
61
+ version: '3.12'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '3.2'
68
+ version: '3.12'
69
69
  description: OpenFastStruct is a data structure, similar to an OpenStruct but faster.
70
70
  email: arturo.herrero@gmail.com
71
71
  executables: []
@@ -81,7 +81,7 @@ homepage: https://github.com/arturoherrero/ofstruct
81
81
  licenses:
82
82
  - MIT
83
83
  metadata: {}
84
- post_install_message:
84
+ post_install_message:
85
85
  rdoc_options: []
86
86
  require_paths:
87
87
  - lib
@@ -96,9 +96,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
98
  requirements: []
99
- rubyforge_project:
100
- rubygems_version: 2.4.5
101
- signing_key:
99
+ rubygems_version: 3.4.1
100
+ signing_key:
102
101
  specification_version: 4
103
102
  summary: OpenFastStruct
104
103
  test_files: