changit 0.2.0 → 0.2.2
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 +4 -4
- data/lib/changit/config_merger.rb +38 -0
- data/lib/changit/config_writer.rb +3 -27
- data/lib/changit/lexer/key_value_token.rb +0 -6
- data/lib/changit/lexer/section_token.rb +1 -1
- data/lib/changit/lexer.rb +12 -2
- data/lib/changit/version.rb +1 -1
- data/lib/changit.rb +3 -2
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 372f010fb7fc1efe5ddaaba7a9ff3a7f7e498d0d
|
4
|
+
data.tar.gz: ec1d0128d5a9918ad1edb7605bcce4c523582c13
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19fe3ed541cc2c97c30f59593d256aad6b5d665d5ea961d9039c1f30df7c3a6180ef5a7a2bc853c7145051fec50813c2e8a80980be7acd855ee84ec3472a5aa3
|
7
|
+
data.tar.gz: af5b46096c6b14c07bdf661799687887327702e3678e6fe7b86a1b1bd86d94b9250687ec232e6c36a79439b737a059d8ea4a7051eff1bbd3bdb755e32be264c8
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Changit
|
2
|
+
class ConfigMerger
|
3
|
+
def initialize(src_config, target_config)
|
4
|
+
@src = src_config
|
5
|
+
@target = target_config
|
6
|
+
end
|
7
|
+
|
8
|
+
# comapre and merge src_config into target_config into a lexer
|
9
|
+
def merge
|
10
|
+
src_lexer = Lexer.new(@src)
|
11
|
+
src_token_hash = src_lexer.token_hash
|
12
|
+
|
13
|
+
target_lexer = Lexer.new(@target)
|
14
|
+
target_token_hash = target_lexer.token_hash
|
15
|
+
|
16
|
+
if target_token_hash.empty?
|
17
|
+
target_lexer = src_lexer
|
18
|
+
else
|
19
|
+
target_token_hash.each do |k, v|
|
20
|
+
if src_token_hash[k]
|
21
|
+
target_token_hash[k].merge!(src_token_hash[k])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
config_difference = hash_difference(src_token_hash, target_token_hash)
|
26
|
+
target_token_hash.merge!(config_difference)
|
27
|
+
target_lexer.reconstruct_tokens_from_hash!
|
28
|
+
end
|
29
|
+
|
30
|
+
target_lexer
|
31
|
+
end
|
32
|
+
|
33
|
+
# return the difference between two hashes
|
34
|
+
def hash_difference(src_token_hash, target_token_hash)
|
35
|
+
src_token_hash.dup.delete_if { |k, _| target_token_hash.key?(k) }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -6,36 +6,12 @@ module Changit
|
|
6
6
|
@config = config
|
7
7
|
@config_files = config_files
|
8
8
|
end
|
9
|
-
|
10
|
-
def write
|
11
|
-
config_lexer = Lexer.new(@config)
|
12
|
-
config_token_hash = config_lexer.token_hash
|
13
9
|
|
10
|
+
def write
|
14
11
|
@config_files.each do |path|
|
15
|
-
|
16
|
-
file_token_hash = file_lexer.token_hash
|
17
|
-
|
18
|
-
unless file_token_hash.empty?
|
19
|
-
file_token_hash.each do |k, v|
|
20
|
-
if config_token_hash[k]
|
21
|
-
# calling `sort!` changes the order of the key_value pairs
|
22
|
-
config_token_hash[k].sort!
|
23
|
-
file_token_hash[k].sort!
|
24
|
-
|
25
|
-
config_token_hash[k].each_with_index do |e, i|
|
26
|
-
if v.include?(e)
|
27
|
-
# update it
|
28
|
-
file_token_hash[k][i].rhs = e.rhs
|
29
|
-
else
|
30
|
-
# push it
|
31
|
-
file_token_hash[k].push(e)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
12
|
+
merged_config = ConfigMerger.new(@config, File.read(path)).merge
|
37
13
|
|
38
|
-
File.open(path, 'w') { |f| f.write(
|
14
|
+
File.open(path, 'w') { |f| f.write(merged_config.to_s); f.close }
|
39
15
|
end
|
40
16
|
end
|
41
17
|
end
|
@@ -1,8 +1,6 @@
|
|
1
1
|
module Changit
|
2
2
|
class Lexer
|
3
3
|
class KeyValueToken
|
4
|
-
include Comparable
|
5
|
-
|
6
4
|
attr_reader :lhs # left-hand side
|
7
5
|
attr_accessor :rhs # right-hand side
|
8
6
|
|
@@ -13,10 +11,6 @@ module Changit
|
|
13
11
|
def to_s
|
14
12
|
"\t#{@lhs} = #{@rhs}\n"
|
15
13
|
end
|
16
|
-
|
17
|
-
def <=>(another)
|
18
|
-
self.lhs <=> another.lhs
|
19
|
-
end
|
20
14
|
end
|
21
15
|
end
|
22
16
|
end
|
data/lib/changit/lexer.rb
CHANGED
@@ -17,6 +17,16 @@ module Changit
|
|
17
17
|
@tokens.map(&:to_s).join
|
18
18
|
end
|
19
19
|
|
20
|
+
def reconstruct_tokens_from_hash!
|
21
|
+
tokens = []
|
22
|
+
@token_hash.each do |section, key_value|
|
23
|
+
tokens << SectionToken.new(section)
|
24
|
+
key_value.each { |lhs, rhs| tokens << KeyValueToken.new("#{lhs} = #{rhs}") }
|
25
|
+
end
|
26
|
+
|
27
|
+
@tokens = tokens
|
28
|
+
end
|
29
|
+
|
20
30
|
private
|
21
31
|
|
22
32
|
def tokenize
|
@@ -42,9 +52,9 @@ module Changit
|
|
42
52
|
|
43
53
|
@tokens.map do |token|
|
44
54
|
if token.class == SectionToken
|
45
|
-
token_hash[token] =
|
55
|
+
token_hash[token.section] = {}
|
46
56
|
else
|
47
|
-
token_hash[token_hash.to_a.last[0]].
|
57
|
+
token_hash[token_hash.to_a.last[0]][token.lhs] = token.rhs
|
48
58
|
end
|
49
59
|
end
|
50
60
|
|
data/lib/changit/version.rb
CHANGED
data/lib/changit.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
require 'changit/version'
|
2
|
-
require 'changit/git_dir_finder'
|
3
|
-
require 'changit/config_reader'
|
4
2
|
require 'changit/lexer/section_token'
|
5
3
|
require 'changit/lexer/key_value_token'
|
6
4
|
require 'changit/lexer'
|
5
|
+
require 'changit/git_dir_finder'
|
6
|
+
require 'changit/config_merger'
|
7
|
+
require 'changit/config_reader'
|
7
8
|
require 'changit/config_writer'
|
8
9
|
|
9
10
|
module Changit
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: changit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- aaooki
|
@@ -27,6 +27,7 @@ files:
|
|
27
27
|
- changit.gemspec
|
28
28
|
- demo.gif
|
29
29
|
- lib/changit.rb
|
30
|
+
- lib/changit/config_merger.rb
|
30
31
|
- lib/changit/config_reader.rb
|
31
32
|
- lib/changit/config_writer.rb
|
32
33
|
- lib/changit/git_dir_finder.rb
|