redbreast 0.1.0 → 1.0.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.
Files changed (43) hide show
  1. checksums.yaml +5 -5
  2. data/.DS_Store +0 -0
  3. data/.rubocop.yml +5 -0
  4. data/README.md +102 -4
  5. data/Rakefile +3 -3
  6. data/bin/console +3 -3
  7. data/exe/redbreast +17 -5
  8. data/lib/.DS_Store +0 -0
  9. data/lib/redbreast.rb +25 -17
  10. data/lib/redbreast/.DS_Store +0 -0
  11. data/lib/redbreast/commands/color_generator.rb +54 -0
  12. data/lib/redbreast/commands/color_test_generator.rb +57 -0
  13. data/lib/redbreast/commands/configuration_installer.rb +37 -0
  14. data/lib/redbreast/commands/image_generator.rb +49 -47
  15. data/lib/redbreast/commands/image_test_generator.rb +57 -0
  16. data/lib/redbreast/commands/setup.rb +139 -91
  17. data/lib/redbreast/crawlers/color_crawler.rb +38 -0
  18. data/lib/redbreast/crawlers/image_crawler.rb +30 -10
  19. data/lib/redbreast/error_handler.rb +7 -6
  20. data/lib/redbreast/helpers/general.rb +73 -63
  21. data/lib/redbreast/helpers/hash.rb +8 -8
  22. data/lib/redbreast/helpers/terminal.rb +2 -3
  23. data/lib/redbreast/io/config.rb +14 -15
  24. data/lib/redbreast/serializers/objc_serializer.rb +66 -19
  25. data/lib/redbreast/serializers/serializer.rb +17 -16
  26. data/lib/redbreast/serializers/swift_serializer.rb +90 -2
  27. data/lib/redbreast/template_generators/.DS_Store +0 -0
  28. data/lib/redbreast/template_generators/colors/objc_colors_template_generator.rb +35 -0
  29. data/lib/redbreast/template_generators/colors/swift_colors_template_generator.rb +22 -0
  30. data/lib/redbreast/template_generators/images/objc_images_template_generator.rb +27 -41
  31. data/lib/redbreast/template_generators/images/swift_images_template_generator.rb +16 -21
  32. data/lib/redbreast/template_generators/objc_template_generator.rb +19 -19
  33. data/lib/redbreast/template_generators/swift_template_generator.rb +9 -10
  34. data/lib/redbreast/template_generators/tests/colors/objc_colors_tests_template_generator.rb +35 -0
  35. data/lib/redbreast/template_generators/tests/colors/swift_colors_tests_template_generator.rb +27 -0
  36. data/lib/redbreast/template_generators/tests/images/objc_images_tests_template_generator.rb +36 -0
  37. data/lib/redbreast/template_generators/tests/images/swift_images_tests_template_generator.rb +27 -0
  38. data/lib/redbreast/version.rb +1 -1
  39. data/redbreast.gemspec +22 -22
  40. metadata +54 -15
  41. data/lib/redbreast/commands/test_generator.rb +0 -56
  42. data/lib/redbreast/template_generators/tests/objc_tests_template_generator.rb +0 -39
  43. data/lib/redbreast/template_generators/tests/swift_tests_template_generator.rb +0 -31
@@ -1,10 +1,10 @@
1
-
2
1
  module Redbreast
3
- module Helper
4
- module Hash
5
- def compact
6
- delete_if { |k, v| v.nil? }
7
- end
8
- end
2
+ module Helper
3
+ # Module used for creating compact dictionaries
4
+ module HashHelper
5
+ def compact(dictionary)
6
+ dictionary.delete_if { |_k, v| v.nil? }
7
+ end
9
8
  end
10
- end
9
+ end
10
+ end
@@ -2,8 +2,8 @@ require 'tty-prompt'
2
2
 
3
3
  module Redbreast
4
4
  module Helper
5
+ # Module used for communicatin with user via terminal
5
6
  module Terminal
6
-
7
7
  def success(message = 'Success!')
8
8
  prompt.ok(message)
9
9
  end
@@ -11,7 +11,6 @@ module Redbreast
11
11
  def prompt
12
12
  @prompt ||= TTY::Prompt.new(interrupt: :exit)
13
13
  end
14
-
15
14
  end
16
15
  end
17
- end
16
+ end
@@ -1,19 +1,18 @@
1
1
  module Redbreast
2
- module IO
3
- class Config
4
-
5
- CONFIG_FILE_PATH = "#{Dir.pwd}/.redbrest.yml".freeze
6
-
7
- class << self
8
- def write(data)
9
- File.open(CONFIG_FILE_PATH, 'w') { |file| YAML.dump(data, file) }
10
- end
11
-
12
- def read
13
- YAML.load_file(CONFIG_FILE_PATH)
14
- end
2
+ module IO
3
+ # Used for reading and writing to config file
4
+ class Config
5
+ CONFIG_FILE_PATH = "#{Dir.pwd}/.redbrest.yml"
6
+
7
+ class << self
8
+ def write(data)
9
+ File.open(CONFIG_FILE_PATH, 'w') { |file| YAML.dump(data, file) }
10
+ end
11
+
12
+ def read
13
+ YAML.load_file(CONFIG_FILE_PATH)
15
14
  end
16
-
17
15
  end
18
16
  end
19
- end
17
+ end
18
+ end
@@ -1,27 +1,74 @@
1
- require_relative 'serializer'
1
+ require_relative 'serializer'
2
2
 
3
3
  module Redbreast
4
4
  module Serializer
5
- class ObjC < Base
6
- include Helper::General
7
-
8
- def save(output_source_path, template_generator)
9
- FileUtils.mkdir_p output_source_path unless File.exist? output_source_path
10
-
11
- name = File.basename(output_source_path)
12
-
13
- if template_generator.h_template
14
- h_file = ERB.new(template_generator.h_template, nil, '-').result(binding)
15
- File.write(File.join(output_source_path, "UIImage+#{name}.h"), h_file)
16
- end
17
-
18
- if template_generator.m_template
19
- m_file = ERB.new(template_generator.m_template, nil, '-').result(binding)
20
- File.write(File.join(output_source_path, "UIImage+#{name}.m"), m_file)
21
- end
22
-
5
+ # Used for saving and creating ObjC files
6
+ class ObjC < Base
7
+ include Helper::General
8
+
9
+ def save(output_source_path:, template_generator:, generate_colors:)
10
+ FileUtils.mkdir_p output_source_path unless File.exist? output_source_path
11
+
12
+ file_base_name = generate_colors ? 'UIColor' : 'UIImage'
13
+ name = app_name.nil? ? 'Common' : app_name
14
+
15
+ if template_generator.h_template
16
+ write(output_source_path, template_generator.h_template, "#{file_base_name}+#{name}.h")
17
+ end
18
+
19
+ return unless template_generator.m_template
20
+
21
+ write(output_source_path, template_generator.m_template, "#{file_base_name}+#{name}.m")
22
+ end
23
+
24
+ def write(output_source_path, template, file_name)
25
+ file = ERB.new(template, nil, '-').result(binding)
26
+ File.write(File.join(output_source_path, file_name), file)
27
+ end
28
+
29
+ def create_objc_test_cases(names:, variable:)
30
+ text = ''
31
+ names.each do |name|
32
+ temp_array = name.split('/')
33
+ variable_name = temp_array.length == 1 ? clean_variable_name(name) : temp_array.unshift(temp_array.shift.downcase).join('')
34
+ text += variable % variable_name
23
35
  end
36
+ text
37
+ end
38
+
39
+ def generate_m_file_objc(names:, variable_declaration:, variable_implementation:, bundle_name:)
40
+ text = ''
41
+
42
+ names.each do |name|
43
+ temp_arr = name.split('/')
44
+
45
+ variable_name = temp_arr.length == 1 ? clean_variable_name(name) : temp_arr.unshift(temp_arr.shift.downcase).join('')
46
+ text += variable_declaration % variable_name + variable_implementation % [name, bundle_name[:reference]]
47
+ text += name == names.last ? '' : "\n"
48
+ end
49
+
50
+ text
51
+ end
52
+
53
+ def generate_h_file_objc(names:, variable:)
54
+ text = ''
55
+
56
+ names.each do |name|
57
+ temp_arr = name.split('/')
58
+ variable_name = temp_arr.length == 1 ? clean_variable_name(name) : temp_arr.unshift(temp_arr.shift.downcase).join('')
59
+ text += variable % variable_name
60
+ end
61
+
62
+ text
63
+ end
64
+
65
+ def generate_category(type, class_name, app_name)
66
+ text = "@#{type} #{class_name} ("
67
+
68
+ return text += 'Common)\n' if app_name.nil? || app_name.empty?
24
69
 
70
+ text + app_name + ")\n"
71
+ end
25
72
  end
26
73
  end
27
74
  end
@@ -1,18 +1,19 @@
1
1
  module Redbreast
2
- module Serializer
3
- class Base
4
- include ERB::Util
5
- attr_accessor :image_names, :bundle
6
-
7
- def initialize(image_names, bundle)
8
- @image_names = image_names
9
- @bundle = bundle
10
- end
11
-
12
- def save(path)
13
- fail NotImplementedError, 'Abstract Method'
14
- end
15
-
16
- end
2
+ module Serializer
3
+ # Used for initializing a serializer which will save files for respective languages
4
+ class Base
5
+ include ERB::Util
6
+ attr_accessor :asset_names, :bundle
7
+
8
+ def initialize(asset_names, bundle, app_name)
9
+ @asset_names = asset_names
10
+ @bundle = bundle
11
+ @app_name = app_name
12
+ end
13
+
14
+ def save(*)
15
+ raise NotImplementedError, 'Abstract Method'
16
+ end
17
17
  end
18
- end
18
+ end
19
+ end
@@ -1,11 +1,12 @@
1
- require_relative 'serializer'
1
+ require_relative 'serializer'
2
2
 
3
3
  module Redbreast
4
4
  module Serializer
5
+ # Used to save swift files
5
6
  class Swift < Base
6
7
  include Helper::General
7
8
 
8
- def save(output_source_path, template_generator)
9
+ def save(output_source_path:, template_generator:, generate_colors:)
9
10
  directory = File.dirname(output_source_path)
10
11
  FileUtils.mkdir_p directory unless File.exist? directory
11
12
 
@@ -13,6 +14,93 @@ module Redbreast
13
14
  File.write(output_source_path, file)
14
15
  end
15
16
 
17
+ def generate_file_swift(names:, spacing: "\t", indentation: '', variable:, bundle:)
18
+ return if names.empty?
19
+
20
+ text = ''
21
+ arr = []
22
+
23
+ vars, arr = generate_variables(names: names, spacing: spacing, indentation: indentation, variable: variable, bundle: bundle, text: text, array: arr)
24
+
25
+ arr = arr.uniq
26
+ arr.each do |enum_name|
27
+ names_new = []
28
+ names_new_enum = []
29
+ new_enum_name = enum_name
30
+
31
+ text += "\n" + spacing + 'enum ' + enum_name + ' {'
32
+ names_new, names_new_enum = separate_variables_from_folders(names: names, enum_name: enum_name, new_enum_name: new_enum_name, names_new_enum: names_new_enum, names_new: names_new)
33
+
34
+ if !names_new_enum.empty? && new_enum_name == enum_name
35
+ indentation += indentation.empty? || indentation[-1] == '/' ? '' : '/'
36
+ text += "\n" + generate_file_swift(names: names_new_enum, spacing: spacing + "\t", indentation: indentation + enum_name, variable: variable, bundle: bundle)
37
+ end
38
+
39
+ unless names_new.empty?
40
+
41
+ indentation += indentation.empty? || indentation[-1] == '/' ? '' : '/'
42
+ text += generate_file_swift(names: names_new, spacing: spacing + "\t", indentation: indentation + enum_name, variable: variable, bundle: bundle)
43
+ end
44
+
45
+ text += "\n" + spacing + '}' + "\n"
46
+ end
47
+ text = vars
48
+ end
49
+
50
+ def generate_extension(extended_class, app_name)
51
+ text = 'extension ' + extended_class + " {\n"
52
+
53
+ return text if app_name.nil? || app_name.empty?
54
+
55
+ text + "\tenum " + app_name + " {}\n}\n\nextension " + extended_class + '.' + app_name + " {"
56
+ end
57
+
58
+ def create_swift_test_cases(names:, declaration:, app_name:)
59
+ text = ''
60
+ app_name_text = app_name.nil? || app_name.empty? ? '' : app_name + '.'
61
+
62
+ names.each do |name|
63
+ temp_array = name.split('/')
64
+ variable = temp_array.pop
65
+ additional_text = temp_array.count.zero? ? '' : '.'
66
+ text += "\t\t" + declaration + app_name_text + temp_array.join('.') + additional_text + clean_variable_name(variable)
67
+ text += name == names.last ? '' : "\n"
68
+ end
69
+
70
+ text
71
+ end
72
+
73
+ def generate_variables(names:, spacing:, indentation:, bundle:, variable:, text:, array:)
74
+ names.each do |name|
75
+ temp_arr = name.split('/')
76
+
77
+ if temp_arr.length != 1
78
+ array.push(temp_arr.first)
79
+ else
80
+ name_prefix = indentation.empty? ? '' : '/'
81
+ text += "\n" + spacing + variable % [clean_variable_name(name), indentation + name_prefix + name, bundle[:reference]]
82
+ end
83
+ end
84
+
85
+ [text, array]
86
+ end
87
+
88
+ def separate_variables_from_folders(names:, enum_name:, new_enum_name:, names_new_enum:, names_new:)
89
+ names.each do |name|
90
+ temp_arr = name.split('/')
91
+
92
+ next if temp_arr.length == 1
93
+
94
+ if temp_arr.length > 2
95
+ names_new_enum.push(temp_arr.drop(1).join('/')) if temp_arr.first == new_enum_name
96
+ next
97
+ end
98
+
99
+ names_new.push(temp_arr.drop(1).join('/')) if temp_arr[0] == enum_name
100
+ end
101
+
102
+ [names_new, names_new_enum]
103
+ end
16
104
  end
17
105
  end
18
106
  end
@@ -0,0 +1,35 @@
1
+ require_relative '../objc_template_generator'
2
+
3
+ module Redbreast
4
+ module TemplateGenerator
5
+ module Color
6
+ # Used for creating colors in objective-c.
7
+ class ObjC < TemplateGenerator::ObjC
8
+ include ERB::Util
9
+ def h_template
10
+ <<~TEMPLATE
11
+
12
+ #import <UIKit/UIKit.h>
13
+
14
+ //THIS FILE IS AUTOGENERATED, DO NOT EDIT BY HAND
15
+ <%= generate_category('interface', 'UIColor', app_name) %>
16
+ <%= generate_h_file_objc(names: asset_names, variable: '+ (UIColor *)%s;\n')%>
17
+ @end
18
+ TEMPLATE
19
+ end
20
+
21
+ def m_template
22
+ <<~TEMPLATE
23
+
24
+ #import <UIKit/UIKit.h>
25
+
26
+ //THIS FILE IS AUTOGENERATED, DO NOT EDIT BY HAND
27
+ <%= generate_category('implementation', 'UIColor', app_name) %>
28
+ <%= generate_m_file_objc(names: asset_names, variable_declaration: '+ (UIColor *)%s\n{', variable_implementation: '\n\treturn [UIColor colorNamed:@"%s" inBundle:%s compatibleWithTraitCollection:nil];\n}\n', bundle_name: bundle) %>
29
+ @end
30
+ TEMPLATE
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,22 @@
1
+ require_relative '../swift_template_generator'
2
+
3
+ module Redbreast
4
+ module TemplateGenerator
5
+ module Color
6
+ # Used for creating colors in swift.
7
+ class Swift < TemplateGenerator::Swift
8
+ include ERB::Util
9
+ def template
10
+ <<~TEMPLATE
11
+ import UIKit
12
+
13
+ //THIS FILE IS AUTOGENERATED, DO NOT EDIT BY HAND
14
+ <%= generate_extension('UIColor', app_name) %>
15
+ <%= generate_file_swift(names: asset_names, variable: 'static var %s: UIColor { return UIColor(named: "%s", in: %s, compatibleWith: nil)! }', bundle: bundle) %>
16
+ }
17
+ TEMPLATE
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,49 +1,35 @@
1
1
  require_relative '../objc_template_generator'
2
2
 
3
3
  module Redbreast
4
- module TemplateGenerator
5
- module Image
6
- class ObjC < Redbreast::TemplateGenerator::ObjC
7
- include ERB::Util
8
-
9
- def h_template()
10
- <<-TEMPLATE
11
-
12
- #import <UIKit/UIKit.h>
13
-
14
- //THIS FILE IS AUTOGENERATED, DO NOT EDIT BY HAND
15
- @interface UIImage (<%= File.basename(bundle[:outputSourcePath]) %>)
16
-
17
- <%- image_names.each do |name| -%>
18
- + (instancetype)<%= clean_variable_name(name) %>;
19
- <%- end -%>
20
-
21
- @end
22
-
23
- TEMPLATE
24
- end
25
-
26
- def m_template()
27
- <<-TEMPLATE
28
-
29
- #import <UIKit/UIKit.h>
30
-
31
- //THIS FILE IS AUTOGENERATED, DO NOT EDIT BY HAND
32
- @implementation UIImage (<%= File.basename(bundle[:outputSourcePath]) %>)
33
-
34
- <%- image_names.each do |name| -%>
35
- +(instancetype)<%= clean_variable_name(name) %>
36
- {
37
- [UIImage imageNamed:@"<%= name %>" inBundle:<%= bundle[:reference] %> compatibleWithTraitCollection:nil];
38
- }
39
- <%- end -%>
4
+ module TemplateGenerator
5
+ module Image
6
+ # Used for creating images in objective-c.
7
+ class ObjC < TemplateGenerator::ObjC
8
+ include ERB::Util
9
+ def h_template
10
+ <<~TEMPLATE
11
+
12
+ #import <UIKit/UIKit.h>
13
+
14
+ //THIS FILE IS AUTOGENERATED, DO NOT EDIT BY HAND
15
+ <%= generate_category('interface', 'UIImage', app_name) %>
16
+ <%= generate_h_file_objc(names: asset_names, variable: '+ (UIColor *)%s;\n')%>
17
+ @end
18
+ TEMPLATE
19
+ end
40
20
 
41
- @end
21
+ def m_template
22
+ <<~TEMPLATE
42
23
 
43
- TEMPLATE
44
- end
24
+ #import <UIKit/UIKit.h>
45
25
 
46
- end
26
+ //THIS FILE IS AUTOGENERATED, DO NOT EDIT BY HAND
27
+ <%= generate_category('implementation', 'UIImage', app_name) %>
28
+ <%= generate_m_file_objc(names: asset_names, variable_declaration: '+ (UIImage *)%s\n{', variable_implementation: '\n\treturn [UIColor imageNamed:@"%s" inBundle:%s compatibleWithTraitCollection:nil];\n}\n', bundle_name: bundle) %>
29
+ @end
30
+ TEMPLATE
47
31
  end
32
+ end
48
33
  end
49
- end
34
+ end
35
+ end