hashematics 1.0.0 → 1.1.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
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