k_builder 0.0.16 → 0.0.26

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: 050b7375cf0a60393e140589a7a3517097097ca969153fc969bc47f7d4815d93
4
- data.tar.gz: 76deda3ada30401133f1ac8fc5cea88a51bd1b0b2618b53a82613cd4f85569c3
3
+ metadata.gz: ec75b1356060e7075bd481790769fb8f3fd80112a07247fb3a5ac1f6bac36993
4
+ data.tar.gz: 388c3f334b6864e973a4fbfd1f41d6bdbf769c3b58fb5d72a9bafeb847e11656
5
5
  SHA512:
6
- metadata.gz: 7d5c01ea1307ff86b577b69f2cd4fe5307c97c75c70d873ddfa01a1ccf6205e993bcfabd3fc0c99495c5e59f2c63e031de47c6e2f720390344f36766fbe21504
7
- data.tar.gz: 5027f3bfbc0212a3cde6aa1389d2cb68f389c5381303f5dedeb2ae2fdbb0d88e372dfc7ed83875a587523f883b1e3b4c34e425db4f10fdeab9468eb63addfc4a
6
+ metadata.gz: e6937c692f052d1ec7b0f6abae35cce72e775e65a962e05ca21ba5dda647cb85c3215fb465e86ba76428bffc66038727afde3ca60666920773467bc36996cbef
7
+ data.tar.gz: 3988883cfe6543a2c97fe56c4b99bf634b4a77c3210eccf2d1e56711d045729144aa0735edd94238c400f9ed82fcf7db847343949e0d04b325fa66f52c0073b6
data/README.md CHANGED
@@ -1,29 +1,6 @@
1
1
  # K Builder
2
2
 
3
- > K Builder provides various fluent builders for initializing applications with different language requirements
4
-
5
- ## ToDo
6
-
7
- - BuildWatcher (as a builder)
8
- - AppBuilder
9
- - BaseBuilder
10
- - WebBuilder
11
- - PackageBuilder
12
- - Webpack5Builder
13
- - ReactBuilder
14
- - SlideDeckBuilder
15
- - JavscriptBuilder
16
- - SolutionBuilder
17
- - DotnetBuilder
18
- - C#Console
19
- - C#Mvc
20
- - RubyBuilder
21
- - RubyGem
22
- - RailsApp
23
- - PythonBuilder
24
- - DddBuilder
25
- - DddGenerator
26
-
3
+ > KBuilder provides various fluent builders and code generators for initializing applications with different language requirements
27
4
 
28
5
  ## Installation
29
6
 
@@ -59,12 +36,41 @@ See all [usage examples](./USAGE.md)
59
36
 
60
37
  ### Basic Example
61
38
 
62
- #### Basic example
39
+ #### Configure and Run
40
+
41
+ Setup configuration for KBuilder
42
+
43
+ Generate two files:
44
+
45
+ 1. main.rb is based on class.rb from app_template
46
+ 2. configuration.log.txt is based on an inline template
63
47
 
64
- Description for a basic example to be featured in the main README.MD file
48
+ Check out usage.md for more details
65
49
 
66
50
  ```ruby
67
- class SomeRuby; end
51
+ usecases_folder = File.join(Dir.getwd, 'spec', 'usecases')
52
+
53
+ KBuilder.configure do |config|
54
+ config.template_folder = File.join(usecases_folder, '.app_template')
55
+ config.global_template_folder = File.join(usecases_folder, '.global_template')
56
+ config.target_folder = File.join(usecases_folder, '.output')
57
+ end
58
+
59
+ template = <<~TEXT
60
+ Configured Template Folder : {{a}}
61
+ Configured Global Template Folder : {{b}}
62
+ Configured Output Folder : {{c}}
63
+ TEXT
64
+
65
+ builder = KBuilder::Builder.init
66
+
67
+ builder.add_file('main.rb', template_file: 'class.rb', name: 'main').add_file(
68
+ 'configuration.log.txt',
69
+ template: template,
70
+ a: builder.template_folder,
71
+ b: builder.global_template_folder,
72
+ c: builder.target_folder
73
+ )
68
74
  ```
69
75
 
70
76
  ## Development
data/STORIES.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # K Builder
2
2
 
3
- > K Builder provides various fluent builders for initializing applications with different language requirements
3
+ > KBuilder provides various fluent builders and code generators for initializing applications with different language requirements
4
4
 
5
5
  As a Polyglot Developer, I want to be up and running in any development language with consistency, so I am productive and using best practices
6
6
 
data/USAGE.md CHANGED
@@ -1,19 +1,104 @@
1
1
  # K Builder
2
2
 
3
- > K Builder provides various fluent builders for initializing applications with different language requirements
3
+ > KBuilder provides various fluent builders and code generators for initializing applications with different language requirements
4
4
 
5
5
  As a Polyglot Developer, I want to be up and running in any development language with consistency, so I am productive and using best practices
6
6
 
7
7
  ## Usage
8
8
 
9
- ### Sample Classes
9
+ ### Configure And Build
10
10
 
11
- #### Simple example
12
-
13
- Description for a simple example that shows up in the USAGE.MD
11
+ Print the configuration
14
12
 
15
13
  ```ruby
16
- class SomeRuby
17
- def initialize; end
14
+ usecases_folder = File.join(Dir.getwd, 'spec', 'usecases')
15
+
16
+ KBuilder.configure do |config|
17
+ config.template_folder = File.join(usecases_folder, '.app_template')
18
+ config.global_template_folder = File.join(usecases_folder, '.global_template')
19
+ config.target_folder = File.join(usecases_folder, '.output')
18
20
  end
21
+
22
+ puts JSON.pretty_generate(KBuilder.configuration.to_hash)
23
+ ```
24
+
25
+ ```javascript
26
+ {
27
+ "target_folder": "/Users/name/dev/kgems/k_builder/spec/usecases/.output",
28
+ "template_folder": "/Users/name/dev/kgems/k_builder/spec/usecases/.app_template",
29
+ "global_template_folder": "/Users/name/dev/kgems/k_builder/spec/usecases/.global_template"
30
+ }
19
31
  ```
32
+
33
+ #### Folder Structure (starting)
34
+
35
+ Example folder structure for this usecase before running the builder
36
+
37
+ > Note: app-templates will take preference over global templates
38
+
39
+ ![](usage/_usage_folder_before.png)
40
+
41
+ #### Run builder
42
+
43
+ This example builder will add 4 files into the output folder.
44
+
45
+ 1. `main.rb` is based on `class.rb` from `app_template`
46
+ 2. `person.rb` & `address.rb` are based on `model.rb` from `global_template`
47
+ 3. `configuration.log.txt` is based on an inline template
48
+
49
+ ```ruby
50
+ template = <<~TEXT
51
+ Configured Template Folder : {{a}}
52
+ Configured Global Template Folder : {{b}}
53
+ Configured Output Folder : {{c}}
54
+ TEXT
55
+
56
+ builder = KBuilder::Builder.init
57
+
58
+ builder
59
+ .add_file('main.rb', template_file: 'class.rb', name: 'main')
60
+ .add_file('person.rb',
61
+ template_file: 'model.rb',
62
+ name: 'person',
63
+ fields: %i[first_name last_name])
64
+ .add_file('address.rb',
65
+ template_file: 'model.rb',
66
+ name: 'address',
67
+ fields: %i[street1 street2 post_code state])
68
+ .add_file('configuration.log.txt',
69
+ template: template,
70
+ a: builder.template_folder,
71
+ b: builder.global_template_folder,
72
+ c: builder.target_folder)
73
+ .add_file('css/index.css',
74
+ template: '{{#each colors}} .{{.}} { color: {{.}} } {{/each}}',
75
+ colors: ['red', 'blue', 'green'],
76
+ pretty: true)
77
+
78
+ ```
79
+
80
+ #### Folder Structure (after)
81
+
82
+ Folder structure after running the builder
83
+
84
+ ![](usage/_usage_folder_after.png)
85
+
86
+ #### main.rb
87
+
88
+ ![main.rb](usage/_out1.png)
89
+
90
+ #### person.rb
91
+
92
+ ![](usage/_out2.png)
93
+
94
+ #### address.rb
95
+
96
+ ![person.rb](usage/_out3.png)
97
+
98
+ #### configuration.log.txt
99
+
100
+ ![configuration.log.txt](usage/_out4.png)
101
+
102
+ #### css/index.css
103
+
104
+ ![css/index.css](usage/_out5.png)
data/k_builder.gemspec CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |spec|
13
13
  spec.description = <<-TEXT
14
14
  K Builder provides various fluent builders for initializing applications with different language requirements
15
15
  TEXT
16
- spec.homepage = 'http://appydave.com/gems/k-builder'
16
+ spec.homepage = 'http://appydave.com' # /gems/k-builder'
17
17
  spec.license = 'MIT'
18
18
 
19
19
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
@@ -39,5 +39,6 @@ Gem::Specification.new do |spec|
39
39
  # spec.extensions = ['ext/k_builder/extconf.rb']
40
40
 
41
41
  spec.add_dependency 'handlebars-helpers', '~> 0'
42
- # spec.add_dependency 'tty-box', '~> 0.5.0'
42
+ # spec.add_dependency "anyway_config" , ">= 2.0.0"
43
+ # spec.add_dependency "config" , ">= 3.0.0"
43
44
  end
data/lib/k_builder.rb CHANGED
@@ -1,9 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'k_builder/version'
4
- require 'k_builder/configuration'
5
4
  require 'k_builder/base_builder'
5
+ require 'k_builder/base_configuration'
6
6
  require 'k_builder/builder'
7
+ require 'k_builder/configuration'
8
+ require 'k_builder/data_helper'
7
9
 
8
10
  require 'handlebars/helpers/template'
9
11
 
@@ -70,35 +70,42 @@ module KBuilder
70
70
  hash
71
71
  end
72
72
 
73
- # builds a nested structure by either builder block or hash
74
- # @param data_structure [type=DataStructure]
75
- # @param builder [type=Builder]
76
- # @param attributes [type=Hash|DataStructure instance]
77
- # @param &block
78
- #
79
- # @return [type=Hash]
80
- def build_nested(data_structure, builder, attributes = {}, &block)
81
- if block_given?
82
- builder.build(&block).to_h
83
- else
84
- build_hash(data_structure, attributes)
85
- end
86
- end
73
+ # TODO
74
+ # Support Nesting
75
+ # Support Generation fo the following
76
+ # - fluent set_
77
+ # - Support setter (non-fluent)
78
+ # - Support getter (non-fluent)
79
+
80
+ # # builds a nested structure by either builder block or hash
81
+ # # @param data_structure [type=DataStructure]
82
+ # # @param builder [type=Builder]
83
+ # # @param attributes [type=Hash|DataStructure instance]
84
+ # # @param &block
85
+ # #
86
+ # # @return [type=Hash]
87
+ # def build_nested(data_structure, builder, attributes = {}, &block)
88
+ # if block_given?
89
+ # builder.build(&block).to_h
90
+ # else
91
+ # build_hash(data_structure, attributes)
92
+ # end
93
+ # end
87
94
 
88
95
  private
89
96
 
90
- #
91
- # @param data_structure [type=DataStructure]
92
- # @param attributes [type=Hash, DataStructure]
93
- #
94
- # @return [type=Hash]
95
- def build_hash(data_structure, attributes)
96
- if attributes.is_a?(data_structure)
97
- attributes.to_h
98
- else
99
- data_structure.new(attributes).to_h
100
- end
101
- end
97
+ # #
98
+ # # @param data_structure [type=DataStructure]
99
+ # # @param attributes [type=Hash, DataStructure]
100
+ # #
101
+ # # @return [type=Hash]
102
+ # def build_hash(data_structure, attributes)
103
+ # if attributes.is_a?(data_structure)
104
+ # attributes.to_h
105
+ # else
106
+ # data_structure.new(attributes).to_h
107
+ # end
108
+ # end
102
109
 
103
110
  # Defines all of the necessary builder setter methods
104
111
  #
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module KBuilder
4
+ # Base configuration object for all k_builder* GEM
5
+ class BaseConfiguration
6
+ def self.attach_to(klass_me, klass_target, accessor_name)
7
+ # Create a memoized getter to an instance of the attaching class (:klass_me)
8
+ #
9
+ # def third_party
10
+ # @third_party ||= KBuilder::ThirdPartyGem::Configuration.new
11
+ # end
12
+ klass_target.send(:define_method, accessor_name) do
13
+ return instance_variable_get("@#{accessor_name}") if instance_variable_defined?("@#{accessor_name}")
14
+
15
+ instance_variable_set("@#{accessor_name}", klass_me.new)
16
+ end
17
+ end
18
+
19
+ def to_hash
20
+ hash = {}
21
+ instance_variables.each do |var|
22
+ value = instance_variable_get(var)
23
+
24
+ value = value.to_hash if value.is_a?(KBuilder::BaseConfiguration)
25
+
26
+ hash[var.to_s.delete('@')] = value
27
+ end
28
+ hash
29
+ end
30
+
31
+ def kv(name, value)
32
+ puts "#{name.rjust(30)} : #{value}"
33
+ end
34
+ end
35
+ end
@@ -105,11 +105,13 @@ module KBuilder
105
105
  end
106
106
 
107
107
  # Setter for template folder
108
+ # Refactor: Make Private
108
109
  def template_folder=(value)
109
110
  hash['template_folder'] = File.expand_path(value)
110
111
  end
111
112
 
112
113
  # Getter for template folder
114
+ # Refactor: generate
113
115
  def template_folder
114
116
  hash['template_folder']
115
117
  end
@@ -125,11 +127,13 @@ module KBuilder
125
127
  end
126
128
 
127
129
  # Setter for global template folder
130
+ # Refactor: Make Private
128
131
  def global_template_folder=(value)
129
132
  hash['global_template_folder'] = File.expand_path(value)
130
133
  end
131
134
 
132
135
  # Setter for global template folder
136
+ # Refactor: generate
133
137
  def global_template_folder
134
138
  hash['global_template_folder']
135
139
  end
@@ -20,12 +20,13 @@ module KBuilder
20
20
  end
21
21
 
22
22
  # Configuration class
23
- class Configuration
23
+ class Configuration < BaseConfiguration
24
24
  attr_accessor :target_folder
25
25
  attr_accessor :template_folder
26
26
  attr_accessor :global_template_folder
27
27
 
28
28
  def initialize
29
+ super
29
30
  @target_folder = Dir.getwd
30
31
  @template_folder = File.join(Dir.getwd, '.templates')
31
32
  @global_template_folder = nil
@@ -38,17 +39,5 @@ module KBuilder
38
39
  kv 'template_folder' , template_folder
39
40
  kv 'global_template_folder', global_template_folder
40
41
  end
41
-
42
- def to_hash
43
- hash = {}
44
- instance_variables.each { |var| hash[var.to_s.delete('@')] = instance_variable_get(var) }
45
- hash
46
- end
47
-
48
- private
49
-
50
- def kv(name, value)
51
- puts "#{name.rjust(30)} : #{value}"
52
- end
53
42
  end
54
43
  end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Attach data helper to the KBuilder module
4
+ module KBuilder
5
+ # Data helpers/utils for Kbuilder
6
+ class << self
7
+ attr_writer :data
8
+ end
9
+
10
+ def self.data
11
+ @data ||= DataHelper.new
12
+ end
13
+
14
+ # Helper methods attached to the namespace for working with Data
15
+ #
16
+ # Usage: KBuilder.data.to_struct(data)
17
+ class DataHelper
18
+ # Convert a hash into a deep OpenStruct or array an array
19
+ # of objects into an array of OpenStruct
20
+ def to_struct(data)
21
+ case data
22
+ when Hash
23
+ OpenStruct.new(data.transform_values { |v| to_struct(v) })
24
+
25
+ when Array
26
+ data.map { |o| to_struct(o) }
27
+
28
+ else
29
+ # Some primitave type: String, True/False, Symbol or an ObjectStruct
30
+ data
31
+ end
32
+ end
33
+
34
+ # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
35
+ def struct_to_hash(data)
36
+ # No test yet
37
+ if data.is_a?(Array)
38
+ return data.map { |v| v.is_a?(OpenStruct) ? struct_to_hash(v) : v }
39
+ end
40
+
41
+ data.each_pair.with_object({}) do |(key, value), hash|
42
+ case value
43
+ when OpenStruct
44
+ hash[key] = struct_to_hash(value)
45
+ when Array
46
+ # No test yet
47
+ values = value.map { |v| v.is_a?(OpenStruct) ? struct_to_hash(v) : v }
48
+ hash[key] = values
49
+ else
50
+ hash[key] = value
51
+ end
52
+ end
53
+ end
54
+ # rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
55
+
56
+ def clean_symbol(value)
57
+ return value if value.nil?
58
+
59
+ value.is_a?(Symbol) ? value.to_s : value
60
+ end
61
+ end
62
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KBuilder
4
- VERSION = '0.0.16'
4
+ VERSION = '0.0.26'
5
5
  end
data/usage/_out1.png ADDED
Binary file
data/usage/_out2.png ADDED
Binary file
data/usage/_out3.png ADDED
Binary file
data/usage/_out4.png ADDED
Binary file
data/usage/_out5.png ADDED
Binary file
Binary file
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: k_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.16
4
+ version: 0.0.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Cruwys
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-13 00:00:00.000000000 Z
11
+ date: 2021-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: handlebars-helpers
@@ -54,14 +54,23 @@ files:
54
54
  - k_builder.gemspec
55
55
  - lib/k_builder.rb
56
56
  - lib/k_builder/base_builder.rb
57
+ - lib/k_builder/base_configuration.rb
57
58
  - lib/k_builder/builder.rb
58
59
  - lib/k_builder/configuration.rb
60
+ - lib/k_builder/data_helper.rb
59
61
  - lib/k_builder/version.rb
60
- homepage: http://appydave.com/gems/k-builder
62
+ - usage/_out1.png
63
+ - usage/_out2.png
64
+ - usage/_out3.png
65
+ - usage/_out4.png
66
+ - usage/_out5.png
67
+ - usage/_usage_folder_after.png
68
+ - usage/_usage_folder_before.png
69
+ homepage: http://appydave.com
61
70
  licenses:
62
71
  - MIT
63
72
  metadata:
64
- homepage_uri: http://appydave.com/gems/k-builder
73
+ homepage_uri: http://appydave.com
65
74
  source_code_uri: https://github.com/klueless-io/k_builder
66
75
  changelog_uri: https://github.com/klueless-io/k_builder/commits/master
67
76
  post_install_message: