roku_builder_generator 0.1.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b0204f922e4434a1a0c814410ba2d655c82e771edbd1175a1705a689185a0819
4
- data.tar.gz: 36650f221ae40b8903153f840536254853362d3e207e06f6e52d5d0fb8e3b8a0
3
+ metadata.gz: 1689feb43f47e343530956db694328c6777d0949df073ee9187b274d53a4658c
4
+ data.tar.gz: 498b94cd2b6e266d3ef1dcd8bf145fa19e177de83e531fe04716e212e73e6202
5
5
  SHA512:
6
- metadata.gz: 4bf23c381e6473c46bdfb0866cc6f5f252948f0da310cee0b18fcecf7508f5a12662f355acbc1446cbac20ac704163137a55a7119dee394cc1c2c7813c244497
7
- data.tar.gz: a17b132d2a5035afa12522e87e14710b6c239df97fc6143925849120c4e5e1aabf26c9042db4173f0be3528073160c204aed452af927a2007feefd592eb42eaa
6
+ metadata.gz: 9937fb52d8f1701a4c40a85db4d793ae16b840c00ddb21b05b8070713d156f4a52951cf7a1de0dc7bfade4ce23ba0cec772695b889928c6c3fab4e22dc88b286
7
+ data.tar.gz: 5afc1b7ee76064e0ed340c15959bbbfb8e9755df8e917f5d3289e86b5556245401ab1a6ffe74423003265ead8327ecd03245fd78b08472982944bc76e945d683
data/Gemfile CHANGED
@@ -2,5 +2,3 @@ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in roku_builder_generator.gemspec
4
4
  gemspec
5
-
6
- gem 'solargraph', group: :development
data/README.md CHANGED
@@ -25,8 +25,10 @@ Options for RokuBuilder::Generator:
25
25
  Commands:
26
26
  --generate COMPONENT_TYPE Generate a component: manager, module, task, screen
27
27
  --name COMPONENT_NAME Name of the component
28
+ Options:
28
29
  --extends COMPONENT_NAME A component to extend
29
- --base-dir Base directory for generated code (eg.: 'brands/core/components/<type>s')
30
+ --for-brand BRAND Brand to put component in (default:' core')
31
+ --base-dir Base directory for generated brs/xml code (eg.: 'brands/core/components/<type>s')
30
32
  --with-config Add empty config JSON
31
33
  --config-dir Use custom directory for config json (eg.: 'brands/core/region/US/configs/<type>s')
32
34
  ```
@@ -49,12 +51,45 @@ Format of config file:
49
51
 
50
52
  ```js
51
53
  {
52
- "component_dir": "base/directory/for/components", // default: "./brands/core/components"
53
- "config_dir": "base/directory/for/config/json/files", // default: "./brands/core/region/US/configs"
54
+ "component_dir": "base/directory/for/components", // default: "./brands/%brand%/components"
55
+ "config_dir": "base/directory/for/config/json/files", // default: "./brands/%brand%/region/US/configs"
54
56
  "template_dir": "directory/for/templates" // default: "./roku_builder_generator"
55
57
  }
56
58
  ```
57
59
 
60
+ ### Directories and Brands
61
+
62
+ Unless you specify a custom directory, generated files will be placed in the default directory. For example,
63
+ `roku --generate manager --name foo --with-config`
64
+ will generate the following files:
65
+
66
+ - ./brands/core/components/Managers/FooManager/FooManager.xml
67
+ - ./brands/core/components/Managers/FooManager/FooManager.brs
68
+ - ./brands/core/region/US/configs/Managers/Foo.json
69
+
70
+ without specifying custom directories, files can be generated for other brands. For example,
71
+
72
+ `roku --generate manager --name foo --for-brand comedy --with-config`
73
+
74
+ will generate:
75
+
76
+ - ./brands/comedy/components/Managers/FooManager/FooManager.xml
77
+ - ./brands/comedy/components/Managers/FooManager/FooManager.brs
78
+ - ./brands/comedy/region/US/configs/Managers/Foo.json
79
+
80
+ To enable changing brands for directories specified in `.roku_builder_generator.json`, use `%brand%` in the position where the brand should be replaced.
81
+
82
+ For example, if you specify `"component_dir": "some/directory/%brand%/components"` and you ran the command
83
+
84
+ `roku --generate manager --name foo --for-brand my-brand`
85
+
86
+ it would generate files
87
+
88
+ - ./some/directory/my-brand/components/Managers/FooManager/FooManager.xml
89
+ - ./some/directory/my-brand/components/Managers/FooManager/FooManager.brs
90
+
91
+ Note: If nothing is specified by the `--for-brand` option, it will use "core".
92
+
58
93
  ### Custom Templates
59
94
 
60
95
  You can add custom templates for different component types by adding [ERB](https://www.stuartellis.name/articles/erb/) files to the template directory (either `./roku_builder_generator` or whatever was defined in the config).
@@ -5,23 +5,30 @@ require_relative '../../roku_builder_generator'
5
5
 
6
6
  def default_config()
7
7
  return {
8
- :component_dir => "brands/core/components",
9
- :config_dir => "brands/core/region/US/configs",
8
+ :component_dir => "brands/%brand%/components",
9
+ :config_dir => "brands/%brand%/region/US/configs",
10
10
  :template_dir => "roku_builder_generator"
11
11
  }
12
12
  end
13
13
 
14
- def default_output_dir(component_type, base_dir = nil)
14
+ def default_output_dir(component_type, brand = 'core', base_dir = nil)
15
15
  base_dir = base_dir || default_config[:component_dir]
16
+ base_dir = replace_brand(base_dir, brand)
16
17
  return "#{base_dir}/#{component_type.capitalize()}s"
17
18
  end
18
19
 
19
- def default_config_dir(component_type, base_dir = nil)
20
+ def default_config_dir(component_type, brand = 'core', base_dir = nil)
20
21
  base_dir = base_dir || default_config[:config_dir]
21
- return "#{base_dir}/#{component_type.capitalize()}s"
22
+ base_dir = replace_brand(base_dir, brand)
23
+ return "#{base_dir}/#{component_type.capitalize()}s"
22
24
  end
23
25
 
24
26
 
27
+ def replace_brand(directory, newBrand = 'core')
28
+ directory["%brand%"]=newBrand
29
+ return directory
30
+ end
31
+
25
32
  module RokuBuilder
26
33
 
27
34
  class Generator < Util
@@ -43,20 +50,19 @@ module RokuBuilder
43
50
  end
44
51
 
45
52
 
46
- def get_output_dir( component_type, component_name, parent_dir = nil, custom_dir = nil, base_component_dir = nil )
53
+ def get_output_dir( component_type, component_name, brand, parent_dir = nil, custom_dir = nil, base_component_dir = nil )
47
54
  output_dir = get_directory_name(component_type, component_name)
48
55
  unless parent_dir.nil? || "" === parent_dir
49
56
  output_dir = parent_dir+"/"+output_dir
50
57
  end
51
- base_dir = custom_dir ? custom_dir : default_output_dir(component_type, base_component_dir)
58
+ base_dir = !custom_dir.nil? ? replace_brand(custom_dir, brand) : default_output_dir(component_type, brand, base_component_dir)
52
59
  return "./#{base_dir}/#{output_dir}"
53
60
 
54
61
  end
55
62
 
56
- def get_config_output_dir( component_type, custom_dir = nil, base_config_dir = nil )
57
- base_dir = custom_dir ? custom_dir : default_config_dir(component_type, base_config_dir)
63
+ def get_config_output_dir( component_type, brand, custom_dir = nil )
64
+ base_dir = !custom_dir.nil? ? replace_brand(custom_dir, brand) : default_config_dir(component_type, brand)
58
65
  return "./#{base_dir}"
59
-
60
66
  end
61
67
 
62
68
  # Hook to add options to the parser
@@ -64,16 +70,21 @@ module RokuBuilder
64
70
  # hash
65
71
  def self.parse_options(parser:, options:)
66
72
  parser.separator "Commands:"
73
+ options[:brand] = 'core'
67
74
  parser.on("--generate COMPONENT_TYPE", "Generate a component: manager, module, task, screen") do |component_type|
68
75
  options[:generate] = component_type
69
76
  end
70
77
  parser.on("--name COMPONENT_NAME", "Name of the component") do |component_name|
71
78
  options[:name] = component_name
72
79
  end
80
+ parser.separator "Options:"
73
81
  parser.on("--extends COMPONENT_NAME", "A component to extend") do |component_name|
74
82
  options[:extends] = component_name
75
83
  end
76
- parser.on("--base-dir", "Base directory for generated code (eg.: '#{default_output_dir('<type>')}')") do |base_dir|
84
+ parser.on("--for-brand BRAND", "Brand to put component in (default:' core')") do |brand|
85
+ options[:brand] = brand
86
+ end
87
+ parser.on("--base-dir", "Base directory for generated brs/xml code (eg.: '#{default_output_dir('<type>')}')") do |base_dir|
77
88
  options[:custom_dir] = base_dir
78
89
  end
79
90
  parser.on("--with-config", "Add empty config JSON") do |d|
@@ -96,9 +107,11 @@ module RokuBuilder
96
107
  #Setup
97
108
  end
98
109
 
110
+ def capitalizeFirst(name)
111
+ name.slice(0,1).capitalize + name.slice(1..-1)
112
+ end
99
113
 
100
114
  def get_file_name(component_type, name)
101
- name = name.slice(0,1).capitalize + name.slice(1..-1)
102
115
  if(component_type == 'screen' && !name.end_with?("Screen"))
103
116
  return name+ "Screen"
104
117
  end
@@ -109,7 +122,6 @@ module RokuBuilder
109
122
  end
110
123
 
111
124
  def get_directory_name(component_type, name)
112
- name = name.slice(0,1).capitalize + name.slice(1..-1)
113
125
  if(component_type === 'manager'&& !name.end_with?("Manager"))
114
126
  return name+'Manager'
115
127
  end
@@ -131,8 +143,9 @@ module RokuBuilder
131
143
  config = read_config()
132
144
  component_type = options[:generate].downcase
133
145
  component_name_parts = options[:name].split('/')
134
- component_proper_name = component_name_parts.last
146
+ component_proper_name = capitalizeFirst(component_name_parts.last)
135
147
  component_parent_dir = component_name_parts.first(component_name_parts.size-1).join('/')
148
+ brand = brand.downcase
136
149
 
137
150
  component_name = get_file_name(component_type, component_proper_name)
138
151
  component = RokuBuilderGenerator::BrsComponent.new(component_name, options[:extends], component_type, @logger)
@@ -140,8 +153,8 @@ module RokuBuilder
140
153
  brs_text = component.render("brs")
141
154
  json_text = options[:with_config] && component_has_config_json(component_type) ? component.render("json") : nil
142
155
 
143
- output_dir = get_output_dir(component_type, component_name, component_parent_dir, options[:custom_dir], config[:component_dir])
144
- output_config_dir = get_config_output_dir(component_type, options[:config_dir], config[:config_dir])
156
+ output_dir = get_output_dir(component_type, component_name, brand, component_parent_dir, options[:custom_dir], config[:component_dir])
157
+ output_config_dir = get_config_output_dir(component_type, brand, options[:config_dir])
145
158
  output_file_name = File.join(output_dir, component_name)
146
159
  output_config_file_name = File.join(output_config_dir, component_proper_name)
147
160
 
@@ -176,7 +189,11 @@ module RokuBuilder
176
189
  def write_file(output_file_name, contents)
177
190
  unless contents.nil?
178
191
  @logger.unknown output_file_name
179
- File.open(output_file_name, "w") { |f| f.write contents }
192
+ if File.exist?(output_file_name)
193
+ @logger.warn "#{output_file_name} already exists, skipping"
194
+ else
195
+ File.open(output_file_name, "w") { |f| f.write contents }
196
+ end
180
197
  end
181
198
  end
182
199
 
@@ -1,4 +1,4 @@
1
1
  module RokuBuilderGenerator
2
2
  NAME = "roku_builder_generator"
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.1"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roku_builder_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Pearce
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-13 00:00:00.000000000 Z
11
+ date: 2020-05-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: roku_builder