stimpack 1.0.0.alpha3 → 1.0.0.alpha4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0ea2ffb8a9efd6a3cbfa52d91072a1a1f7d4c853bcd7f0caed17d67565941c3d
4
- data.tar.gz: fb9a47e3e6fcf899979d161e1859560dc28d0c9317316e551205cddb08c772fa
3
+ metadata.gz: 64cf8eebac14e77ccb68d74b80daf0e76184388a2da40a42934322f640b774e2
4
+ data.tar.gz: 9b48e360e8e8e60f0213c33bcbe192c5267474b9ee6aebc1d223228225d7835f
5
5
  SHA512:
6
- metadata.gz: 8a69a1f67af1db2eabaab480ad380330f0d0d35e95a1ab552a5303a9dec4c5956547b4c134d5af1b70758f712b3203aa327729b48a6d0d7e54d2db8ee135164a
7
- data.tar.gz: 0bf2816d1acd26f852caaa4399bd3feaad5b4c30ab4b15065291dfcf1c00571c7cbb08fae92664e52a6732ad998ec08d1cc375330cd53f7b731bc0b4fef400fb
6
+ metadata.gz: f3f9a50ff656ff1104daee1f0a5b9c22cb107c7341094a2198eac38262ae46ec685ca83bcbd3b5ce2ab7d0fca4a78aca87e447f0f534483ad3334be659ca7e6e
7
+ data.tar.gz: 062c344182ceabbe779d1504c9baba9226334df3ce067a0c821e604172c74c55f72e19cdf452fef790f70cfb4476c364ecbf69c1c637c8d9af7589ffdb4ad95a
data/lib/stimpack.rb CHANGED
@@ -4,14 +4,11 @@ require "rails"
4
4
  module Stimpack
5
5
  extend ActiveSupport::Autoload
6
6
 
7
- # autoload :Require
8
- autoload :Autoloaders
9
7
  autoload :Integrations
10
8
  autoload :Packs
11
9
  autoload :Railtie
12
10
  autoload :Settings
13
11
  autoload :Stim
14
- autoload :ZeitwerkProxy
15
12
 
16
13
  class Error < StandardError; end
17
14
 
@@ -19,9 +16,6 @@ module Stimpack
19
16
  def start!
20
17
  @started = @started ? return : true
21
18
 
22
- # Override Rails' autoloader accessors.
23
- # Rails::Autoloaders.singleton_class.prepend(Autoloaders)
24
-
25
19
  Packs.resolve
26
20
 
27
21
  install_integrations
@@ -29,15 +23,6 @@ module Stimpack
29
23
 
30
24
  def finalize!
31
25
  @finalized = @finalized ? return : true
32
-
33
- # Require.setup
34
- end
35
-
36
- def autoloader(original)
37
- return original if @finalized
38
-
39
- @autoloader_proxies ||= {}
40
- @autoloader_proxies[original] ||= ZeitwerkProxy.new(original)
41
26
  end
42
27
 
43
28
  def [](name)
@@ -54,5 +39,3 @@ module Stimpack
54
39
  end
55
40
 
56
41
  require "stimpack/railtie"
57
- # require "stimpack/require"
58
- # require "stimpack/kernel"
@@ -5,19 +5,21 @@ require "rails"
5
5
  module Stimpack
6
6
  module Packs
7
7
  PATH = Pathname.new("packs").freeze
8
+ PACK_CLASS = "Pack".freeze
8
9
 
9
10
  class << self
10
11
  def resolve
11
- PATH.glob("**/#{Settings::PACKWERK_PACKAGE_CONFIG}").each do |path|
12
+ PATH.glob("**/#{Settings::PACK_CONFIG}").each do |path|
12
13
  path = path.dirname
13
14
  create(path.relative_path_from(PATH).to_s, path.expand_path)
14
15
  end
15
16
  end
16
17
 
17
18
  def create(name, path)
18
- pack_class = ActiveSupport::Inflector.camelize(name).gsub("::", "_")
19
- stim = Stim.new(path)
20
- @packs[name] = const_set(pack_class, Class.new(Rails::Engine)).include(stim)
19
+ settings = Settings.new(name, path)
20
+ namespace = create_namespace(settings.engine? ? Object : self, name)
21
+ stim = Stim.new(settings, namespace)
22
+ @packs[name] = namespace.const_set(PACK_CLASS, Class.new(Rails::Engine)).include(stim)
21
23
  end
22
24
 
23
25
  def find(path)
@@ -35,6 +37,19 @@ module Stimpack
35
37
  def each(*args, &block)
36
38
  @packs.each_value(*args, &block)
37
39
  end
40
+
41
+ private
42
+
43
+ def create_namespace(base, name)
44
+ namespace = ActiveSupport::Inflector.camelize(name)
45
+ namespace.split("::").reduce(base) do |current_base, mod|
46
+ if current_base.const_defined?(mod)
47
+ current_base.const_get(mod)
48
+ else
49
+ current_base.const_set(mod, Module.new)
50
+ end
51
+ end
52
+ end
38
53
  end
39
54
 
40
55
  @packs = {}
@@ -2,39 +2,32 @@
2
2
 
3
3
  module Stimpack
4
4
  class Settings
5
- PACKWERK_PACKAGE_CONFIG = "package.yml"
5
+ PACK_CONFIG = "package.yml"
6
6
 
7
- def initialize(pack)
8
- @pack = pack
7
+ attr_reader :name
8
+ attr_reader :path
9
9
 
10
- package_config = YAML.load_file(pack.root.join(PACKWERK_PACKAGE_CONFIG)) || {}
11
- @config = package_config.fetch("metadata", {}).freeze
12
- end
13
-
14
- def path
15
- @pack.called_from
10
+ def initialize(name, path)
11
+ @name = name
12
+ @path = path
16
13
  end
17
14
 
18
15
  def relative_path
19
- @relative_path ||= path.relative_path_from(Rails.root)
20
- end
21
-
22
- def name
23
- @name ||= ActiveSupport::Inflector.underscore(namespace.name)
16
+ Rails.root.relative_path_from(@path)
24
17
  end
25
18
 
26
- def namespace
27
- @pack.module_parent
19
+ def engine
20
+ config.fetch("engine", false)
28
21
  end
22
+ alias_method :engine?, :engine
29
23
 
30
- # def implicit_namespace
31
- # @config.fetch("implicit_namespace", true)
32
- # end
33
- # alias_method :implicit_namespace?, :implicit_namespace
24
+ private
34
25
 
35
- def isolate_namespace
36
- @config.fetch("isolate_namespace", false)
26
+ def config
27
+ @config ||= begin
28
+ package_config = YAML.load_file(path.join(PACK_CONFIG))
29
+ package_config.fetch("metadata", {}).freeze
30
+ end
37
31
  end
38
- alias_method :isolate_namespace?, :isolate_namespace
39
32
  end
40
33
  end
data/lib/stimpack/stim.rb CHANGED
@@ -1,32 +1,26 @@
1
1
  module Stimpack
2
2
  class Stim < Module
3
- def initialize(path)
4
- @path = path
3
+ def initialize(settings, namespace)
4
+ @settings = settings
5
+ @namespace = namespace
5
6
  super()
6
7
  end
7
8
 
8
9
  def included(engine)
9
- engine.called_from = @path
10
+ engine.attr_accessor(:settings)
11
+ engine.settings = @settings
12
+ engine.called_from = @settings.path
10
13
  engine.extend(ClassMethods)
11
- settings = engine.settings
12
14
 
13
- if settings.isolate_namespace?
14
- engine.isolate_namespace(settings.namespace)
15
+ if @settings.engine?
16
+ engine.isolate_namespace(@namespace)
15
17
  end
16
-
17
- # if settings.implicit_namespace?
18
- # engine.paths["lib"].skip_load_path!
19
- # end
20
18
  end
21
19
 
22
20
  module ClassMethods
23
21
  def find_root(_from)
24
22
  called_from
25
23
  end
26
-
27
- def settings
28
- @settings ||= Stimpack::Settings.new(self)
29
- end
30
24
  end
31
25
  end
32
26
  end
@@ -1,3 +1,3 @@
1
1
  module Stimpack
2
- VERSION = "1.0.0.alpha3".freeze
2
+ VERSION = "1.0.0.alpha4".freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stimpack
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.alpha3
4
+ version: 1.0.0.alpha4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ngan Pham
@@ -63,18 +63,14 @@ files:
63
63
  - bin/console
64
64
  - bin/setup
65
65
  - lib/stimpack.rb
66
- - lib/stimpack/autoloaders.rb
67
66
  - lib/stimpack/integrations.rb
68
67
  - lib/stimpack/integrations/factory_bot.rb
69
68
  - lib/stimpack/integrations/rspec.rb
70
- - lib/stimpack/kernel.rb
71
69
  - lib/stimpack/packs.rb
72
70
  - lib/stimpack/railtie.rb
73
- - lib/stimpack/require.rb
74
71
  - lib/stimpack/settings.rb
75
72
  - lib/stimpack/stim.rb
76
73
  - lib/stimpack/version.rb
77
- - lib/stimpack/zeitwerk_proxy.rb
78
74
  homepage: https://github.com/Gusto/stimpack
79
75
  licenses: []
80
76
  metadata:
@@ -1,11 +0,0 @@
1
- module Stimpack
2
- module Autoloaders
3
- def main
4
- Stimpack.autoloader(super)
5
- end
6
-
7
- def once
8
- Stimpack.autoloader(super)
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Kernel
4
- module_function
5
-
6
- alias_method :stimpack_original_require, :require
7
-
8
- def require(path)
9
- stimpack_original_require(Stimpack::Require.resolve(path) || path)
10
- end
11
- end
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Stimpack
4
- class Require
5
- IGNORED_PATH_PREFIXES = ["/", "./"].freeze
6
- RUBY_EXTENSION = ".rb"
7
-
8
- include Singleton
9
-
10
- attr_accessor :enabled
11
-
12
- def self.resolve(path)
13
- instance.resolve(path)
14
- end
15
-
16
- def self.setup
17
- instance.setup
18
- end
19
-
20
- def initialize
21
- @packs = {}
22
- end
23
-
24
- def setup
25
- @setup = @setup ? return : true
26
-
27
- Packs.each do |pack|
28
- if pack.settings.implicit_namespace?
29
- @packs["#{pack.settings.name}/"] = "#{pack.paths["lib"].first}/"
30
- end
31
- end
32
- end
33
-
34
- def resolve(path)
35
- path = path.to_s
36
- return if path.start_with?(*IGNORED_PATH_PREFIXES)
37
-
38
- @packs.find do |pack_path, full_path|
39
- if path.start_with?(pack_path)
40
- full_pack_path = path.sub(pack_path, full_path)
41
- full_pack_path.concat(RUBY_EXTENSION) unless full_pack_path.end_with?(RUBY_EXTENSION)
42
- return File.exist?(full_pack_path) && full_pack_path
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,24 +0,0 @@
1
- require "active_support"
2
-
3
- module Stimpack
4
- class ZeitwerkProxy
5
- delegate_missing_to :@loader
6
-
7
- def initialize(loader)
8
- @loader = loader
9
- end
10
-
11
- def push_dir(path, namespace: Object)
12
- @loader.push_dir(path, namespace: _resolve_namespace(path) || namespace)
13
- end
14
-
15
- private
16
-
17
- def _resolve_namespace(path)
18
- pack = Packs.find(path)
19
- return unless pack
20
-
21
- pack.settings.namespace if pack.settings.implicit_namespace?
22
- end
23
- end
24
- end