merge-patch 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []