k_builder 0.0.16 → 0.0.26

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: 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: