revocare 0.1.0 → 0.1.1

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: f2b42e4bf37a6ecf4e245bc0dabdf675a9ea7237d27d1c810c048b47f65c56c7
4
- data.tar.gz: 2b4a998e3b47c0df9219a506e2345b592ff5e2c863dc9ce6183c159437c832b5
3
+ metadata.gz: 8f929fa681bc6b0ada88fd4ff25836596e9994e1559b14bfc5c4f529a6beff99
4
+ data.tar.gz: ae32cfc85a2bdca4d5dd23eb21dbc4184cbdf2fe1e5c9ae459695c33cd3e99fb
5
5
  SHA512:
6
- metadata.gz: 97bf8e3a739e1502efe39bb2b241b520f2c86055bebe9dd494aa86ce942dd31d9d119c5fe31e83670b22c95228349704f71385566bcb82aa83436aeea909f110
7
- data.tar.gz: f7c6efa686dc23c788ab015ef47d8b07d38b860de55cb93f78cc6a9f1a9954ff8e223d603421d30f7d55f6f266d6d7865461255fdc60d604d0a5f2fc09c31a27
6
+ metadata.gz: 5678ed93ba7a0e5f691f0bf2d0cce4f7c68733a9d8ed13e569dce1b314ea70c5426da08fca50ddb3fc5d77e76d641e8ea8cdfe7cc2d07f350950c3f39e4cf72b
7
+ data.tar.gz: bc95dbf169d33c8de843ab0585a58630694cf2fa1d796041cd44c895dbe506e3cb76d6b1a1db4530122c6474dccf938e81ce2fce51ff871478e27b42fa1f2dda
data/CHANGELOG.md CHANGED
@@ -1,4 +1,10 @@
1
1
  # `revocare`
2
2
 
3
+ ## [0.1.1]
4
+ - Make each callback name and chain node unique as to not share nodes between models
5
+ - Properly order callback methods in which they will be executed
6
+ - Add sort order, instance method identifier, and symbol notation to diagram labels for better readability
7
+ - Show validation type and attributes instead of stringified class name
8
+
3
9
  ## [0.1.0]
4
10
  - Initial release
data/Gemfile.lock CHANGED
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- revocare (0.1.0)
5
- activerecord (>= 5.2.0, < 7.1)
4
+ revocare (0.1.1)
5
+ activerecord (>= 5.2, < 7.1)
6
+ activesupport (>= 5.2, < 7.1)
6
7
  ruby-graphviz (~> 1.2)
7
8
 
8
9
  GEM
@@ -46,11 +46,12 @@ module Revocare
46
46
  model.__callbacks.each do |_key, callback_chain|
47
47
  callback_chain.each do |callback|
48
48
  type = [callback.kind, callback.name].join("_")
49
+ methods = extract_methods(callback.filter)
49
50
  callbacks_acc[type] ||= []
50
- callbacks_acc[type] << callback.filter.to_s
51
+ callbacks_acc[type] += methods
51
52
  end
52
53
  end
53
- end
54
+ end.transform_values(&:reverse)
54
55
  end
55
56
 
56
57
  def format_callbacks(callbacks)
@@ -61,5 +62,16 @@ module Revocare
61
62
  }
62
63
  end
63
64
  end
65
+
66
+ def extract_methods(callback_filter)
67
+ if callback_filter.is_a?(ActiveModel::Validator)
68
+ name = callback_filter.class.name.demodulize.underscore
69
+ callback_filter.attributes.map do |attr|
70
+ [name, attr].join(":")
71
+ end
72
+ else
73
+ [callback_filter.to_s]
74
+ end
75
+ end
64
76
  end
65
77
  end
@@ -10,6 +10,7 @@ module Revocare
10
10
  DEFAULT_FILENAME = "callbacks.pdf"
11
11
 
12
12
  def initialize(data:, format: DEFAULT_FORMAT)
13
+ @graph = GraphViz.new(:G, type: :digraph)
13
14
  @data = data
14
15
  @format = format
15
16
  validate_format!
@@ -31,14 +32,16 @@ module Revocare
31
32
  extension = File.extname(filename).tr(".", "").to_sym
32
33
 
33
34
  if format == GRAPHVIZ_FORMAT
34
- graph = GraphViz.new(:G, type: :digraph)
35
+ data.each_with_index do |model_data, index|
36
+ model_node = add_model_node(model_data[:model])
37
+ model_data[:callbacks].each do |callback|
38
+ name, chain = callback.values_at(:callback_name, :callback_chain)
39
+ name_node = add_callback_node(name, index)
40
+ method_nodes = chain.each_with_index.map do |method, order|
41
+ add_callback_chain_node(method, index, order)
42
+ end
35
43
 
36
- data.each do |model_data|
37
- model_node = graph.add_node(model_data[:model])
38
- model_data[:callbacks].each do |c|
39
- name_node = graph.add_node(c[:callback_name])
40
44
  graph.add_edge(model_node, name_node)
41
- method_nodes = c[:callback_chain].map(&graph.method(:add_node))
42
45
  graph.add_edges(name_node, method_nodes)
43
46
  end
44
47
  end
@@ -49,12 +52,29 @@ module Revocare
49
52
 
50
53
  private
51
54
 
52
- attr_reader :data
55
+ attr_reader :data, :graph
53
56
 
54
57
  def validate_format!
55
58
  if !SUPPORTED_FORMATS.include?(@format)
56
59
  raise ArgumentError, "Data format is not supported"
57
60
  end
58
61
  end
62
+
63
+ def add_model_node(name)
64
+ add_node(name, nil, :box)
65
+ end
66
+
67
+ def add_callback_node(name, index)
68
+ add_node(":#{name}", index, :diamond)
69
+ end
70
+
71
+ def add_callback_chain_node(name, index, order)
72
+ label = "#{order + 1}) ##{name}"
73
+ add_node(name, index, :ellipse, label)
74
+ end
75
+
76
+ def add_node(name, index, shape, label = nil)
77
+ graph.add_node("#{name}#{index}", label: label || name, shape: shape)
78
+ end
59
79
  end
60
80
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Revocare
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
data/lib/revocare.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "active_support"
3
4
  require "ruby-graphviz"
4
5
 
5
6
  require_relative "revocare/callback_data"
data/revocare.gemspec CHANGED
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.require_paths = ["lib"]
29
29
 
30
30
  spec.add_runtime_dependency "activerecord", ">= 5.2", "< 7.1"
31
+ spec.add_runtime_dependency "activesupport", ">= 5.2", "< 7.1"
31
32
  spec.add_runtime_dependency "ruby-graphviz", "~> 1.2"
32
33
 
33
34
  spec.add_development_dependency "activerecord"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: revocare
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler Ewing
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-01-16 00:00:00.000000000 Z
11
+ date: 2023-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -30,6 +30,26 @@ dependencies:
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '7.1'
33
+ - !ruby/object:Gem::Dependency
34
+ name: activesupport
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '5.2'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '7.1'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '5.2'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '7.1'
33
53
  - !ruby/object:Gem::Dependency
34
54
  name: ruby-graphviz
35
55
  requirement: !ruby/object:Gem::Requirement