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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d7a09c150a5126637c31ee2f27b90fcab7c948264e1e170ed716e171481c9a33
4
- data.tar.gz: f1b2a3959ef8b43b8d42befce7dfaddd0005a68916d315d5540b201e1eda8cc2
3
+ metadata.gz: 70403b153cce0471b55288f97ba184a62e725535f0fa830ac75b63e56835b90d
4
+ data.tar.gz: 4791e6c9efff08064ca469da425607a4b38a70a8faff27f355c36b9c959adb24
5
5
  SHA512:
6
- metadata.gz: e97865d517a899d7cdd8a4cf10624e87ae20d9df8c131c0f61c72d38d037972d041060f4972956e5d201f342a76ba76aec5b667978bea67bbdd20bead5281320
7
- data.tar.gz: aa66f8774c37a8ef52310fb298e082bf6af2f2ae7b44b475efb4c6d3ca5a68e9419fd117bf380a50ff9e981cd3605fac365647015a689d743f4530298706743b
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.3.1)
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
+ [![Gem Version](https://badge.fury.io/rb/filemerger.svg)](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/[USERNAME]/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
+ 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/[USERNAME]/filemerger/blob/master/CODE_OF_CONDUCT.md).
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
@@ -27,4 +27,5 @@ Gem::Specification.new do |spec|
27
27
  spec.add_dependency "thor"
28
28
  spec.add_dependency "colorize"
29
29
  spec.add_dependency "json"
30
+ spec.add_dependency "xcodeproj"
30
31
  end
@@ -9,5 +9,10 @@ module Filemerger
9
9
  Filemerger.begin_merge
10
10
  end
11
11
 
12
+ desc "Creates mergefile", "Creates mergefile for Filemerger setup"
13
+ def setup
14
+ Filemerger.setup
15
+ end
16
+
12
17
  end
13
18
  end
@@ -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.yaml")
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
@@ -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
- def self.merge_files(config)
7
- first_mask_files = Searcher.find_files_for_mask(config.masks.first)
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.each do |mask|
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
- content += File.readlines(file).join() + "\n"
21
- delete_file_if_needed(file, config)
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) + "/" + file_name + config.result_mask
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 self.delete_file_if_needed(file, config)
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
@@ -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
@@ -2,19 +2,20 @@ require 'filemerger/poster'
2
2
 
3
3
  module Filemerger
4
4
  class Searcher
5
- def self.find_files(masks)
6
- files = []
7
- masks.each do | mask |
8
- mask_files = Dir.glob("**/*#{mask}")
9
- files.push(mask_files)
10
- Poster.post_search_completed(mask, mask_files.count)
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
@@ -1,3 +1,3 @@
1
1
  module Filemerger
2
- VERSION = "0.3.1"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -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
- Merger.merge_files(config)
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.3.1
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-04 00:00:00.000000000 Z
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