filemerger 0.3.1 → 0.4.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 +4 -4
- data/Gemfile.lock +13 -1
- data/README.md +4 -3
- data/filemerger.gemspec +1 -0
- data/lib/filemerger/cli.rb +5 -0
- data/lib/filemerger/configuration.rb +7 -2
- data/lib/filemerger/generation/mergefile.template +35 -0
- data/lib/filemerger/generation/mergefile_generator.rb +11 -0
- data/lib/filemerger/merger.rb +30 -9
- data/lib/filemerger/poster.rb +17 -4
- data/lib/filemerger/searcher.rb +13 -12
- data/lib/filemerger/version.rb +1 -1
- data/lib/filemerger/xcode_helper.rb +67 -0
- data/lib/filemerger.rb +8 -1
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 70403b153cce0471b55288f97ba184a62e725535f0fa830ac75b63e56835b90d
|
4
|
+
data.tar.gz: 4791e6c9efff08064ca469da425607a4b38a70a8faff27f355c36b9c959adb24
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 37078d7cf5f25789e528f5067f34a4e2a074122e014bfbb8ddb7c06ce3fcda7e039427c14c887cf120d2a11c9f610a43485a6970abbfd28cf190b8c9aad190f8
|
7
|
+
data.tar.gz: 6fb5f3a9a531d73856314b4b7bc57d82dd900b77fb19e2b68d8ffb9ca8d92367b795d629fdfec84b76e6f76bae2aefd3b984bcfdaeff183177a2745853c309c1
|
data/Gemfile.lock
CHANGED
@@ -1,18 +1,30 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
filemerger (0.
|
4
|
+
filemerger (0.4.0)
|
5
5
|
colorize
|
6
6
|
json
|
7
7
|
thor
|
8
|
+
xcodeproj
|
8
9
|
|
9
10
|
GEM
|
10
11
|
remote: https://rubygems.org/
|
11
12
|
specs:
|
13
|
+
CFPropertyList (2.3.6)
|
14
|
+
atomos (0.1.2)
|
15
|
+
claide (1.0.2)
|
16
|
+
colored2 (3.1.2)
|
12
17
|
colorize (0.8.1)
|
13
18
|
json (2.1.0)
|
19
|
+
nanaimo (0.2.3)
|
14
20
|
rake (10.5.0)
|
15
21
|
thor (0.20.0)
|
22
|
+
xcodeproj (1.5.6)
|
23
|
+
CFPropertyList (~> 2.3.3)
|
24
|
+
atomos (~> 0.1.2)
|
25
|
+
claide (>= 1.0.2, < 2.0)
|
26
|
+
colored2 (~> 3.1)
|
27
|
+
nanaimo (~> 0.2.3)
|
16
28
|
|
17
29
|
PLATFORMS
|
18
30
|
ruby
|
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
-
# Filemerger
|
1
|
+
# Filemerger
|
2
2
|
|
3
|
+
[](https://badge.fury.io/rb/filemerger)
|
3
4
|
Merger is a simple gem for merging files matching specified name patterns.
|
4
5
|
|
5
6
|
## Installation
|
@@ -53,7 +54,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
53
54
|
|
54
55
|
## Contributing
|
55
56
|
|
56
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
57
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/yurybogdanov/filemerger. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
57
58
|
|
58
59
|
## License
|
59
60
|
|
@@ -61,4 +62,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
61
62
|
|
62
63
|
## Code of Conduct
|
63
64
|
|
64
|
-
Everyone interacting in the Filemerger project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/
|
65
|
+
Everyone interacting in the Filemerger project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/yurybogdanov/filemerger/blob/master/CODE_OF_CONDUCT.md).
|
data/filemerger.gemspec
CHANGED
data/lib/filemerger/cli.rb
CHANGED
@@ -3,18 +3,23 @@ require 'filemerger/poster'
|
|
3
3
|
|
4
4
|
module Filemerger
|
5
5
|
class Configuration
|
6
|
-
attr_reader :masks, :result_mask, :delete_old_files
|
6
|
+
attr_reader :masks, :result_mask, :delete_old_files, :working_folders, :ommit_lines, :xcode_project, :xcode_targets
|
7
7
|
|
8
8
|
def initialize
|
9
9
|
Poster.post_configuration_search
|
10
10
|
|
11
|
-
if File.exist?("Mergefile
|
11
|
+
if File.exist?("Mergefile")
|
12
12
|
Poster.post_configuration_found
|
13
13
|
data = YAML.load_file("Mergefile.yaml")
|
14
14
|
|
15
15
|
@masks = data["masks"]
|
16
16
|
@result_mask = data["result_mask"]
|
17
17
|
@delete_old_files = data["delete_old_files"]
|
18
|
+
@working_folders = data["working_folders"]
|
19
|
+
@ommit_lines = data["ommit_lines"]
|
20
|
+
@xcode_project = data["xcode_project"]
|
21
|
+
@xcode_targets = data["xcode_targets"]
|
22
|
+
@ommit_lines = data["ommit_lines"]
|
18
23
|
else
|
19
24
|
Poster.post_configuration_not_found
|
20
25
|
exit
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# Specify which files should be merged. The gem will look up for files matching patterns you input here.
|
2
|
+
# Do not use asterisk (*).
|
3
|
+
# Example:
|
4
|
+
# masks:
|
5
|
+
# - 'PatternOne.swift'
|
6
|
+
# - 'PatternTwo.swift'
|
7
|
+
# - 'PatternThree.swift'
|
8
|
+
|
9
|
+
masks:
|
10
|
+
- 'PatternOne.swift'
|
11
|
+
- 'PatternTwo.swift'
|
12
|
+
|
13
|
+
# Specify which prefix should contain newly created files (which contain merged content)
|
14
|
+
# Example:
|
15
|
+
# result_mask: 'PatternIO.swift'
|
16
|
+
result_mask: 'IO.swift'
|
17
|
+
|
18
|
+
# Specify if files should be deleted after merge
|
19
|
+
delete_old_files: true
|
20
|
+
|
21
|
+
# Filemerger will look up for files in specified directory. If this is not specified, then
|
22
|
+
# files will be looked up in current directory and it's subdirectories
|
23
|
+
working_folders:
|
24
|
+
- "Example/**"
|
25
|
+
|
26
|
+
# You can specify number of lines which will be ommited in second, third, etc. files.
|
27
|
+
ommit_lines: 0
|
28
|
+
|
29
|
+
# If you want all changes applied to your Xcode project, then specify it file's name here
|
30
|
+
xcode_project: "Example.xcodeproj"
|
31
|
+
|
32
|
+
# Xcode project's targets in case you need files to be associated with them.
|
33
|
+
xcode_targets:
|
34
|
+
- "Example"
|
35
|
+
- "Example.qa"
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'filemerger/poster'
|
2
|
+
|
3
|
+
module Filemerger
|
4
|
+
class MergefileGenerator
|
5
|
+
def self.generate
|
6
|
+
file_contents = IO.read(File.dirname(__FILE__) + '/mergefile.template')
|
7
|
+
File.open('Mergefile', 'w+') { |file| file.write(file_contents) }
|
8
|
+
Poster.post_mergefile_generated
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
data/lib/filemerger/merger.rb
CHANGED
@@ -1,42 +1,63 @@
|
|
1
1
|
require 'filemerger/poster'
|
2
2
|
require 'filemerger/searcher'
|
3
|
+
require 'filemerger/xcode_helper'
|
4
|
+
require 'xcodeproj'
|
3
5
|
|
4
6
|
module Filemerger
|
5
7
|
class Merger
|
6
|
-
|
7
|
-
|
8
|
+
attr_accessor :config, :xcode_helper
|
9
|
+
|
10
|
+
def initialize(config)
|
11
|
+
@config = config
|
12
|
+
@xcode_helper = XcodeHelper.new(config)
|
13
|
+
end
|
14
|
+
|
15
|
+
def merge_files
|
16
|
+
first_mask_files = Searcher.find_files_for_mask(@config.masks.first, @config.working_folders)
|
8
17
|
|
9
18
|
if first_mask_files.count == 0
|
10
19
|
Poster.post_nothing_found
|
11
20
|
exit
|
12
21
|
end
|
13
22
|
|
23
|
+
project = @xcode_helper.project
|
24
|
+
|
14
25
|
first_mask_files.each do |first_mask_file|
|
15
|
-
file_name = File.basename(first_mask_file).to_s.chomp(config.masks.first)
|
26
|
+
file_name = File.basename(first_mask_file).to_s.chomp(@config.masks.first)
|
16
27
|
content = ""
|
17
|
-
config.masks.
|
28
|
+
@config.masks.each_with_index do |mask, index|
|
18
29
|
file = File.dirname(first_mask_file) + "/" + file_name + mask
|
19
30
|
if File.exist?(file)
|
20
|
-
|
21
|
-
|
31
|
+
if !@config.ommit_lines.nil? && index != 0
|
32
|
+
content += File.readlines(file).drop(@config.ommit_lines).join() + "\n"
|
33
|
+
else
|
34
|
+
content += File.readlines(file).join() + "\n"
|
35
|
+
end
|
36
|
+
delete_file_if_needed(file)
|
22
37
|
else
|
23
38
|
Poster.post_file_not_found(file)
|
24
39
|
end
|
25
40
|
end
|
41
|
+
file_name_helper = file_name + @config.result_mask
|
26
42
|
|
27
|
-
new_file_name = File.dirname(first_mask_file) + "/" +
|
43
|
+
new_file_name = File.dirname(first_mask_file) + "/" + file_name_helper
|
28
44
|
File.open(new_file_name, "w") { |f| f.puts content }
|
29
45
|
Poster.post_file_created(new_file_name)
|
46
|
+
|
47
|
+
@xcode_helper.add_file_to_project(first_mask_file, file_name_helper)
|
30
48
|
end
|
31
49
|
Poster.post_merge_finished
|
50
|
+
project.save
|
32
51
|
end
|
33
52
|
|
34
53
|
private
|
35
54
|
|
36
|
-
def
|
37
|
-
if config.delete_old_files
|
55
|
+
def delete_file_if_needed(file)
|
56
|
+
if @config.delete_old_files
|
57
|
+
@xcode_helper.delete_file_from_build_phases(file)
|
38
58
|
File.delete(file)
|
39
59
|
end
|
40
60
|
end
|
61
|
+
|
41
62
|
end
|
42
63
|
end
|
data/lib/filemerger/poster.rb
CHANGED
@@ -28,10 +28,6 @@ module Filemerger
|
|
28
28
|
puts "0️⃣ No files matching specified masks found.".colorize(:blue)
|
29
29
|
end
|
30
30
|
|
31
|
-
def self.post_search_completed(pattern, count)
|
32
|
-
puts "💁♀️ Found #{count} file(s) matching #{pattern}"
|
33
|
-
end
|
34
|
-
|
35
31
|
def self.post_file_not_found(file)
|
36
32
|
puts "❗️ Couldn't find file #{file}".colorize(:red)
|
37
33
|
end
|
@@ -39,5 +35,22 @@ module Filemerger
|
|
39
35
|
def self.post_merge_finished
|
40
36
|
puts "✅ The merge has been successfuly completed.".colorize(:green)
|
41
37
|
end
|
38
|
+
|
39
|
+
# Search
|
40
|
+
|
41
|
+
def self.post_search_files(folder)
|
42
|
+
puts "🕵️♂️ Searching for files in #{folder}".colorize(:blue)
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.post_default_searching_path
|
46
|
+
puts "❗️ Searching folders not specified in Mergefile.".colorize(:yellow)
|
47
|
+
puts "🕵️♂️ Searching for files in #{Dir.pwd}".colorize(:blue)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Generation
|
51
|
+
|
52
|
+
def self.post_mergefile_generated
|
53
|
+
puts "💁♂️ Mergefile generated!".colorize(:green)
|
54
|
+
end
|
42
55
|
end
|
43
56
|
end
|
data/lib/filemerger/searcher.rb
CHANGED
@@ -2,19 +2,20 @@ require 'filemerger/poster'
|
|
2
2
|
|
3
3
|
module Filemerger
|
4
4
|
class Searcher
|
5
|
-
def self.
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
def self.find_files_for_mask(mask, folders)
|
6
|
+
unless folders.nil? || folders.empty?
|
7
|
+
files_for_merge = []
|
8
|
+
folders.each do |folder|
|
9
|
+
Poster.post_search_files("#{folder}/*#{mask}")
|
10
|
+
files_for_mask = Dir.glob("#{folder}/*#{mask}")
|
11
|
+
files_for_merge += files_for_mask
|
12
|
+
end
|
13
|
+
return files_for_merge
|
14
|
+
else
|
15
|
+
Poster.post_default_searching_path
|
16
|
+
files = Dir.glob("**/*#{mask}")
|
17
|
+
return files
|
11
18
|
end
|
12
|
-
return files
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.find_files_for_mask(mask)
|
16
|
-
files = Dir.glob("**/*#{mask}")
|
17
|
-
return files
|
18
19
|
end
|
19
20
|
end
|
20
21
|
end
|
data/lib/filemerger/version.rb
CHANGED
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'xcodeproj'
|
2
|
+
|
3
|
+
module Filemerger
|
4
|
+
class XcodeHelper
|
5
|
+
attr_accessor :project
|
6
|
+
attr_reader :config
|
7
|
+
|
8
|
+
def initialize(config)
|
9
|
+
@project = Xcodeproj::Project.open(config.xcode_project)
|
10
|
+
@config = config
|
11
|
+
end
|
12
|
+
|
13
|
+
def add_file_to_project(file_path, file_name)
|
14
|
+
group = project[File.dirname(file_path)]
|
15
|
+
xcode_file = group.new_file(file_name)
|
16
|
+
targets = get_targets_from_config
|
17
|
+
targets.each do |t|
|
18
|
+
t.add_file_references([xcode_file])
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def delete_file_from_build_phases(file)
|
23
|
+
build_phases = build_phases_from_targets
|
24
|
+
return if build_phases.nil?
|
25
|
+
|
26
|
+
build_phases.each do |build_phase|
|
27
|
+
build_phase.files.each do |build_file|
|
28
|
+
next if build_file.nil? || build_file.file_ref.nil?
|
29
|
+
|
30
|
+
build_file_path = configure_file_ref_path(build_file.file_ref)
|
31
|
+
if build_file_path == file
|
32
|
+
build_file.file_ref.remove_from_project
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def get_targets_from_config
|
41
|
+
targets = []
|
42
|
+
@project.targets.each do |target|
|
43
|
+
targets.push(target) if @config.xcode_targets.include?(target.name)
|
44
|
+
end
|
45
|
+
targets
|
46
|
+
end
|
47
|
+
|
48
|
+
def build_phases_from_targets
|
49
|
+
build_phases = []
|
50
|
+
get_targets_from_config.each do |xcode_target|
|
51
|
+
xcode_target.build_phases.each do |build_phase|
|
52
|
+
if build_phase.isa == 'PBXSourcesBuildPhase'
|
53
|
+
build_phases.push(build_phase)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
build_phases
|
58
|
+
end
|
59
|
+
|
60
|
+
def configure_file_ref_path(file_ref)
|
61
|
+
build_file_ref_path = file_ref.hierarchy_path.to_s
|
62
|
+
build_file_ref_path[0] = ''
|
63
|
+
|
64
|
+
build_file_ref_path
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
data/lib/filemerger.rb
CHANGED
@@ -3,6 +3,7 @@ require "filemerger/poster"
|
|
3
3
|
require "filemerger/searcher"
|
4
4
|
require "filemerger/merger"
|
5
5
|
require "filemerger/configuration"
|
6
|
+
require "filemerger/generation/mergefile_generator"
|
6
7
|
require "json"
|
7
8
|
|
8
9
|
module Filemerger
|
@@ -10,7 +11,13 @@ module Filemerger
|
|
10
11
|
def self.begin_merge
|
11
12
|
Poster.post_greeting
|
12
13
|
config = Configuration.new
|
13
|
-
|
14
|
+
|
15
|
+
merger = Merger.new(config)
|
16
|
+
merger.merge_files
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.setup
|
20
|
+
MergefileGenerator.generate
|
14
21
|
end
|
15
22
|
end
|
16
23
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: filemerger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yury Bogdanov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: xcodeproj
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
description: Ruby gem for merging files.
|
84
98
|
email:
|
85
99
|
- yury-bogdanov@mail.ru
|
@@ -102,10 +116,13 @@ files:
|
|
102
116
|
- lib/filemerger.rb
|
103
117
|
- lib/filemerger/cli.rb
|
104
118
|
- lib/filemerger/configuration.rb
|
119
|
+
- lib/filemerger/generation/mergefile.template
|
120
|
+
- lib/filemerger/generation/mergefile_generator.rb
|
105
121
|
- lib/filemerger/merger.rb
|
106
122
|
- lib/filemerger/poster.rb
|
107
123
|
- lib/filemerger/searcher.rb
|
108
124
|
- lib/filemerger/version.rb
|
125
|
+
- lib/filemerger/xcode_helper.rb
|
109
126
|
homepage: https://github.com/yurybogdanov/filemerger
|
110
127
|
licenses:
|
111
128
|
- MIT
|