Class: DiffJson::Diff
- Inherits:
-
Object
- Object
- DiffJson::Diff
- Includes:
- JsonDiffing, JsonMapping
- Defined in:
- lib/diff_json/diff.rb
Instance Method Summary collapse
- #count(count_type = :all) ⇒ Object
- #diff ⇒ Object
-
#initialize(old_json, new_json, **opts) ⇒ Diff
constructor
A new instance of Diff.
- #json_map(version = :old) ⇒ Object
- #log_message(log_level, message) ⇒ Object
- #paths(version = :joint) ⇒ Object
- #sub_diffs ⇒ Object
Constructor Details
#initialize(old_json, new_json, **opts) ⇒ Diff
Returns a new instance of Diff.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/diff_json/diff.rb', line 29 def initialize(old_json, new_json, **opts) # Set config options @opts = { count_operations: { '/**' => [:add, :replace, :remove, :move, :update] }, ignore_paths: [], path_sort: :sorted, sub_diffs: {}, track_array_moves: true, track_structure_updates: false, replace_primitives_arrays: false, logger: ::Logger.new(STDOUT), log_level: :warn }.merge(opts) # Create map of both JSON objects @old_map = map_json(old_json, '', 0) @new_map = map_json(new_json, '', 0) # Gather the full list of all paths in both JSON objects in a consistent order @all_paths = gather_paths(@old_map.keys, @new_map.keys, @opts[:path_sort] == :sorted) # Generate diff operations list @diff = diff_check(old_json, new_json) # Find difference counts @counts = find_counts(@diff) # Gather sub-diffs @sub_diffs = generate_sub_diffs end |
Instance Method Details
#count(count_type = :all) ⇒ Object
57 58 59 60 61 62 63 64 65 66 |
# File 'lib/diff_json/diff.rb', line 57 def count(count_type = :all) return case count_type when :ignore, :add, :replace, :remove, :move, :update @counts[count_type] || 0 when :total @counts.values.sum else @counts end end |
#diff ⇒ Object
68 69 70 |
# File 'lib/diff_json/diff.rb', line 68 def diff return @diff end |
#json_map(version = :old) ⇒ Object
72 73 74 |
# File 'lib/diff_json/diff.rb', line 72 def json_map(version = :old) return (version == :old ? @old_map : @new_map) end |
#log_message(log_level, message) ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/diff_json/diff.rb', line 91 def (log_level, ) log_levels = [ :debug, :info, :warn, :error ] if (log_levels.index(log_level) || -1) >= (log_levels.index(@opts[:log_level]) || 0) @opts[:logger].method(log_level).call((is_structure?() ? JSON.pretty_generate() : )) end end |
#paths(version = :joint) ⇒ Object
76 77 78 79 80 81 82 83 84 85 |
# File 'lib/diff_json/diff.rb', line 76 def paths(version = :joint) return case version when :old json_map(:old).keys when :new json_map(:new).keys else @all_paths end end |
#sub_diffs ⇒ Object
87 88 89 |
# File 'lib/diff_json/diff.rb', line 87 def sub_diffs return @sub_diffs end |