k_builder 0.0.16 → 0.0.19
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 +4 -4
- data/k_builder.gemspec +2 -1
- data/lib/k_builder.rb +1 -0
- data/lib/k_builder/base_builder.rb +33 -26
- data/lib/k_builder/base_configuration.rb +106 -0
- data/lib/k_builder/builder.rb +4 -0
- data/lib/k_builder/configuration.rb +2 -13
- data/lib/k_builder/version.rb +1 -1
- metadata +2 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: f81ce6d464232f632884a2d3c1e04c180551644bf5ce9202a4a5d4a2e20d5c40
         | 
| 4 | 
            +
              data.tar.gz: bdc67f51753f3b63944b88ad3f739ba4710bf0981190fd9d7b8ce69eea6493aa
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: db0ac5f45c53b1a4d7d58e9acfd5bd106402039f1d28d81c998d3279f4b1177980817b284362cd272853735f02eb492a8d131cbcade21dacf707132269b84c75
         | 
| 7 | 
            +
              data.tar.gz: 24ff7bfeefa7db10f9a028cbda7695f171a5d7d6095be2a23637a9d3e7e727323512962414d5236d6961d4864aa4aad3521770f33120f2df07740671878a9e70
         | 
    
        data/k_builder.gemspec
    CHANGED
    
    | @@ -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  | 
| 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
    
    
| @@ -70,35 +70,42 @@ module KBuilder | |
| 70 70 | 
             
                  hash
         | 
| 71 71 | 
             
                end
         | 
| 72 72 |  | 
| 73 | 
            -
                #  | 
| 74 | 
            -
                #  | 
| 75 | 
            -
                #  | 
| 76 | 
            -
                #  | 
| 77 | 
            -
                #  | 
| 78 | 
            -
                #
         | 
| 79 | 
            -
             | 
| 80 | 
            -
                 | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 86 | 
            -
                 | 
| 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 | 
            -
             | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 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,106 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module KBuilder
         | 
| 4 | 
            +
              # Base configuration object for all k_builder* GEM
         | 
| 5 | 
            +
              class BaseConfiguration
         | 
| 6 | 
            +
                def to_hash
         | 
| 7 | 
            +
                  hash = {}
         | 
| 8 | 
            +
                  instance_variables.each { |var| hash[var.to_s.delete('@')] = instance_variable_get(var) }
         | 
| 9 | 
            +
                  hash
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                def kv(name, value)
         | 
| 13 | 
            +
                  puts "#{name.rjust(30)} : #{value}"
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                # All of this code should be extracted into a module
         | 
| 17 | 
            +
                #
         | 
| 18 | 
            +
                # The module should then be extracted out into a GEM so that
         | 
| 19 | 
            +
                # I can include it as needed. The GEM might be called
         | 
| 20 | 
            +
                # (dynamic attributes) and would allow a regular class to act like an OpenStruct
         | 
| 21 | 
            +
                # K-DSL uses data hash, while base configuration uses instance variables
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                def respond_to_missing?(name, *_args, &_block)
         | 
| 24 | 
            +
                  # puts 'respond_to_missing?'
         | 
| 25 | 
            +
                  # puts "respond_to_missing: #{name}"
         | 
| 26 | 
            +
                  n = name.to_s
         | 
| 27 | 
            +
                  n = n[0..-2] if n.end_with?('=')
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  if n.end_with?('?')
         | 
| 30 | 
            +
                    super
         | 
| 31 | 
            +
                  else
         | 
| 32 | 
            +
                    # This has not been fully tested
         | 
| 33 | 
            +
                    instance_variable_defined?("@#{n}") || super
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                def method_missing(name, *args, &_block)
         | 
| 38 | 
            +
                  # puts "method_missing: #{name}"
         | 
| 39 | 
            +
                  # puts "args.length   : #{args.length}"
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                  add_getter_or_param_method(name)
         | 
| 42 | 
            +
                  add_setter_method(name)
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  send(name, args[0]) if args.length == 1 # name.end_with?('=')
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  super unless self.class.method_defined?(name)
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                # Handles Getter method and method with single parameter
         | 
| 50 | 
            +
                # object.my_name
         | 
| 51 | 
            +
                # object.my_name('david')
         | 
| 52 | 
            +
                def add_getter_or_param_method(name)
         | 
| 53 | 
            +
                  # L.progress(1, 'add_getter_or_param_method')
         | 
| 54 | 
            +
                  self.class.class_eval do
         | 
| 55 | 
            +
                    # L.progress(2, 'add_getter_or_param_method')
         | 
| 56 | 
            +
                    name = name.to_s.gsub(/=$/, '')
         | 
| 57 | 
            +
                    # L.progress(3, 'add_getter_or_param_method')
         | 
| 58 | 
            +
                    # L.kv 'name', name
         | 
| 59 | 
            +
                    define_method(name) do |*args|
         | 
| 60 | 
            +
                      # L.progress(4, 'add_getter_or_param_method')
         | 
| 61 | 
            +
                      # L.kv 'add_getter_or_param_method', name
         | 
| 62 | 
            +
                      raise KBuilder::Error, 'Multiple setting values is not supported' if args.length > 1
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                      if args.length.zero?
         | 
| 65 | 
            +
                        get_value(name)
         | 
| 66 | 
            +
                      else
         | 
| 67 | 
            +
                        send("#{name}=", args[0])
         | 
| 68 | 
            +
                      end
         | 
| 69 | 
            +
                    end
         | 
| 70 | 
            +
                  end
         | 
| 71 | 
            +
                end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                # Handles Setter method
         | 
| 74 | 
            +
                # object.my_name = 'david'
         | 
| 75 | 
            +
                def add_setter_method(name)
         | 
| 76 | 
            +
                  # L.progress(1, 'add_setter_method')
         | 
| 77 | 
            +
                  self.class.class_eval do
         | 
| 78 | 
            +
                    # L.progress(2, 'add_setter_method')
         | 
| 79 | 
            +
                    name = name.to_s.gsub(/=$/, '')
         | 
| 80 | 
            +
                    # L.progress(3, 'add_setter_method')
         | 
| 81 | 
            +
                    # L.kv 'add_setter_method', name
         | 
| 82 | 
            +
                    define_method("#{name}=") do |value|
         | 
| 83 | 
            +
                      # L.progress(4, 'add_setter_method')
         | 
| 84 | 
            +
                      # L.kv 'name', name
         | 
| 85 | 
            +
                      # L.kv 'value', value
         | 
| 86 | 
            +
                      instance_variable_set("@#{name}", value)
         | 
| 87 | 
            +
                      # my_data[name.to_s] = value
         | 
| 88 | 
            +
                    end
         | 
| 89 | 
            +
                  end
         | 
| 90 | 
            +
                end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                def get_value(name)
         | 
| 93 | 
            +
                  instance_variable_get("@#{name}")
         | 
| 94 | 
            +
                end
         | 
| 95 | 
            +
              end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
              # class L
         | 
| 98 | 
            +
              #   def self.progress(index, label)
         | 
| 99 | 
            +
              #     puts "#{index} - #{label}"
         | 
| 100 | 
            +
              #   end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
              #   def self.kv(name, value)
         | 
| 103 | 
            +
              #     puts "#{name.rjust(30)} : #{value}"
         | 
| 104 | 
            +
              #   end
         | 
| 105 | 
            +
              # end
         | 
| 106 | 
            +
            end
         | 
    
        data/lib/k_builder/builder.rb
    CHANGED
    
    | @@ -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
         | 
    
        data/lib/k_builder/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: k_builder
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.19
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - David Cruwys
         | 
| @@ -54,6 +54,7 @@ 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
         | 
| 59 60 | 
             
            - lib/k_builder/version.rb
         |