ofstruct 0.2.1 → 0.3.2

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: 780313bf44865addfa2ecced7a334d937fbecb21a565a2014379f98ba8dae79b
4
- data.tar.gz: d28e8db95c979b26b5a776228f56055371e1ba47f92bda064128bb577ac2adf3
3
+ metadata.gz: d651a8d4353c6ce27531f7da77ae5fc04cc77562779587957b5b79f4c1138ead
4
+ data.tar.gz: c4680069d8296d8117d7f07d1dbcefc6c21db09555d6bf7199a888c8d901b9cb
5
5
  SHA512:
6
- metadata.gz: e7db1fef9e04fe62cc7c7151863477bf1d9a7f400d7ad337783ec17eb1a8f1bf545de2923a2a1a0e769369219268d762b93a14595072a2602cbca538668183d7
7
- data.tar.gz: b7d3a0391dbc35719dff72201e074c1a9d51334933c4f816aad31adc8e3fe91fa7fea840ed17d032eaea40af04bcf6228954465aa74b06d35b12c4c70f7d325b
6
+ metadata.gz: 4c340dc7e9e8485888a4ee55cf7060d27b7b8a97d12acdd886a87ab6c7d1c2dd8e7dd91e5f70536200dd5e89b860e8d1e5c6e6b17780f41f468de20c09937efa
7
+ data.tar.gz: 55a42e5035ff0262ccfb8c8650911b31afdeccc2ed6fb9b4c429e2ca99417945c3f61f122598b29ca06acd002f9abad6e1be40b5f35bc09bd965540608ffe403
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,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class OpenFastStruct
2
4
  def initialize(args = {})
3
5
  @members = {}
@@ -14,24 +16,33 @@ class OpenFastStruct
14
16
 
15
17
  def update(args)
16
18
  ensure_hash!(args)
17
- args.each { |k, v| assign(k, v) }
19
+ args.each { |key, value| assign(key, value) }
18
20
  end
19
21
 
20
22
  def to_h
21
- @members.merge(@members) { |_, v| v.is_a?(self.class) ? v.to_h : v }
23
+ @members.merge(@members) do |_, value|
24
+ case value
25
+ when Array
26
+ value.map(&:to_h)
27
+ when self.class
28
+ value.to_h
29
+ else
30
+ value
31
+ end
32
+ end
22
33
  end
23
34
 
24
35
  def inspect
25
- "#<#{self.class}" + @members.map { |k, v| " :#{k}=#{v.inspect}" }.join + ">"
36
+ "#<#{self.class}#{@members.map { |key, value| " :#{key}=#{value.inspect}" }.join}>"
26
37
  end
27
- alias :to_s :inspect
38
+ alias to_s inspect
28
39
 
29
40
  def to_ary
30
41
  nil
31
42
  end
32
43
 
33
44
  def ==(other)
34
- other.is_a?(self.class) && self.to_h == other.to_h
45
+ other.is_a?(self.class) && to_h == other.to_h
35
46
  end
36
47
 
37
48
  private
@@ -51,6 +62,17 @@ class OpenFastStruct
51
62
  end
52
63
 
53
64
  def assign(key, value)
54
- @members[key.to_sym] = value
65
+ @members[key.to_sym] = process(value)
66
+ end
67
+
68
+ def process(data)
69
+ case data
70
+ when Hash
71
+ self.class.new(data)
72
+ when Array
73
+ data.map { |element| process(element) }
74
+ else
75
+ data
76
+ end
55
77
  end
56
78
  end
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.1
4
+ version: 0.3.2
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: 2019-03-28 00:00:00.000000000 Z
11
+ date: 2023-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: benchmark-ips
@@ -16,56 +16,98 @@ 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: '12.3'
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: '12.3'
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
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.44'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.44'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.6'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.6'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop-rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2.18'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2.18'
69
111
  description: OpenFastStruct is a data structure, similar to an OpenStruct but faster.
70
112
  email: arturo.herrero@gmail.com
71
113
  executables: []
@@ -75,13 +117,12 @@ files:
75
117
  - LICENSE
76
118
  - README.md
77
119
  - lib/ofstruct.rb
78
- - spec/lib/ofstruct_spec.rb
79
- - spec/spec_helper.rb
80
120
  homepage: https://github.com/arturoherrero/ofstruct
81
121
  licenses:
82
122
  - MIT
83
- metadata: {}
84
- post_install_message:
123
+ metadata:
124
+ rubygems_mfa_required: 'true'
125
+ post_install_message:
85
126
  rdoc_options: []
86
127
  require_paths:
87
128
  - lib
@@ -89,17 +130,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
89
130
  requirements:
90
131
  - - ">="
91
132
  - !ruby/object:Gem::Version
92
- version: 2.0.0
133
+ version: '3.0'
93
134
  required_rubygems_version: !ruby/object:Gem::Requirement
94
135
  requirements:
95
136
  - - ">="
96
137
  - !ruby/object:Gem::Version
97
138
  version: '0'
98
139
  requirements: []
99
- rubygems_version: 3.0.3
100
- signing_key:
140
+ rubygems_version: 3.4.1
141
+ signing_key:
101
142
  specification_version: 4
102
143
  summary: OpenFastStruct
103
- test_files:
104
- - spec/spec_helper.rb
105
- - spec/lib/ofstruct_spec.rb
144
+ test_files: []
@@ -1,142 +0,0 @@
1
- require "ofstruct"
2
-
3
- RSpec.describe OpenFastStruct do
4
- subject(:ofstruct) { described_class.new }
5
-
6
- it "can be instantiated with no arguments" do
7
- expect(ofstruct).to be_a(described_class)
8
- end
9
-
10
- it "works accessor" do
11
- ofstruct.name = "John"
12
- expect(ofstruct.name).to eq("John")
13
- end
14
-
15
- it "works recursive accessor" do
16
- ofstruct.user.name = "John"
17
- expect(ofstruct.user.name).to eq("John")
18
- end
19
-
20
- it "works with unexisting values" do
21
- expect(ofstruct.name).to be_a(described_class)
22
- end
23
-
24
- it "equals to other with same attributes" do
25
- ofstruct.user.name = "John"
26
- other_ofstruct = described_class.new
27
- other_ofstruct.user.name = "John"
28
- expect(ofstruct).to eq(other_ofstruct)
29
- end
30
-
31
- context "instantiated from arguments" do
32
- subject(:ofstruct) { described_class.new(args) }
33
-
34
- context "without Hash" do
35
- let(:args) { double }
36
-
37
- it "raises an exception" do
38
- expect { ofstruct }.to raise_error(ArgumentError)
39
- end
40
- end
41
-
42
- context "with Hash" do
43
- let(:symbol_args) { Hash[:name => "John"] }
44
- let(:string_args) { Hash["name" => "John"] }
45
-
46
- context "with Symbol keys" do
47
- let(:args) { symbol_args }
48
-
49
- it "works with reader" do
50
- expect(ofstruct.name).to eq("John")
51
- end
52
-
53
- it "works accessor" do
54
- ofstruct.name = "John Smith"
55
- expect(ofstruct.name).to eq("John Smith")
56
- end
57
-
58
- describe "#delete_field" do
59
- it "removes the named key" do
60
- ofstruct.delete_field(:name)
61
- expect(ofstruct.name).to be_a(described_class)
62
- end
63
- end
64
-
65
- describe "#each_pair" do
66
- it "yields all keys with the values" do
67
- expect(ofstruct.each_pair.to_a).to eq([[:name, "John"]])
68
- end
69
-
70
- it "returns an enumerator" do
71
- expect(ofstruct.each_pair).to be_a(Enumerator)
72
- end
73
- end
74
-
75
- describe "#update" do
76
- it "overwrite previous keys" do
77
- ofstruct.update(:name => "John Smith")
78
- expect(ofstruct.name).to eq("John Smith")
79
- end
80
-
81
- it "adds new keys" do
82
- ofstruct.update(:surname => "Smith")
83
- expect(ofstruct.name).to eq("John")
84
- expect(ofstruct.surname).to eq("Smith")
85
- end
86
-
87
- context "without Hash" do
88
- it "raises an exception" do
89
- expect { ofstruct.update(double) }.to raise_error(ArgumentError)
90
- end
91
- end
92
- end
93
-
94
- describe "#to_h" do
95
- it "converts to a hash" do
96
- expect(ofstruct.to_h).to eq(args)
97
- end
98
-
99
- it "converts to a hash with chained attributes" do
100
- ofstruct.address.street = "Sunset Boulevar"
101
- ofstruct.address.number = 4
102
- expect(ofstruct.to_h).to eq(
103
- {
104
- :name => "John",
105
- :address => {
106
- :street => "Sunset Boulevar",
107
- :number => 4,
108
- }
109
- }
110
- )
111
- end
112
- end
113
-
114
- describe "#inspect" do
115
- it "returns the human-readable representation" do
116
- expect(ofstruct.inspect).to eq('#<OpenFastStruct :name="John">')
117
- end
118
- end
119
- end
120
-
121
- context "with String keys" do
122
- let(:args) { string_args }
123
-
124
- it "works with reader" do
125
- expect(ofstruct.name).to eq("John")
126
- end
127
-
128
- describe "#to_h" do
129
- it "converts to a hash with keys as symbols" do
130
- expect(ofstruct.to_h).to eq(symbol_args)
131
- end
132
- end
133
-
134
- describe "#inspect" do
135
- it "returns the human-readable representation" do
136
- expect(ofstruct.inspect).to eq('#<OpenFastStruct :name="John">')
137
- end
138
- end
139
- end
140
- end
141
- end
142
- end
data/spec/spec_helper.rb DELETED
@@ -1,18 +0,0 @@
1
- RSpec.configure do |config|
2
- config.expect_with :rspec do |expectations|
3
- expectations.include_chain_clauses_in_custom_matcher_descriptions = true
4
- end
5
-
6
- config.mock_with :rspec do |mocks|
7
- mocks.verify_partial_doubles = true
8
- end
9
-
10
- config.disable_monkey_patching!
11
-
12
- if config.files_to_run.one?
13
- config.default_formatter = 'doc'
14
- end
15
-
16
- config.order = :random
17
- Kernel.srand config.seed
18
- end