hashematics 1.0.0 → 1.1.0

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: 5007851850b8910d16671bd8c72ed343c257f64e389e177fe1eaa50a98b118a7
4
- data.tar.gz: d3104c63ea0b0e641996c35f363dc8aaf53816ba0824fdfc40a248689124b9d9
3
+ metadata.gz: c22870141347d2318224a31bac79c1496d5e8dcc936c67a625fbbe7b1a9b539e
4
+ data.tar.gz: 867a235327143ab4cbc5aa12eb3abcc68163c5e626ffbfb3ff56d65370e5c2dd
5
5
  SHA512:
6
- metadata.gz: 7a5309d785c85d5a0899854f462bfa8d6eebc3802317dedbe58b48f4d9d91b6b64b39583e4389082b9c4d0355130afb7cb359060e2849c29e5d180b0f6ce8d95
7
- data.tar.gz: 7eac28ed9ffee6374cbc08585f6d3e985c3d9f0f393b7b0c6993c631282047f16dc718d27b2dd1d1fbd7f789d13b8dd0558e881f77b298a7ecda7906c7f4bbac
6
+ metadata.gz: 1578d7ab5cb7c1a9b1bc1a6eb79a7d5561f321eb0d0a419fd36f3c943d339e543a2bf2c84fbf922e436a22c50cd8089ac766e70828f053b1e029f475682027e0
7
+ data.tar.gz: 58b4cf29fed3b1ee52eabb8d49f5c23967ec605f5e7b984bd893f1678151c0cd720147227536c7e37d4aa4af1fef2523e12d67bd8ee4c206d2a40c24d6a79907
@@ -1,3 +1,7 @@
1
+ # 1.1.0 (May 7th, 2019)
2
+
3
+ * Replaced internal object value resolution with Objectable library.
4
+
1
5
  # 1.0.0 (March 27th, 2019)
2
6
 
3
7
  Initial Release
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hashematics (1.0.0)
4
+ hashematics (1.1.0)
5
+ objectable (~> 1)
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
@@ -10,6 +11,7 @@ GEM
10
11
  afm (0.2.2)
11
12
  ansi (1.5.0)
12
13
  ast (2.4.0)
14
+ byebug (11.0.1)
13
15
  coderay (1.1.2)
14
16
  concurrent-ruby (1.1.5)
15
17
  diff-lcs (1.3)
@@ -48,6 +50,7 @@ GEM
48
50
  notiffany (0.1.1)
49
51
  nenv (~> 0.1)
50
52
  shellany (~> 0.0)
53
+ objectable (1.0.0)
51
54
  parallel (1.13.0)
52
55
  parser (2.6.0.0)
53
56
  ast (~> 2.4.0)
@@ -63,7 +66,11 @@ GEM
63
66
  pry (0.12.2)
64
67
  coderay (~> 1.1.0)
65
68
  method_source (~> 0.9.0)
69
+ pry-byebug (3.7.0)
70
+ byebug (~> 11.0)
71
+ pry (~> 0.10)
66
72
  rainbow (3.0.0)
73
+ rake (10.5.0)
67
74
  rb-fsevent (0.10.3)
68
75
  rb-inotify (0.9.10)
69
76
  ffi (>= 0.5.0, < 2)
@@ -114,6 +121,8 @@ DEPENDENCIES
114
121
  hashematics!
115
122
  pdf-inspector (~> 1)
116
123
  pry (~> 0)
124
+ pry-byebug (~> 3)
125
+ rake (~> 10.0)
117
126
  rspec (~> 3.8)
118
127
  rubocop (~> 0.63.1)
119
128
  simplecov (~> 0.16.1)
data/Guardfile CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- guard :rspec, cmd: 'bundle exec rspec' do
3
+ guard :rspec, cmd: 'DISABLE_SIMPLECOV=true bundle exec rspec --format=documentation' do
4
4
  require 'guard/rspec/dsl'
5
5
  dsl = Guard::RSpec::Dsl.new(self)
6
6
 
data/README.md CHANGED
@@ -383,11 +383,13 @@ The `objects` variable should now look like:
383
383
 
384
384
  Records with blank ID's are ignored by default. This is due to the flat nature of the incoming data. Take the following example:
385
385
 
386
- ID # | First Name | Last Name | Costume ID # | Costume Name | Costume Color
387
- ---- | ---------- | --------- | ------------ | ------------ | -------------
388
- 1 | Bruce | Banner | 3 | Basic Hulk | Green
389
- 2 | Tony | Stark | | |
390
- | | | 4 | Undercover | Purple
386
+ ID # | First Name | Last Name | Costume ID # | Costume Name | Costume Color
387
+ ------ | ---------- | --------- | ------------ | ------------ | -------------
388
+ 1 | Bruce | Banner | 3 | Basic Hulk | Green
389
+ 2 | Tony | Stark | *null* | *null* | *null*
390
+ *null* | *null* | *null* | 4 | Undercover | Purple
391
+
392
+ *Note: null is shown for blank values so the markdown renders properly.*
391
393
 
392
394
  This is interpreted as:
393
395
 
@@ -650,10 +652,7 @@ After code changes have successfully gone through the Pull Request review proces
650
652
  3. Install dependencies: ```bundle```
651
653
  4. Update ```CHANGELOG.md``` with release notes
652
654
  5. Commit & push master to remote and ensure CI builds master successfully
653
- 6. Build the project locally: `gem build hashematics`
654
- 7. Publish package to RubyGems: `gem push hashematics-X.gem` where X is the version to push
655
- 8. Tag master with new version: `git tag <version>`
656
- 9. Push tags remotely: `git push origin --tags`
655
+ 6. Run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
657
656
 
658
657
  ## License
659
658
 
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task default: :spec
@@ -21,10 +21,14 @@ Gem::Specification.new do |s|
21
21
 
22
22
  s.required_ruby_version = '>= 2.3.8'
23
23
 
24
+ s.add_dependency('objectable', '~>1')
25
+
24
26
  s.add_development_dependency('faker', '~>1')
25
27
  s.add_development_dependency('guard-rspec', '~>4.7')
26
28
  s.add_development_dependency('pdf-inspector', '~>1')
27
29
  s.add_development_dependency('pry', '~>0')
30
+ s.add_development_dependency('pry-byebug', '~> 3')
31
+ s.add_development_dependency 'rake', '~> 10.0'
28
32
  s.add_development_dependency('rspec', '~> 3.8')
29
33
  s.add_development_dependency('rubocop', '~>0.63.1')
30
34
  s.add_development_dependency('simplecov', '~>0.16.1')
@@ -7,4 +7,31 @@
7
7
  # LICENSE file in the root directory of this source tree.
8
8
  #
9
9
 
10
- require_relative 'hashematics/hashematics'
10
+ require 'digest'
11
+ require 'forwardable'
12
+ require 'objectable'
13
+ require 'ostruct'
14
+
15
+ require_relative 'hashematics/category'
16
+ require_relative 'hashematics/configuration'
17
+ require_relative 'hashematics/dictionary'
18
+ require_relative 'hashematics/graph'
19
+ require_relative 'hashematics/group'
20
+ require_relative 'hashematics/key'
21
+ require_relative 'hashematics/id'
22
+ require_relative 'hashematics/object_interface'
23
+ require_relative 'hashematics/record'
24
+ require_relative 'hashematics/record_set'
25
+ require_relative 'hashematics/type'
26
+ require_relative 'hashematics/visitor'
27
+
28
+ # Top-level API syntactic sugar that holds the common library use(s).
29
+ module Hashematics
30
+ class << self
31
+ def graph(config: {}, rows: [])
32
+ groups = Configuration.new(config).groups
33
+
34
+ Graph.new(groups).add(rows)
35
+ end
36
+ end
37
+ end
@@ -14,21 +14,13 @@ module Hashematics
14
14
  class ObjectInterface
15
15
  class << self
16
16
  def get(object, key)
17
- if object.is_a?(Hash)
18
- indifferent_hash_get(object, key)
19
- elsif object.respond_to?(key)
20
- object.send(key)
21
- end
17
+ resolver.get(object, key)
22
18
  end
23
19
 
24
20
  private
25
21
 
26
- def indifferent_hash_get(hash, key)
27
- if hash.key?(key.to_s)
28
- hash[key.to_s]
29
- elsif hash.key?(key.to_s.to_sym)
30
- hash[key.to_s.to_sym]
31
- end
22
+ def resolver
23
+ @resolver ||= Objectable.resolver(separator: nil)
32
24
  end
33
25
  end
34
26
  end
@@ -8,5 +8,5 @@
8
8
  #
9
9
 
10
10
  module Hashematics
11
- VERSION = '1.0.0'
11
+ VERSION = '1.1.0'
12
12
  end
@@ -7,13 +7,19 @@
7
7
  # LICENSE file in the root directory of this source tree.
8
8
  #
9
9
 
10
- require 'pry'
11
10
  require 'csv'
11
+ require 'pry'
12
+ require 'pry-byebug'
12
13
 
13
- require 'simplecov'
14
- require 'simplecov-console'
15
- SimpleCov.formatter = SimpleCov::Formatter::Console
16
- SimpleCov.start
14
+ unless ENV['DISABLE_SIMPLECOV'] == 'true'
15
+ require 'simplecov'
16
+ require 'simplecov-console'
17
+
18
+ SimpleCov.formatter = SimpleCov::Formatter::Console
19
+ SimpleCov.start do
20
+ add_filter %r{\A/spec/}
21
+ end
22
+ end
17
23
 
18
24
  require './lib/hashematics'
19
25
 
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hashematics
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Ruggio
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-01 00:00:00.000000000 Z
11
+ date: 2019-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: objectable
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: faker
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +80,34 @@ dependencies:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry-byebug
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '10.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '10.0'
69
111
  - !ruby/object:Gem::Dependency
70
112
  name: rspec
71
113
  requirement: !ruby/object:Gem::Requirement
@@ -143,6 +185,7 @@ files:
143
185
  - Guardfile
144
186
  - LICENSE
145
187
  - README.md
188
+ - Rakefile
146
189
  - bin/benchmark
147
190
  - bin/console
148
191
  - hashematics.gemspec
@@ -152,7 +195,6 @@ files:
152
195
  - lib/hashematics/dictionary.rb
153
196
  - lib/hashematics/graph.rb
154
197
  - lib/hashematics/group.rb
155
- - lib/hashematics/hashematics.rb
156
198
  - lib/hashematics/id.rb
157
199
  - lib/hashematics/key.rb
158
200
  - lib/hashematics/object_interface.rb
@@ -168,7 +210,6 @@ files:
168
210
  - spec/hashematics/category_spec.rb
169
211
  - spec/hashematics/graph_spec.rb
170
212
  - spec/hashematics/key_spec.rb
171
- - spec/hashematics/object_interface_spec.rb
172
213
  - spec/hashematics/record_set_spec.rb
173
214
  - spec/hashematics/record_spec.rb
174
215
  - spec/hashematics/type_spec.rb
@@ -204,7 +245,6 @@ test_files:
204
245
  - spec/hashematics/category_spec.rb
205
246
  - spec/hashematics/graph_spec.rb
206
247
  - spec/hashematics/key_spec.rb
207
- - spec/hashematics/object_interface_spec.rb
208
248
  - spec/hashematics/record_set_spec.rb
209
249
  - spec/hashematics/record_spec.rb
210
250
  - spec/hashematics/type_spec.rb
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- #
4
- # Copyright (c) 2019-present, Blue Marble Payroll, LLC
5
- #
6
- # This source code is licensed under the MIT license found in the
7
- # LICENSE file in the root directory of this source tree.
8
- #
9
-
10
- require 'digest'
11
- require 'forwardable'
12
- require 'ostruct'
13
-
14
- require_relative 'category'
15
- require_relative 'configuration'
16
- require_relative 'dictionary'
17
- require_relative 'graph'
18
- require_relative 'group'
19
- require_relative 'key'
20
- require_relative 'id'
21
- require_relative 'object_interface'
22
- require_relative 'record'
23
- require_relative 'record_set'
24
- require_relative 'type'
25
- require_relative 'visitor'
26
-
27
- # Top-level API syntactic sugar that holds the common library use(s).
28
- module Hashematics
29
- class << self
30
- def graph(config: {}, rows: [])
31
- groups = ::Hashematics::Configuration.new(config).groups
32
-
33
- ::Hashematics::Graph.new(groups).add(rows)
34
- end
35
- end
36
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- #
4
- # Copyright (c) 2019-present, Blue Marble Payroll, LLC
5
- #
6
- # This source code is licensed under the MIT license found in the
7
- # LICENSE file in the root directory of this source tree.
8
- #
9
-
10
- require 'spec_helper'
11
- require 'examples/person'
12
-
13
- describe ::Hashematics::ObjectInterface do
14
- let(:input) do
15
- {
16
- id: 1,
17
- 'first' => 'Matt'
18
- }
19
- end
20
-
21
- let(:person) { Person.new(input) }
22
-
23
- it 'should read hash indifferently' do
24
- expect(described_class.get(input, :id)).to eq(input[:id])
25
- expect(described_class.get(input, 'id')).to eq(input[:id])
26
- expect(described_class.get(input, :first)).to eq(input['first'])
27
- expect(described_class.get(input, 'first')).to eq(input['first'])
28
-
29
- expect(described_class.get(person, 'doesnt_exist')).to eq(nil)
30
- expect(described_class.get(person, :doesnt_exist)).to eq(nil)
31
- end
32
-
33
- it 'should read object if object is responsive' do
34
- expect(described_class.get(person, :id)).to eq(input[:id])
35
- expect(described_class.get(person, 'id')).to eq(input[:id])
36
- expect(described_class.get(person, :first)).to eq(input['first'])
37
- expect(described_class.get(person, 'first')).to eq(input['first'])
38
-
39
- expect(described_class.get(person, 'doesnt_exist')).to eq(nil)
40
- expect(described_class.get(person, :doesnt_exist)).to eq(nil)
41
- end
42
- end