mimi-core 0.2.0 → 1.0.0
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/.yardopts +1 -0
- data/README.md +199 -2
- data/lib/mimi/core/core_ext.rb +89 -2
- data/lib/mimi/core/inheritable_property.rb +173 -0
- data/lib/mimi/core/manifest.rb +538 -0
- data/lib/mimi/core/module.rb +80 -16
- data/lib/mimi/core/rake.rb +46 -0
- data/lib/mimi/core/version.rb +1 -1
- data/lib/mimi/core.rb +32 -2
- data/mimi-core.gemspec +1 -2
- metadata +8 -19
    
        data/lib/mimi/core/rake.rb
    CHANGED
    
    | @@ -1,7 +1,53 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # When required, `mimi/core/rake` loads all rake tasks exported by *loaded* modules
         | 
| 4 | 
            +
            # and current application (found under `app_root_path`).
         | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
            # Usage:
         | 
| 7 | 
            +
            #
         | 
| 8 | 
            +
            # ```ruby
         | 
| 9 | 
            +
            # # lib/my_app.rb
         | 
| 10 | 
            +
            # require 'mimi/core'
         | 
| 11 | 
            +
            # require 'mimi/db'
         | 
| 12 | 
            +
            #
         | 
| 13 | 
            +
            #
         | 
| 14 | 
            +
            # # lib/tasks/my_task.rake
         | 
| 15 | 
            +
            # desc 'My application task'
         | 
| 16 | 
            +
            # task :my_task do
         | 
| 17 | 
            +
            #   puts
         | 
| 18 | 
            +
            # end
         | 
| 19 | 
            +
            #
         | 
| 20 | 
            +
            #
         | 
| 21 | 
            +
            # # Rakefile
         | 
| 22 | 
            +
            # require_relative 'lib/my_app'
         | 
| 23 | 
            +
            # require 'mimi/core/rake'
         | 
| 24 | 
            +
            # ```
         | 
| 25 | 
            +
            #
         | 
| 26 | 
            +
            # This makes rake tasks exported by `mimi-db` and other loaded modules available:
         | 
| 27 | 
            +
            #
         | 
| 28 | 
            +
            # ```ruby
         | 
| 29 | 
            +
            # $ rake -T
         | 
| 30 | 
            +
            # rake db:clear                   # Clear database
         | 
| 31 | 
            +
            # rake db:config                  # Show database config
         | 
| 32 | 
            +
            # rake db:create                  # Create database
         | 
| 33 | 
            +
            # ...
         | 
| 34 | 
            +
            # rake my_task                    # My application task
         | 
| 35 | 
            +
            # ```
         | 
| 36 | 
            +
            #
         | 
| 37 | 
            +
            #
         | 
| 1 38 | 
             
            module Mimi
         | 
| 2 39 | 
             
              module Core
         | 
| 40 | 
            +
                #
         | 
| 41 | 
            +
                # Mimi::Core::Rake module contains various rake helpers
         | 
| 42 | 
            +
                #
         | 
| 3 43 | 
             
                module Rake
         | 
| 44 | 
            +
                  #
         | 
| 45 | 
            +
                  # Loads rake tasks exported by *loaded* modules
         | 
| 46 | 
            +
                  #
         | 
| 4 47 | 
             
                  def self.load_rake_tasks
         | 
| 48 | 
            +
                    unless Mimi.respond_to?(:app_root_path)
         | 
| 49 | 
            +
                      raise 'Cannot load rake tasks before mimi-core module is loaded'
         | 
| 50 | 
            +
                    end
         | 
| 5 51 | 
             
                    app_and_modules_paths = [Mimi.app_root_path] + Mimi.loaded_modules_paths
         | 
| 6 52 | 
             
                    rakefiles = app_and_modules_paths.map do |path|
         | 
| 7 53 | 
             
                      Pathname.glob(path.join('lib', 'tasks', '**', '*.rake'))
         | 
    
        data/lib/mimi/core/version.rb
    CHANGED
    
    
    
        data/lib/mimi/core.rb
    CHANGED
    
    | @@ -1,6 +1,11 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            require 'pathname'
         | 
| 2 4 |  | 
| 3 5 | 
             
            module Mimi
         | 
| 6 | 
            +
              #
         | 
| 7 | 
            +
              # `Mimi::Core` extends the `Mimi` namespace with its instance methods.
         | 
| 8 | 
            +
              #
         | 
| 4 9 | 
             
              module Core
         | 
| 5 10 | 
             
                # Returns the application's root path.
         | 
| 6 11 | 
             
                #
         | 
| @@ -8,12 +13,17 @@ module Mimi | |
| 8 13 | 
             
                # If you need to use a different path as the app root path,
         | 
| 9 14 | 
             
                # use #app_root_path=()
         | 
| 10 15 | 
             
                #
         | 
| 16 | 
            +
                # @return [Pathname]
         | 
| 17 | 
            +
                #
         | 
| 11 18 | 
             
                def app_root_path
         | 
| 12 19 | 
             
                  @app_root_path ||= Pathname.pwd.expand_path
         | 
| 13 20 | 
             
                end
         | 
| 14 21 |  | 
| 15 22 | 
             
                # Sets the application's root path explicitly
         | 
| 16 23 | 
             
                #
         | 
| 24 | 
            +
                # @param path [String,Pathname]
         | 
| 25 | 
            +
                # @return [Pathname]
         | 
| 26 | 
            +
                #
         | 
| 17 27 | 
             
                def app_root_path=(path)
         | 
| 18 28 | 
             
                  @app_root_path = Pathname.new(path).expand_path
         | 
| 19 29 | 
             
                end
         | 
| @@ -24,12 +34,21 @@ module Mimi | |
| 24 34 | 
             
                #   Mimi.app_root_path # => /path/to/my_app
         | 
| 25 35 | 
             
                #   Mimi.app_path_to('app', 'models') # => /path/to/my_app/app/models
         | 
| 26 36 | 
             
                #
         | 
| 37 | 
            +
                # @param args [Array<String,Pathname>]
         | 
| 38 | 
            +
                # @return [Pathname]
         | 
| 39 | 
            +
                #
         | 
| 27 40 | 
             
                def app_path_to(*args)
         | 
| 28 41 | 
             
                  app_root_path.join(*args)
         | 
| 29 42 | 
             
                end
         | 
| 30 43 |  | 
| 31 44 | 
             
                # Use the given module
         | 
| 32 45 | 
             
                #
         | 
| 46 | 
            +
                # Includes the module in the list of *used* Mimi modules. Used modules are automatically
         | 
| 47 | 
            +
                # started/stopped when Mimi.start is performed, in the order of appending.
         | 
| 48 | 
            +
                #
         | 
| 49 | 
            +
                # @param mod [Module]
         | 
| 50 | 
            +
                # @param opts [Hash,nil] optional parameters to be passed to the module's .configure method
         | 
| 51 | 
            +
                #
         | 
| 33 52 | 
             
                def use(mod, opts = {})
         | 
| 34 53 | 
             
                  raise ArgumentError, "#{mod} is not a Mimi module" unless mod < Mimi::Core::Module
         | 
| 35 54 | 
             
                  mod.configure(opts)
         | 
| @@ -37,7 +56,9 @@ module Mimi | |
| 37 56 | 
             
                  true
         | 
| 38 57 | 
             
                end
         | 
| 39 58 |  | 
| 40 | 
            -
                # Returns the list of loaded (require | 
| 59 | 
            +
                # Returns the list of loaded (require'd) modules
         | 
| 60 | 
            +
                #
         | 
| 61 | 
            +
                # @return [Array<Module>]
         | 
| 41 62 | 
             
                #
         | 
| 42 63 | 
             
                def loaded_modules
         | 
| 43 64 | 
             
                  @loaded_modules ||= []
         | 
| @@ -45,18 +66,25 @@ module Mimi | |
| 45 66 |  | 
| 46 67 | 
             
                # Returns the list of used modules
         | 
| 47 68 | 
             
                #
         | 
| 69 | 
            +
                # @return [Array<Module>]
         | 
| 70 | 
            +
                #
         | 
| 48 71 | 
             
                def used_modules
         | 
| 49 72 | 
             
                  @used_modules ||= []
         | 
| 50 73 | 
             
                end
         | 
| 51 74 |  | 
| 52 75 | 
             
                # Returns all loaded module paths, which are defined (non nil)
         | 
| 53 76 | 
             
                #
         | 
| 77 | 
            +
                # @return [Array<Pathname>]
         | 
| 78 | 
            +
                #
         | 
| 54 79 | 
             
                def loaded_modules_paths
         | 
| 55 80 | 
             
                  loaded_modules.map(&:module_path).reject(&:nil?)
         | 
| 56 81 | 
             
                end
         | 
| 57 82 |  | 
| 58 83 | 
             
                # Requires all files that match the glob.
         | 
| 59 84 | 
             
                #
         | 
| 85 | 
            +
                # @param glob [String]
         | 
| 86 | 
            +
                # @param root_path [Pathname,nil] if not specified, app_root_path will be used
         | 
| 87 | 
            +
                #
         | 
| 60 88 | 
             
                def require_files(glob, root_path = app_root_path)
         | 
| 61 89 | 
             
                  Pathname.glob(root_path.join(glob)).each do |filename|
         | 
| 62 90 | 
             
                    require filename.expand_path
         | 
| @@ -81,5 +109,7 @@ module Mimi | |
| 81 109 | 
             
            end # module Mimi
         | 
| 82 110 |  | 
| 83 111 | 
             
            require_relative 'core/version'
         | 
| 84 | 
            -
            require_relative 'core/module'
         | 
| 85 112 | 
             
            require_relative 'core/core_ext'
         | 
| 113 | 
            +
            require_relative 'core/inheritable_property'
         | 
| 114 | 
            +
            require_relative 'core/module'
         | 
| 115 | 
            +
            require_relative 'core/manifest'
         | 
    
        data/mimi-core.gemspec
    CHANGED
    
    | @@ -27,8 +27,7 @@ Gem::Specification.new do |spec| | |
| 27 27 | 
             
              spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
         | 
| 28 28 | 
             
              spec.require_paths = ['lib']
         | 
| 29 29 |  | 
| 30 | 
            -
              spec.add_dependency ' | 
| 31 | 
            -
              spec.add_dependency 'hashie', '~> 3.4'
         | 
| 30 | 
            +
              spec.add_dependency 'hashie', '~> 3.6'
         | 
| 32 31 |  | 
| 33 32 | 
             
              spec.add_development_dependency 'bundler', '~> 1.11'
         | 
| 34 33 | 
             
              spec.add_development_dependency 'pry', '~> 0.10'
         | 
    
        metadata
    CHANGED
    
    | @@ -1,43 +1,29 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: mimi-core
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 1.0.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Alex Kukushkin
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2019-05-16 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            -
              name: activesupport
         | 
| 15 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            -
                requirements:
         | 
| 17 | 
            -
                - - "~>"
         | 
| 18 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: '5.0'
         | 
| 20 | 
            -
              type: :runtime
         | 
| 21 | 
            -
              prerelease: false
         | 
| 22 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            -
                requirements:
         | 
| 24 | 
            -
                - - "~>"
         | 
| 25 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version: '5.0'
         | 
| 27 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 14 | 
             
              name: hashie
         | 
| 29 15 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 16 | 
             
                requirements:
         | 
| 31 17 | 
             
                - - "~>"
         | 
| 32 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version: '3. | 
| 19 | 
            +
                    version: '3.6'
         | 
| 34 20 | 
             
              type: :runtime
         | 
| 35 21 | 
             
              prerelease: false
         | 
| 36 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 23 | 
             
                requirements:
         | 
| 38 24 | 
             
                - - "~>"
         | 
| 39 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version: '3. | 
| 26 | 
            +
                    version: '3.6'
         | 
| 41 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 28 | 
             
              name: bundler
         | 
| 43 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -104,6 +90,7 @@ files: | |
| 104 90 | 
             
            - ".gitignore"
         | 
| 105 91 | 
             
            - ".rspec"
         | 
| 106 92 | 
             
            - ".travis.yml"
         | 
| 93 | 
            +
            - ".yardopts"
         | 
| 107 94 | 
             
            - CODE_OF_CONDUCT.md
         | 
| 108 95 | 
             
            - Gemfile
         | 
| 109 96 | 
             
            - LICENSE.txt
         | 
| @@ -113,6 +100,8 @@ files: | |
| 113 100 | 
             
            - bin/setup
         | 
| 114 101 | 
             
            - lib/mimi/core.rb
         | 
| 115 102 | 
             
            - lib/mimi/core/core_ext.rb
         | 
| 103 | 
            +
            - lib/mimi/core/inheritable_property.rb
         | 
| 104 | 
            +
            - lib/mimi/core/manifest.rb
         | 
| 116 105 | 
             
            - lib/mimi/core/module.rb
         | 
| 117 106 | 
             
            - lib/mimi/core/rake.rb
         | 
| 118 107 | 
             
            - lib/mimi/core/version.rb
         | 
| @@ -138,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 138 127 | 
             
                  version: '0'
         | 
| 139 128 | 
             
            requirements: []
         | 
| 140 129 | 
             
            rubyforge_project: 
         | 
| 141 | 
            -
            rubygems_version: 2. | 
| 130 | 
            +
            rubygems_version: 2.6.14.4
         | 
| 142 131 | 
             
            signing_key: 
         | 
| 143 132 | 
             
            specification_version: 4
         | 
| 144 133 | 
             
            summary: Core module for mimi, microframework for microservices
         |