merge-patch 0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 82b6cbedb0526f170f7904df6d8a5013ae210510feef93c8041df7ab258ca05f
4
+ data.tar.gz: 48ca8913ab0e8dac957174fa5a179403ec1aca30d9702cfcf3feb86b9f9e6025
5
+ SHA512:
6
+ metadata.gz: f9434146724d669b7496e20731a369519b92b15ec1980db4e79f29ccd62206ddf9142388f52ef14f060fc0db58d4014a1b27588bdc0e5854d3dfadb7de735072
7
+ data.tar.gz: be427196cc565a4d0bcf4b0fb67f909267761f32e4eb397a9710bc3fb013aa25bb2486253e79a065eceff043960b6b62d66d75ab09e73666cecc5ce5701e6535
data/bin/merge-patch ADDED
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative '../lib/merge-patch'
3
+ require 'json'
4
+
5
+ Encoding.default_external = Encoding::UTF_8
6
+ require 'optparse'
7
+ require 'ostruct'
8
+
9
+ $options = OpenStruct.new
10
+ begin
11
+ op = OptionParser.new do |opts|
12
+ opts.banner = "Usage: merge-patch orig patch"
13
+
14
+ opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
15
+ $options.verbose = v
16
+ end
17
+ end
18
+ op.parse!
19
+ rescue Exception => e
20
+ warn e
21
+ exit 1
22
+ end
23
+
24
+ if ARGV.size != 2
25
+ puts op
26
+ exit 1
27
+ end
28
+ orig, patch = ARGV.dup
29
+ ARGV.replace [orig]
30
+ orig = JSON.load(ARGF.read)
31
+ ARGV.replace [patch]
32
+ patch = JSON.load(ARGF.read)
33
+
34
+ merge = merge_patch(orig, patch)
35
+ puts JSON.pretty_generate(merge)
@@ -0,0 +1,15 @@
1
+ def merge_patch(orig, patch)
2
+ if Hash === patch
3
+ orig = {} unless Hash === orig
4
+ patch.each do |k, v|
5
+ if v.nil?
6
+ orig.delete(k)
7
+ else
8
+ orig[k] = merge_patch(orig[k], v)
9
+ end
10
+ end
11
+ orig
12
+ else
13
+ patch
14
+ end
15
+ end # yep, that's 15 lines.
@@ -0,0 +1,16 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "merge-patch"
3
+ s.version = "0.1.0"
4
+ s.summary = "RFC 7396 merge-patch"
5
+ s.description = %q{merge-patch implements a library and a command-line interface to RFC 7396 Merge-Patch}
6
+ s.author = "Carsten Bormann"
7
+ s.email = "cabo@tzi.org"
8
+ s.license = "Apache-2.0"
9
+ s.homepage = "https://github.com/cabo/merge-patch"
10
+ s.has_rdoc = false
11
+ s.files = Dir['lib/**/*.rb'] + %w(merge-patch.gemspec) + Dir['bin/**/*']
12
+ s.executables = Dir['bin/**/*'].map {|x| File.basename(x)}
13
+ s.required_ruby_version = '>= 1.9.2'
14
+
15
+ s.require_paths = ["lib"]
16
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: merge-patch
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Carsten Bormann
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-06-26 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: merge-patch implements a library and a command-line interface to RFC
14
+ 7396 Merge-Patch
15
+ email: cabo@tzi.org
16
+ executables:
17
+ - merge-patch
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - bin/merge-patch
22
+ - lib/merge-patch.rb
23
+ - merge-patch.gemspec
24
+ homepage: https://github.com/cabo/merge-patch
25
+ licenses:
26
+ - Apache-2.0
27
+ metadata: {}
28
+ post_install_message:
29
+ rdoc_options: []
30
+ require_paths:
31
+ - lib
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 1.9.2
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubygems_version: 3.4.6
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: RFC 7396 merge-patch
47
+ test_files: []