stimpack 1.0.0.alpha3 → 1.0.0.alpha4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 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