k_domain 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 +4 -4
- data/.builders/boot.rb +40 -0
- data/.builders/generators/configuration_generator.rb +22 -0
- data/.builders/run.rb +16 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +1 -2
- data/Guardfile +1 -0
- data/README.md +15 -0
- data/STORIES.md +35 -6
- data/lib/k_domain/config/_.rb +4 -0
- data/lib/k_domain/config/config.rb +19 -0
- data/lib/k_domain/config/configuration.rb +76 -0
- data/lib/k_domain/domain_model/load.rb +41 -0
- data/lib/k_domain/domain_model/transform.rb +27 -55
- data/lib/k_domain/domain_model/transform_steps/_.rb +8 -7
- data/lib/k_domain/domain_model/transform_steps/step.rb +27 -1
- data/lib/k_domain/domain_model/transform_steps/{step1_attach_db_schema.rb → step1_db_schema.rb} +2 -1
- data/lib/k_domain/domain_model/transform_steps/{step5_attach_dictionary.rb → step20_dictionary.rb} +7 -4
- data/lib/k_domain/domain_model/transform_steps/step2_domain_models.rb +123 -0
- data/lib/k_domain/domain_model/transform_steps/{step8_rails_resource_models.rb → step4_rails_resource_models.rb} +4 -4
- data/lib/k_domain/domain_model/transform_steps/step5_rails_resource_routes.rb +36 -0
- data/lib/k_domain/domain_model/transform_steps/step6_rails_structure_models.rb +90 -0
- data/lib/k_domain/domain_model/transform_steps/step7_rails_structure_controllers.rb +111 -0
- data/lib/k_domain/domain_model/transform_steps/step8_domain_columns.rb +99 -0
- data/lib/k_domain/rails_code_extractor/_.rb +5 -0
- data/lib/k_domain/rails_code_extractor/extract_controller.rb +61 -0
- data/lib/k_domain/rails_code_extractor/extract_model.rb +56 -6
- data/lib/k_domain/rails_code_extractor/{load_shim.rb → shim_loader.rb} +3 -5
- data/lib/k_domain/raw_db_schema/load.rb +1 -1
- data/lib/k_domain/raw_db_schema/transform.rb +28 -3
- data/lib/k_domain/schemas/_.rb +6 -3
- data/lib/k_domain/schemas/database.rb +86 -0
- data/lib/k_domain/schemas/domain/erd_file.rb +78 -77
- data/lib/k_domain/schemas/domain.rb +149 -0
- data/lib/k_domain/schemas/domain_model.rb +6 -5
- data/lib/k_domain/schemas/{domain/_.rb → domain_types.rb} +1 -8
- data/lib/k_domain/schemas/rails_resource.rb +43 -6
- data/lib/k_domain/schemas/rails_structure.rb +182 -0
- data/lib/k_domain/version.rb +1 -1
- data/lib/k_domain.rb +4 -2
- data/templates/custom/action_controller.rb +36 -0
- data/templates/custom/controller_interceptors.rb +78 -0
- data/templates/custom/model_interceptors.rb +71 -0
- data/templates/load_schema.rb +7 -0
- data/templates/rails/action_controller.rb +301 -0
- data/templates/{active_record_shims.rb → rails/active_record.rb} +42 -49
- data/templates/ruby_code_extractor/attach_class_info.rb +13 -0
- data/templates/ruby_code_extractor/behaviour_accessors.rb +39 -0
- data/templates/sample_config.rb +47 -0
- data/templates/simple/controller_interceptors.rb +2 -0
- metadata +33 -22
- data/lib/k_domain/domain_model/transform_steps/step2_attach_models.rb +0 -62
- data/lib/k_domain/domain_model/transform_steps/step3_attach_columns.rb +0 -137
- data/lib/k_domain/domain_model/transform_steps/step4_attach_erd_files.rb +0 -457
- data/lib/k_domain/domain_model/transform_steps/step9_rails_structure_models.rb +0 -33
- data/lib/k_domain/schemas/database/_.rb +0 -7
- data/lib/k_domain/schemas/database/foreign_key.rb +0 -14
- data/lib/k_domain/schemas/database/index.rb +0 -14
- data/lib/k_domain/schemas/database/schema.rb +0 -31
- data/lib/k_domain/schemas/database/table.rb +0 -32
- data/lib/k_domain/schemas/domain/domain.rb +0 -11
- data/lib/k_domain/schemas/domain/models/column.rb +0 -49
- data/lib/k_domain/schemas/domain/models/model.rb +0 -111
- data/templates/fake_module_shims.rb +0 -42
| @@ -0,0 +1,301 @@ | |
| 1 | 
            +
            # Implement data capture methods for the Rails Action Controller class
         | 
| 2 | 
            +
            #
         | 
| 3 | 
            +
            # This Shim will intercept any DSL methods and convert their paramaters into a data hash
         | 
| 4 | 
            +
            module ActionController
         | 
| 5 | 
            +
              extend RubyCodeExtractor::AttachClassInfo
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              class Base
         | 
| 8 | 
            +
                extend RubyCodeExtractor::BehaviourAccessors
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                def self.singleton_class
         | 
| 11 | 
            +
                  Class.new do
         | 
| 12 | 
            +
                    def send(*_p, **_o); end
         | 
| 13 | 
            +
                  end.new
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                def self.class_info
         | 
| 17 | 
            +
                  return ActionController.class_info if ActionController.class_info
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  ActionController.class_info = {
         | 
| 20 | 
            +
                    class_name: name
         | 
| 21 | 
            +
                  }
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                def self.after_action(name, **opts)
         | 
| 25 | 
            +
                  add(:after_action, {
         | 
| 26 | 
            +
                        name: name,
         | 
| 27 | 
            +
                        opts: opts
         | 
| 28 | 
            +
                      })
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                def self.around_action(name, **opts)
         | 
| 32 | 
            +
                  add(:around_action, {
         | 
| 33 | 
            +
                        name: name,
         | 
| 34 | 
            +
                        opts: opts
         | 
| 35 | 
            +
                      })
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                def self.before_action(name, **opts)
         | 
| 39 | 
            +
                  add(:before_action, {
         | 
| 40 | 
            +
                        name: name,
         | 
| 41 | 
            +
                        opts: opts
         | 
| 42 | 
            +
                      })
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                def self.prepend_before_action(name, **opts)
         | 
| 46 | 
            +
                  add(:prepend_before_action, {
         | 
| 47 | 
            +
                        name: name,
         | 
| 48 | 
            +
                        opts: opts
         | 
| 49 | 
            +
                      })
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                def self.skip_before_action(name, **opts)
         | 
| 53 | 
            +
                  add(:skip_before_action, {
         | 
| 54 | 
            +
                        name: name,
         | 
| 55 | 
            +
                        opts: opts
         | 
| 56 | 
            +
                      })
         | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                def self.before_filter(name, **opts)
         | 
| 60 | 
            +
                  add(:before_filter, {
         | 
| 61 | 
            +
                        name: name,
         | 
| 62 | 
            +
                        opts: opts
         | 
| 63 | 
            +
                      })
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
                
         | 
| 66 | 
            +
                def self.skip_before_filter(name, **opts)
         | 
| 67 | 
            +
                  add(:skip_before_filter, {
         | 
| 68 | 
            +
                        name: name,
         | 
| 69 | 
            +
                        opts: opts
         | 
| 70 | 
            +
                      })
         | 
| 71 | 
            +
                end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                def self.layout(name, **opts)
         | 
| 74 | 
            +
                  set(:layout, {
         | 
| 75 | 
            +
                        name: name,
         | 
| 76 | 
            +
                        opts: opts
         | 
| 77 | 
            +
                      })
         | 
| 78 | 
            +
                end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                def self.rescue_from(type)#, &block)
         | 
| 81 | 
            +
                  # block_source = nil
         | 
| 82 | 
            +
                  # block_source = lambda_source(block, 'default_scope') if block_given?
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                  add(:rescue_from, {
         | 
| 85 | 
            +
                        type: type#,
         | 
| 86 | 
            +
                        # block: block_source
         | 
| 87 | 
            +
                      })
         | 
| 88 | 
            +
                end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
                # TODO: https://apidock.com/rails/ActionController/Helpers/ClassMethods/helper_method (MAYBE DEPRECATED?)
         | 
| 91 | 
            +
                def self.helper_method(*names)
         | 
| 92 | 
            +
                  add(:helper_method, {
         | 
| 93 | 
            +
                        names: names
         | 
| 94 | 
            +
                      })
         | 
| 95 | 
            +
                end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                # TODO: https://apidock.com/rails/ActionController/Helpers/ClassMethods/helper
         | 
| 98 | 
            +
                def self.helper(name)
         | 
| 99 | 
            +
                  add(:helper, {
         | 
| 100 | 
            +
                        name: name
         | 
| 101 | 
            +
                      })
         | 
| 102 | 
            +
                end
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                def self.http_basic_authenticate_with(**opts)
         | 
| 105 | 
            +
                  set(:http_basic_authenticate_with, {
         | 
| 106 | 
            +
                        opts: opts
         | 
| 107 | 
            +
                      })
         | 
| 108 | 
            +
                end
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                def self.protect_from_forgery(**opts)
         | 
| 111 | 
            +
                  set(:protect_from_forgery, {
         | 
| 112 | 
            +
                        opts: opts
         | 
| 113 | 
            +
                      })
         | 
| 114 | 
            +
                end
         | 
| 115 | 
            +
              end
         | 
| 116 | 
            +
            end
         | 
| 117 | 
            +
             | 
| 118 | 
            +
            # after_action
         | 
| 119 | 
            +
            # after_filter
         | 
| 120 | 
            +
            # append_after_action
         | 
| 121 | 
            +
            # append_after_filter
         | 
| 122 | 
            +
            # append_around_action
         | 
| 123 | 
            +
            # append_around_filter
         | 
| 124 | 
            +
            # append_before_action
         | 
| 125 | 
            +
            # append_before_filter
         | 
| 126 | 
            +
            # append_view_path
         | 
| 127 | 
            +
            # around_action
         | 
| 128 | 
            +
            # around_filter
         | 
| 129 | 
            +
            # before_action
         | 
| 130 | 
            +
            # before_filter
         | 
| 131 | 
            +
            # controller_name
         | 
| 132 | 
            +
            # controller_path
         | 
| 133 | 
            +
            # helper
         | 
| 134 | 
            +
            # helper_attr
         | 
| 135 | 
            +
            # helper_method
         | 
| 136 | 
            +
            # helpers
         | 
| 137 | 
            +
            # helpers_path
         | 
| 138 | 
            +
            # hide_action
         | 
| 139 | 
            +
            # http_basic_authenticate_with
         | 
| 140 | 
            +
            # layout
         | 
| 141 | 
            +
            # prepend_after_action
         | 
| 142 | 
            +
            # prepend_after_filter
         | 
| 143 | 
            +
            # prepend_around_action
         | 
| 144 | 
            +
            # prepend_around_filter
         | 
| 145 | 
            +
            # prepend_before_action
         | 
| 146 | 
            +
            # prepend_before_filter
         | 
| 147 | 
            +
            # prepend_view_path
         | 
| 148 | 
            +
            # protect_from_forgery
         | 
| 149 | 
            +
            # protected_instance_variables
         | 
| 150 | 
            +
            # rescue_from
         | 
| 151 | 
            +
            # reset_callbacks
         | 
| 152 | 
            +
            # skip_action_callback
         | 
| 153 | 
            +
            # skip_after_action
         | 
| 154 | 
            +
            # skip_after_filter
         | 
| 155 | 
            +
            # skip_around_action
         | 
| 156 | 
            +
            # skip_around_filter
         | 
| 157 | 
            +
            # skip_before_action
         | 
| 158 | 
            +
            # skip_before_filter
         | 
| 159 | 
            +
            # skip_callback
         | 
| 160 | 
            +
            # skip_filter
         | 
| 161 | 
            +
             | 
| 162 | 
            +
            # METHOD LIST - Just from running self.class.methods - Object.methods on a running controller
         | 
| 163 | 
            +
            # action
         | 
| 164 | 
            +
            # action_methods
         | 
| 165 | 
            +
            # add_flash_types
         | 
| 166 | 
            +
            # after_action
         | 
| 167 | 
            +
            # after_filter
         | 
| 168 | 
            +
            # all_helpers_from_path
         | 
| 169 | 
            +
            # allow_forgery_protection
         | 
| 170 | 
            +
            # allow_forgery_protection=
         | 
| 171 | 
            +
            # append_after_action
         | 
| 172 | 
            +
            # append_after_filter
         | 
| 173 | 
            +
            # append_around_action
         | 
| 174 | 
            +
            # append_around_filter
         | 
| 175 | 
            +
            # append_before_action
         | 
| 176 | 
            +
            # append_before_filter
         | 
| 177 | 
            +
            # append_view_path
         | 
| 178 | 
            +
            # around_action
         | 
| 179 | 
            +
            # around_filter
         | 
| 180 | 
            +
            # asset_host
         | 
| 181 | 
            +
            # asset_host=
         | 
| 182 | 
            +
            # assets_dir
         | 
| 183 | 
            +
            # assets_dir=
         | 
| 184 | 
            +
            # before_action
         | 
| 185 | 
            +
            # before_filter
         | 
| 186 | 
            +
            # cache_store
         | 
| 187 | 
            +
            # cache_store=
         | 
| 188 | 
            +
            # call
         | 
| 189 | 
            +
            # clear_action_methods!
         | 
| 190 | 
            +
            # clear_helpers
         | 
| 191 | 
            +
            # clear_respond_to
         | 
| 192 | 
            +
            # config
         | 
| 193 | 
            +
            # config_accessor
         | 
| 194 | 
            +
            # configure
         | 
| 195 | 
            +
            # controller_name
         | 
| 196 | 
            +
            # controller_path
         | 
| 197 | 
            +
            # default_asset_host_protocol
         | 
| 198 | 
            +
            # default_asset_host_protocol=
         | 
| 199 | 
            +
            # default_static_extension
         | 
| 200 | 
            +
            # default_static_extension=
         | 
| 201 | 
            +
            # default_url_options
         | 
| 202 | 
            +
            # default_url_options=
         | 
| 203 | 
            +
            # default_url_options?
         | 
| 204 | 
            +
            # define_callbacks
         | 
| 205 | 
            +
            # devise_group
         | 
| 206 | 
            +
            # direct_descendants
         | 
| 207 | 
            +
            # etag
         | 
| 208 | 
            +
            # etag_with_template_digest
         | 
| 209 | 
            +
            # etag_with_template_digest=
         | 
| 210 | 
            +
            # etag_with_template_digest?
         | 
| 211 | 
            +
            # etaggers
         | 
| 212 | 
            +
            # etaggers=
         | 
| 213 | 
            +
            # etaggers?
         | 
| 214 | 
            +
            # force_ssl
         | 
| 215 | 
            +
            # forgery_protection_strategy
         | 
| 216 | 
            +
            # forgery_protection_strategy=
         | 
| 217 | 
            +
            # get_callbacks
         | 
| 218 | 
            +
            # helper
         | 
| 219 | 
            +
            # helper_attr
         | 
| 220 | 
            +
            # helper_method
         | 
| 221 | 
            +
            # helpers
         | 
| 222 | 
            +
            # helpers_path
         | 
| 223 | 
            +
            # helpers_path=
         | 
| 224 | 
            +
            # helpers_path?
         | 
| 225 | 
            +
            # hidden_actions
         | 
| 226 | 
            +
            # hidden_actions=
         | 
| 227 | 
            +
            # hidden_actions?
         | 
| 228 | 
            +
            # hide_action
         | 
| 229 | 
            +
            # http_basic_authenticate_with
         | 
| 230 | 
            +
            # include_all_helpers
         | 
| 231 | 
            +
            # include_all_helpers=
         | 
| 232 | 
            +
            # include_all_helpers?
         | 
| 233 | 
            +
            # inherited
         | 
| 234 | 
            +
            # internal_methods
         | 
| 235 | 
            +
            # javascripts_dir
         | 
| 236 | 
            +
            # javascripts_dir=
         | 
| 237 | 
            +
            # layout
         | 
| 238 | 
            +
            # log_process_action
         | 
| 239 | 
            +
            # log_warning_on_csrf_failure
         | 
| 240 | 
            +
            # log_warning_on_csrf_failure=
         | 
| 241 | 
            +
            # logger
         | 
| 242 | 
            +
            # logger=
         | 
| 243 | 
            +
            # method_added
         | 
| 244 | 
            +
            # middleware
         | 
| 245 | 
            +
            # middleware_stack
         | 
| 246 | 
            +
            # middleware_stack=
         | 
| 247 | 
            +
            # middleware_stack?
         | 
| 248 | 
            +
            # mimes_for_respond_to
         | 
| 249 | 
            +
            # mimes_for_respond_to=
         | 
| 250 | 
            +
            # mimes_for_respond_to?
         | 
| 251 | 
            +
            # modules_for_helpers
         | 
| 252 | 
            +
            # normalize_callback_params
         | 
| 253 | 
            +
            # perform_caching
         | 
| 254 | 
            +
            # perform_caching=
         | 
| 255 | 
            +
            # prepend_after_action
         | 
| 256 | 
            +
            # prepend_after_filter
         | 
| 257 | 
            +
            # prepend_around_action
         | 
| 258 | 
            +
            # prepend_around_filter
         | 
| 259 | 
            +
            # prepend_before_action
         | 
| 260 | 
            +
            # prepend_before_filter
         | 
| 261 | 
            +
            # prepend_view_path
         | 
| 262 | 
            +
            # protect_from_forgery
         | 
| 263 | 
            +
            # protected_instance_variables
         | 
| 264 | 
            +
            # relative_url_root
         | 
| 265 | 
            +
            # relative_url_root=
         | 
| 266 | 
            +
            # request_forgery_protection_token
         | 
| 267 | 
            +
            # request_forgery_protection_token=
         | 
| 268 | 
            +
            # rescue_from
         | 
| 269 | 
            +
            # rescue_handlers
         | 
| 270 | 
            +
            # rescue_handlers=
         | 
| 271 | 
            +
            # rescue_handlers?
         | 
| 272 | 
            +
            # reset_callbacks
         | 
| 273 | 
            +
            # respond_to
         | 
| 274 | 
            +
            # responder
         | 
| 275 | 
            +
            # responder=
         | 
| 276 | 
            +
            # responder?
         | 
| 277 | 
            +
            # responders
         | 
| 278 | 
            +
            # set_callback
         | 
| 279 | 
            +
            # set_callbacks
         | 
| 280 | 
            +
            # skip_action_callback
         | 
| 281 | 
            +
            # skip_after_action
         | 
| 282 | 
            +
            # skip_after_filter
         | 
| 283 | 
            +
            # skip_around_action
         | 
| 284 | 
            +
            # skip_around_filter
         | 
| 285 | 
            +
            # skip_before_action
         | 
| 286 | 
            +
            # skip_before_filter
         | 
| 287 | 
            +
            # skip_callback
         | 
| 288 | 
            +
            # skip_filter
         | 
| 289 | 
            +
            # stylesheets_dir
         | 
| 290 | 
            +
            # stylesheets_dir=
         | 
| 291 | 
            +
            # supports_path?
         | 
| 292 | 
            +
            # use
         | 
| 293 | 
            +
            # use_renderer
         | 
| 294 | 
            +
            # use_renderers
         | 
| 295 | 
            +
            # view_cache_dependency
         | 
| 296 | 
            +
            # view_context_class
         | 
| 297 | 
            +
            # view_paths
         | 
| 298 | 
            +
            # view_paths=
         | 
| 299 | 
            +
            # visible_action?
         | 
| 300 | 
            +
            # without_modules
         | 
| 301 | 
            +
            # wrap_parameters
         | 
| @@ -1,13 +1,9 @@ | |
| 1 1 | 
             
            module ActiveRecord
         | 
| 2 | 
            -
               | 
| 3 | 
            -
                @all_loaded_classes ||= []
         | 
| 4 | 
            -
              end
         | 
| 5 | 
            -
             | 
| 6 | 
            -
              def self.last_loaded_class
         | 
| 7 | 
            -
                @last_loaded_class ||= nil
         | 
| 8 | 
            -
              end
         | 
| 2 | 
            +
              extend RubyCodeExtractor::AttachClassInfo
         | 
| 9 3 |  | 
| 10 4 | 
             
              class Base
         | 
| 5 | 
            +
                extend RubyCodeExtractor::BehaviourAccessors
         | 
| 6 | 
            +
             | 
| 11 7 | 
             
                def self.singleton_class
         | 
| 12 8 | 
             
                  Class.new do
         | 
| 13 9 | 
             
                    def send(*_p, **_o); end
         | 
| @@ -15,48 +11,22 @@ module ActiveRecord | |
| 15 11 | 
             
                end
         | 
| 16 12 |  | 
| 17 13 | 
             
                def self.class_info
         | 
| 18 | 
            -
                  return  | 
| 19 | 
            -
             | 
| 20 | 
            -
                  ActiveRecord.last_loaded_class = name
         | 
| 14 | 
            +
                  return ActiveRecord.class_info if ActiveRecord.class_info
         | 
| 21 15 |  | 
| 22 | 
            -
                   | 
| 16 | 
            +
                  ActiveRecord.class_info = {
         | 
| 23 17 | 
             
                    class_name: name
         | 
| 24 18 | 
             
                  }
         | 
| 25 | 
            -
             | 
| 26 | 
            -
                  ActiveRecord.all_loaded_classes << class_info
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                  @class_info
         | 
| 29 19 | 
             
                end
         | 
| 30 20 |  | 
| 31 | 
            -
                 | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
                end
         | 
| 21 | 
            +
                # -------------------------
         | 
| 22 | 
            +
                # Intercept methods
         | 
| 23 | 
            +
                # -------------------------
         | 
| 35 24 |  | 
| 36 | 
            -
                def self. | 
| 37 | 
            -
                  class_info[key] = class_info[key] || []
         | 
| 38 | 
            -
                  if value.is_a?(Array)
         | 
| 39 | 
            -
                    class_info[key] = class_info[key] + value
         | 
| 40 | 
            -
                  else
         | 
| 41 | 
            -
                    class_info[key] << value
         | 
| 42 | 
            -
                  end
         | 
| 43 | 
            -
                end
         | 
| 25 | 
            +
                def self.clear_active_connections!; end
         | 
| 44 26 |  | 
| 45 | 
            -
                 | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
                  class_info[:custom][key] = value
         | 
| 49 | 
            -
                end
         | 
| 50 | 
            -
             | 
| 51 | 
            -
                def self.custom_add(key, value)
         | 
| 52 | 
            -
                  class_info[:custom] = {} unless class_info[:custom]
         | 
| 53 | 
            -
                  class_info[:custom][key] = class_info[:custom][key] || []
         | 
| 54 | 
            -
                  if value.is_a?(Array)
         | 
| 55 | 
            -
                    class_info[:custom][key] = class_info[:custom][key] + value
         | 
| 56 | 
            -
                  else
         | 
| 57 | 
            -
                    class_info[:custom][key] << value
         | 
| 58 | 
            -
                  end
         | 
| 59 | 
            -
                end
         | 
| 27 | 
            +
                # -------------------------
         | 
| 28 | 
            +
                # Behaviour storage methods
         | 
| 29 | 
            +
                # -------------------------
         | 
| 60 30 |  | 
| 61 31 | 
             
                # examples:
         | 
| 62 32 | 
             
                # enum status: { active: 0, archived: 1 }
         | 
| @@ -67,15 +37,36 @@ module ActiveRecord | |
| 67 37 | 
             
                  add(:enum, opts)
         | 
| 68 38 | 
             
                end
         | 
| 69 39 |  | 
| 40 | 
            +
                # def self.attr_accessor(*args)
         | 
| 41 | 
            +
                #   args.each do |arg|
         | 
| 42 | 
            +
                #     self.class_eval("def #{arg};@#{arg};end")
         | 
| 43 | 
            +
                #     self.class_eval("def #{arg}=(val);@#{arg}=val;end")
         | 
| 44 | 
            +
                #   end
         | 
| 45 | 
            +
                # end
         | 
| 46 | 
            +
                # def self.attr_reader(*args)
         | 
| 47 | 
            +
                #   args.each do |arg|
         | 
| 48 | 
            +
                #     self.class_eval("def #{arg};@#{arg};end")
         | 
| 49 | 
            +
                #   end
         | 
| 50 | 
            +
                # end
         | 
| 51 | 
            +
                # def self.attr_writer(*args)
         | 
| 52 | 
            +
                #   args.each do |arg|
         | 
| 53 | 
            +
                #     self.class_eval("def #{arg};@#{arg};end")
         | 
| 54 | 
            +
                #     self.class_eval("def #{arg}=(val);@#{arg}=val;end")
         | 
| 55 | 
            +
                #   end
         | 
| 56 | 
            +
                # end
         | 
| 57 | 
            +
              
         | 
| 70 58 | 
             
                def self.attr_accessor(*names)
         | 
| 59 | 
            +
                  super(*names)
         | 
| 71 60 | 
             
                  add(:attr_accessor, names)
         | 
| 72 61 | 
             
                end
         | 
| 73 62 |  | 
| 74 63 | 
             
                def self.attr_reader(*names)
         | 
| 64 | 
            +
                  super(*names)
         | 
| 75 65 | 
             
                  add(:attr_reader, names)
         | 
| 76 66 | 
             
                end
         | 
| 77 67 |  | 
| 78 68 | 
             
                def self.attr_writer(*names)
         | 
| 69 | 
            +
                  super(*names)
         | 
| 79 70 | 
             
                  add(:attr_writer, names)
         | 
| 80 71 | 
             
                end
         | 
| 81 72 |  | 
| @@ -118,11 +109,15 @@ module ActiveRecord | |
| 118 109 | 
             
                def self.belongs_to(name, on_the_lamb = nil, **opts)
         | 
| 119 110 | 
             
                  lamb_source = lambda_source(on_the_lamb, "belongs_to :#{name},")
         | 
| 120 111 |  | 
| 121 | 
            -
                   | 
| 122 | 
            -
             | 
| 123 | 
            -
             | 
| 124 | 
            -
             | 
| 125 | 
            -
             | 
| 112 | 
            +
                  value = {
         | 
| 113 | 
            +
                    name: name,
         | 
| 114 | 
            +
                    opts: opts,
         | 
| 115 | 
            +
                    block: lamb_source
         | 
| 116 | 
            +
                  }
         | 
| 117 | 
            +
             | 
| 118 | 
            +
                  value[:opts][:foreign_key] = "#{name}_id" unless value[:opts][:foreign_key]
         | 
| 119 | 
            +
             | 
| 120 | 
            +
                  add(:belongs_to, value)
         | 
| 126 121 | 
             
                end
         | 
| 127 122 |  | 
| 128 123 | 
             
                def self.has_many(name, on_the_lamb = nil, **opts)
         | 
| @@ -159,8 +154,6 @@ module ActiveRecord | |
| 159 154 | 
             
                  block_source = nil
         | 
| 160 155 | 
             
                  block_source = lambda_source(block, 'validate') if block_given?
         | 
| 161 156 |  | 
| 162 | 
            -
                  set(:default_scope, opts.merge(block: block_source))
         | 
| 163 | 
            -
             | 
| 164 157 | 
             
                  add(:validate, {
         | 
| 165 158 | 
             
                        names: names,
         | 
| 166 159 | 
             
                        opts: opts,
         | 
| @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            module RubyCodeExtractor
         | 
| 2 | 
            +
              # Class Info hash that contains the class name and any other key/values
         | 
| 3 | 
            +
              # that could be useful when capturing Class information.
         | 
| 4 | 
            +
              module AttachClassInfo
         | 
| 5 | 
            +
                def class_info
         | 
| 6 | 
            +
                  @class_info ||= nil
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                def class_info=(value)
         | 
| 10 | 
            +
                  @class_info = value
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
            end
         | 
| @@ -0,0 +1,39 @@ | |
| 1 | 
            +
            module RubyCodeExtractor
         | 
| 2 | 
            +
              # When you intercept a method call, you can persist the captured paramaters
         | 
| 3 | 
            +
              # into a Hash, the Hash Key should be the method name and the value should
         | 
| 4 | 
            +
              # be a Hash with captured values.
         | 
| 5 | 
            +
              #
         | 
| 6 | 
            +
              # Use set/add for standard Rails DSL methods
         | 
| 7 | 
            +
              # Use custom_set/custom_add for non standard or 3rd party GEM methods
         | 
| 8 | 
            +
              module BehaviourAccessors
         | 
| 9 | 
            +
                def set(key, value)
         | 
| 10 | 
            +
                  class_info[key] = class_info[key] || {}
         | 
| 11 | 
            +
                  class_info[key] = value
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                def add(key, value)
         | 
| 15 | 
            +
                  class_info[key] = class_info[key] || []
         | 
| 16 | 
            +
                  if value.is_a?(Array)
         | 
| 17 | 
            +
                    class_info[key] = class_info[key] + value
         | 
| 18 | 
            +
                  else
         | 
| 19 | 
            +
                    class_info[key] << value
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                def custom_set(key, value = {})
         | 
| 24 | 
            +
                  class_info[:custom] = {} unless class_info[:custom]
         | 
| 25 | 
            +
                  class_info[:custom][key] = class_info[:custom][key] || {}
         | 
| 26 | 
            +
                  class_info[:custom][key] = value
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                def custom_add(key, value)
         | 
| 30 | 
            +
                  class_info[:custom] = {} unless class_info[:custom]
         | 
| 31 | 
            +
                  class_info[:custom][key] = class_info[:custom][key] || []
         | 
| 32 | 
            +
                  if value.is_a?(Array)
         | 
| 33 | 
            +
                    class_info[:custom][key] = class_info[:custom][key] + value
         | 
| 34 | 
            +
                  else
         | 
| 35 | 
            +
                    class_info[:custom][key] << value
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
            end
         | 
| @@ -0,0 +1,47 @@ | |
| 1 | 
            +
            KDomain.configure do |config|
         | 
| 2 | 
            +
              config.default_main_key  = nil
         | 
| 3 | 
            +
              config.default_traits    = %i[
         | 
| 4 | 
            +
                trait1
         | 
| 5 | 
            +
                trait2
         | 
| 6 | 
            +
                trait3
         | 
| 7 | 
            +
              ]
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              config.fallback_keys              = %i[
         | 
| 10 | 
            +
                name
         | 
| 11 | 
            +
                category
         | 
| 12 | 
            +
                description
         | 
| 13 | 
            +
                global
         | 
| 14 | 
            +
                key
         | 
| 15 | 
            +
                klass
         | 
| 16 | 
            +
                message
         | 
| 17 | 
            +
                lead_source
         | 
| 18 | 
            +
                body
         | 
| 19 | 
            +
                status
         | 
| 20 | 
            +
                subject
         | 
| 21 | 
            +
              ]
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              config.register_entity(:action_log              , main_key: :action)
         | 
| 24 | 
            +
              config.register_entity(:backup                  , main_key: :filename)
         | 
| 25 | 
            +
              config.register_entity(:campaign_calendar_entry , main_key: :date)
         | 
| 26 | 
            +
              config.register_entity(:campaign_count          , main_key: :total_count)
         | 
| 27 | 
            +
              config.register_entity(:comment                 , main_key: :title)
         | 
| 28 | 
            +
              config.register_entity(:contact_group           , main_key: :email)
         | 
| 29 | 
            +
              config.register_entity(:email_alias             , main_key: :email)
         | 
| 30 | 
            +
              config.register_entity(:unsubscribe             , main_key: :email)
         | 
| 31 | 
            +
              config.register_entity(:email_credential        , main_key: :credentials)
         | 
| 32 | 
            +
              config.register_entity(:email_soft_bounce       , main_key: :email_address)
         | 
| 33 | 
            +
              config.register_entity(:suppressed_address      , main_key: :email_address)
         | 
| 34 | 
            +
              config.register_entity(:email_template_value    , main_key: :value)
         | 
| 35 | 
            +
              config.register_entity(:email_validation        , main_key: :address)
         | 
| 36 | 
            +
              config.register_entity(:enterprise_togglefield  , main_key: :field)
         | 
| 37 | 
            +
              config.register_entity(:event_stat              , main_key: :event_type)
         | 
| 38 | 
            +
              config.register_entity(:holiday_date            , main_key: :date)
         | 
| 39 | 
            +
              config.register_entity(:job_stat                , main_key: :job_name)
         | 
| 40 | 
            +
              config.register_entity(:original_user           , main_key: :target_user_id)
         | 
| 41 | 
            +
              config.register_entity(:pending_attachment      , main_key: :file_name)
         | 
| 42 | 
            +
              config.register_entity(:sales_base_tax          , main_key: :total)
         | 
| 43 | 
            +
              config.register_entity(:shared_user             , main_key: :shared_id)
         | 
| 44 | 
            +
              config.register_entity(:task_repeat             , main_key: :repeat_type)
         | 
| 45 | 
            +
              config.register_entity(:user                    , main_key: :username)
         | 
| 46 | 
            +
              config.register_entity(:token                   , main_key: :gmail_history_id)
         | 
| 47 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: k_domain
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 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:  | 
| 11 | 
            +
            date: 2022-04-08 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         | 
| @@ -74,6 +74,9 @@ executables: [] | |
| 74 74 | 
             
            extensions: []
         | 
| 75 75 | 
             
            extra_rdoc_files: []
         | 
| 76 76 | 
             
            files:
         | 
| 77 | 
            +
            - ".builders/boot.rb"
         | 
| 78 | 
            +
            - ".builders/generators/configuration_generator.rb"
         | 
| 79 | 
            +
            - ".builders/run.rb"
         | 
| 77 80 | 
             
            - ".github/workflows/main.yml"
         | 
| 78 81 | 
             
            - ".gitignore"
         | 
| 79 82 | 
             
            - ".rspec"
         | 
| @@ -95,33 +98,32 @@ files: | |
| 95 98 | 
             
            - hooks/update-version
         | 
| 96 99 | 
             
            - k_domain.gemspec
         | 
| 97 100 | 
             
            - lib/k_domain.rb
         | 
| 101 | 
            +
            - lib/k_domain/config/_.rb
         | 
| 102 | 
            +
            - lib/k_domain/config/config.rb
         | 
| 103 | 
            +
            - lib/k_domain/config/configuration.rb
         | 
| 98 104 | 
             
            - lib/k_domain/domain_model/load.rb
         | 
| 99 105 | 
             
            - lib/k_domain/domain_model/transform.rb
         | 
| 100 106 | 
             
            - lib/k_domain/domain_model/transform_steps/_.rb
         | 
| 101 107 | 
             
            - lib/k_domain/domain_model/transform_steps/step.rb
         | 
| 102 | 
            -
            - lib/k_domain/domain_model/transform_steps/ | 
| 103 | 
            -
            - lib/k_domain/domain_model/transform_steps/ | 
| 104 | 
            -
            - lib/k_domain/domain_model/transform_steps/ | 
| 105 | 
            -
            - lib/k_domain/domain_model/transform_steps/ | 
| 106 | 
            -
            - lib/k_domain/domain_model/transform_steps/ | 
| 107 | 
            -
            - lib/k_domain/domain_model/transform_steps/ | 
| 108 | 
            -
            - lib/k_domain/domain_model/transform_steps/ | 
| 108 | 
            +
            - lib/k_domain/domain_model/transform_steps/step1_db_schema.rb
         | 
| 109 | 
            +
            - lib/k_domain/domain_model/transform_steps/step20_dictionary.rb
         | 
| 110 | 
            +
            - lib/k_domain/domain_model/transform_steps/step2_domain_models.rb
         | 
| 111 | 
            +
            - lib/k_domain/domain_model/transform_steps/step4_rails_resource_models.rb
         | 
| 112 | 
            +
            - lib/k_domain/domain_model/transform_steps/step5_rails_resource_routes.rb
         | 
| 113 | 
            +
            - lib/k_domain/domain_model/transform_steps/step6_rails_structure_models.rb
         | 
| 114 | 
            +
            - lib/k_domain/domain_model/transform_steps/step7_rails_structure_controllers.rb
         | 
| 115 | 
            +
            - lib/k_domain/domain_model/transform_steps/step8_domain_columns.rb
         | 
| 116 | 
            +
            - lib/k_domain/rails_code_extractor/_.rb
         | 
| 117 | 
            +
            - lib/k_domain/rails_code_extractor/extract_controller.rb
         | 
| 109 118 | 
             
            - lib/k_domain/rails_code_extractor/extract_model.rb
         | 
| 110 | 
            -
            - lib/k_domain/rails_code_extractor/ | 
| 119 | 
            +
            - lib/k_domain/rails_code_extractor/shim_loader.rb
         | 
| 111 120 | 
             
            - lib/k_domain/raw_db_schema/load.rb
         | 
| 112 121 | 
             
            - lib/k_domain/raw_db_schema/transform.rb
         | 
| 113 122 | 
             
            - lib/k_domain/schemas/_.rb
         | 
| 114 | 
            -
            - lib/k_domain/schemas/database | 
| 115 | 
            -
            - lib/k_domain/schemas/database/foreign_key.rb
         | 
| 116 | 
            -
            - lib/k_domain/schemas/database/index.rb
         | 
| 117 | 
            -
            - lib/k_domain/schemas/database/schema.rb
         | 
| 118 | 
            -
            - lib/k_domain/schemas/database/table.rb
         | 
| 123 | 
            +
            - lib/k_domain/schemas/database.rb
         | 
| 119 124 | 
             
            - lib/k_domain/schemas/dictionary.rb
         | 
| 120 | 
            -
            - lib/k_domain/schemas/domain | 
| 121 | 
            -
            - lib/k_domain/schemas/domain/domain.rb
         | 
| 125 | 
            +
            - lib/k_domain/schemas/domain.rb
         | 
| 122 126 | 
             
            - lib/k_domain/schemas/domain/erd_file.rb
         | 
| 123 | 
            -
            - lib/k_domain/schemas/domain/models/column.rb
         | 
| 124 | 
            -
            - lib/k_domain/schemas/domain/models/model.rb
         | 
| 125 127 | 
             
            - lib/k_domain/schemas/domain/old/belongs_to.rb
         | 
| 126 128 | 
             
            - lib/k_domain/schemas/domain/old/column_old.rb
         | 
| 127 129 | 
             
            - lib/k_domain/schemas/domain/old/domain_statistics.rb
         | 
| @@ -139,12 +141,21 @@ files: | |
| 139 141 | 
             
            - lib/k_domain/schemas/domain/old/validate.rb
         | 
| 140 142 | 
             
            - lib/k_domain/schemas/domain/old/validates.rb
         | 
| 141 143 | 
             
            - lib/k_domain/schemas/domain_model.rb
         | 
| 144 | 
            +
            - lib/k_domain/schemas/domain_types.rb
         | 
| 142 145 | 
             
            - lib/k_domain/schemas/investigate.rb
         | 
| 143 146 | 
             
            - lib/k_domain/schemas/rails_resource.rb
         | 
| 147 | 
            +
            - lib/k_domain/schemas/rails_structure.rb
         | 
| 144 148 | 
             
            - lib/k_domain/version.rb
         | 
| 145 | 
            -
            - templates/ | 
| 146 | 
            -
            - templates/ | 
| 149 | 
            +
            - templates/custom/action_controller.rb
         | 
| 150 | 
            +
            - templates/custom/controller_interceptors.rb
         | 
| 151 | 
            +
            - templates/custom/model_interceptors.rb
         | 
| 147 152 | 
             
            - templates/load_schema.rb
         | 
| 153 | 
            +
            - templates/rails/action_controller.rb
         | 
| 154 | 
            +
            - templates/rails/active_record.rb
         | 
| 155 | 
            +
            - templates/ruby_code_extractor/attach_class_info.rb
         | 
| 156 | 
            +
            - templates/ruby_code_extractor/behaviour_accessors.rb
         | 
| 157 | 
            +
            - templates/sample_config.rb
         | 
| 158 | 
            +
            - templates/simple/controller_interceptors.rb
         | 
| 148 159 | 
             
            homepage: http://appydave.com/gems/k-domain
         | 
| 149 160 | 
             
            licenses:
         | 
| 150 161 | 
             
            - MIT
         | 
| @@ -167,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 167 178 | 
             
                - !ruby/object:Gem::Version
         | 
| 168 179 | 
             
                  version: '0'
         | 
| 169 180 | 
             
            requirements: []
         | 
| 170 | 
            -
            rubygems_version: 3.2. | 
| 181 | 
            +
            rubygems_version: 3.2.33
         | 
| 171 182 | 
             
            signing_key:
         | 
| 172 183 | 
             
            specification_version: 4
         | 
| 173 184 | 
             
            summary: K Domain builds complex domain schemas by combining the database schema with
         |