asset_finder 1.6.0 → 2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e1dc0bac12859ae8c078f18e7ced136ff53e7f78e5e1f8246a842c95653d1093
4
- data.tar.gz: fe8e0498025196c99593e760c4dfbe8791031b2e8ff64d997694088e614e4bd3
3
+ metadata.gz: 6b42d4d846d0942fc672608a5d18a3455c04f08039d24fe1231141696c5268a5
4
+ data.tar.gz: bcd437ad57e470d1de5859dcb5aaa6f431720bb6a428cc48221c400e0d33b146
5
5
  SHA512:
6
- metadata.gz: b749d80652a5fbc9ae05f1f4eb0c6256c953c1ca178bf0ce01516ce36b1c197a8698983748c19047b68332149f25ec37a5b27b78325e05841291777bdb641d6f
7
- data.tar.gz: bc8016df114c316c54a302d4a568b055631a67788199fe50ac2a94a56afc254509d10a5831c679894831c6590135043edf20fa8a09d756f2dd61401e35e2aacd
6
+ metadata.gz: 4c3ad1b9e349fad8b29f82cdc986f0c3136f1c2cab21f7fc950343d5dda9784d1d8582734400381da5af3b52e460e9e3f85be96ed753a617c6869c11f2214f4f
7
+ data.tar.gz: ec196605594d0b86509db2569e98d72a08d06971c7468c94fecb61a424045fd228fceb9cb6982b193076348a3e4888679eae6c6a1394a4d6837bf7d02fbc4844
@@ -0,0 +1,33 @@
1
+ name: Release gem
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ rubygems-otp-code:
7
+ description: RubyGems OTP code
8
+ required: true
9
+
10
+ permissions:
11
+ contents: write
12
+
13
+ jobs:
14
+ release-gem:
15
+ runs-on: ubuntu-latest
16
+ env:
17
+ GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
18
+ GEM_HOST_OTP_CODE: ${{ github.event.inputs.rubygems-otp-code }}
19
+ steps:
20
+ - uses: actions/checkout@v2
21
+ with:
22
+ fetch-depth: 0 # bundle exec rake release で git tag を見るため、tagをfetchするようにしている
23
+ - uses: ruby/setup-ruby@v1
24
+ with:
25
+ ruby-version: 3.2
26
+ - name: Bundle install
27
+ run: bundle install
28
+ - name: Setup git config # bundle exec rake release でgit tagが打たれていない場合、タグを打ってpushしてくれるため用意している
29
+ run: |
30
+ git config --global user.email "taka0125@gmail.com"
31
+ git config --global user.name "Takahiro Ooishi"
32
+ - name: Release gem
33
+ run: bundle exec rake release
@@ -8,7 +8,7 @@ jobs:
8
8
 
9
9
  strategy:
10
10
  matrix:
11
- ruby: ['2.7', '3.0', '3.1']
11
+ ruby: ['2.7', '3.0', '3.1', '3.2']
12
12
 
13
13
  steps:
14
14
  - uses: actions/checkout@v2
data/.rspec CHANGED
@@ -1,2 +1,3 @@
1
+ --require spec_helper
1
2
  --format documentation
2
3
  --color
data/README.md CHANGED
@@ -25,6 +25,26 @@ Or install it yourself as:
25
25
 
26
26
  $ gem install asset_finder
27
27
 
28
+ ## config file
29
+
30
+ `config/initializers/assets_finder.rb`
31
+
32
+ ### Sprockets
33
+
34
+ ```ruby
35
+ Rails.application.config.to_prepare do
36
+ Rails.application.config.assets.precompile += AssetFinder::SprocketsConfigGenerator.new.execute
37
+ end
38
+ ```
39
+
40
+ ### dartsass-rails
41
+
42
+ ```ruby
43
+ Rails.application.config.to_prepare do
44
+ Rails.application.config.dartsass.builds = AssetFinder::Stylesheet::DartsassConfigGenerator.new.execute
45
+ end
46
+ ```
47
+
28
48
  ## Development
29
49
 
30
50
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -1,18 +1,22 @@
1
1
  module AssetFinder
2
2
  class Configuration
3
3
  attr_accessor :javascript_patterns
4
+ attr_accessor :javascript_root_path
4
5
  attr_accessor :stylesheet_patterns
6
+ attr_accessor :stylesheet_root_path
5
7
  attr_accessor :normalize_index_file
6
8
 
7
9
  DEFAULT = {
8
10
  javascript_patterns: [],
11
+ javascript_root_path: 'app/assets/javascripts/',
9
12
  stylesheet_patterns: [],
13
+ stylesheet_root_path: 'app/assets/stylesheets/',
10
14
  normalize_index_file: true
11
15
  }.freeze
12
16
 
13
17
  def initialize(options = {})
14
- %i(javascript_patterns stylesheet_patterns normalize_index_file).each do |k|
15
- send(:"#{k}=", options[k] || DEFAULT[k])
18
+ DEFAULT.keys.each do |k|
19
+ public_send(:"#{k}=", options[k] || DEFAULT[k])
16
20
  end
17
21
  end
18
22
  end
@@ -1,28 +1,26 @@
1
1
  module AssetFinder
2
2
  module Javascript
3
3
  class Normalizer
4
- DEFAULT_PATTERNS = [
5
- /^(.*)\.js\.coffee$/,
6
- /^(.*)\.coffee$/,
7
- /^(.*)\.js$/
8
- ].freeze
9
-
10
- def initialize(root_dir, patterns = [], normalize_index_file: true)
4
+ def initialize(root_dir:, path_pattern_collection:, normalize_index_file: true)
11
5
  @root_dir = root_dir.to_s
12
- @patterns = patterns + DEFAULT_PATTERNS
6
+ @path_pattern_collection = path_pattern_collection
13
7
  @normalize_index_file = normalize_index_file
8
+
9
+ freeze
14
10
  end
15
11
 
16
12
  def normalize(path)
17
- @patterns.each do |pattern|
18
- if path.match(pattern)
19
- normalized_path = $1.delete_prefix(@root_dir)
20
- normalized_path = normalized_path.delete_suffix('/index') if @normalize_index_file
21
- return normalized_path + '.js'
22
- end
23
- end
24
- nil
13
+ match = path_pattern_collection.match(path: path)
14
+ return unless match
15
+
16
+ normalized_path = match[1].delete_prefix(root_dir)
17
+ normalized_path = normalized_path.delete_suffix('/index') if normalize_index_file
18
+ normalized_path + '.js'
25
19
  end
20
+
21
+ private
22
+
23
+ attr_reader :root_dir, :path_pattern_collection, :normalize_index_file
26
24
  end
27
25
  end
28
26
  end
@@ -0,0 +1,28 @@
1
+ require 'find'
2
+
3
+ module AssetFinder
4
+ module Javascript
5
+ class PathCollector
6
+ def initialize(root_dir:, path_pattern_collection:)
7
+ @root_dir = root_dir || File.join(Rails.root, AssetFinder.config.javascript_root_path)
8
+ @path_pattern_collection = path_pattern_collection || PathPatternCollection.build
9
+
10
+ freeze
11
+ end
12
+
13
+ def execute
14
+ [].tap do |paths|
15
+ Find.find(root_dir).each do |path|
16
+ next unless path_pattern_collection.match?(path: path)
17
+
18
+ paths << path
19
+ end
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ attr_reader :root_dir, :path_pattern_collection
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,16 @@
1
+ module AssetFinder
2
+ module Javascript
3
+ class PathPatternCollection < AssetFinder::PathPatternCollection
4
+ DEFAULT_PATTERNS = [
5
+ /^(.*)\.js\.coffee$/,
6
+ /^(.*)\.coffee$/,
7
+ /^(.*)\.js$/
8
+ ].freeze
9
+
10
+ def self.build
11
+ patterns = AssetFinder.config.javascript_patterns + DEFAULT_PATTERNS
12
+ new(path_patterns: patterns.map { |pattern| PathPattern.new(pattern: pattern) })
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,24 @@
1
+ require 'find'
2
+
3
+ module AssetFinder
4
+ module Javascript
5
+ class SprocketsConfigGenerator
6
+ def initialize(root_dir: nil)
7
+ @root_dir = root_dir || File.join(Rails.root, AssetFinder.config.javascript_root_path)
8
+ @path_pattern_collection = PathPatternCollection.build
9
+ @path_collector = PathCollector.new(root_dir: @root_dir, path_pattern_collection: @path_pattern_collection)
10
+ @normalizer = Normalizer.new(root_dir: @root_dir, path_pattern_collection: @path_pattern_collection, normalize_index_file: AssetFinder.config.normalize_index_file)
11
+
12
+ freeze
13
+ end
14
+
15
+ def execute
16
+ path_collector.execute.map { |path| normalizer.normalize(path) }.compact
17
+ end
18
+
19
+ private
20
+
21
+ attr_reader :root_dir, :path_pattern_collection, :path_collector, :normalizer
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,19 @@
1
+ module AssetFinder
2
+ class PathPattern
3
+ attr_reader :pattern
4
+
5
+ def initialize(pattern:)
6
+ @pattern = pattern
7
+
8
+ freeze
9
+ end
10
+
11
+ def match?(path:)
12
+ path.match?(pattern)
13
+ end
14
+
15
+ def match(path:)
16
+ path.match(pattern)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,30 @@
1
+ module AssetFinder
2
+ class PathPatternCollection
3
+ def initialize(path_patterns:)
4
+ @path_patterns = Array(path_patterns)
5
+
6
+ freeze
7
+ end
8
+
9
+ def match?(path:)
10
+ path_patterns.each do |path_pattern|
11
+ return true if path_pattern.match?(path: path)
12
+ end
13
+
14
+ false
15
+ end
16
+
17
+ def match(path:)
18
+ path_patterns.each do |path_pattern|
19
+ match = path_pattern.match(path: path)
20
+ return match if match
21
+ end
22
+
23
+ nil
24
+ end
25
+
26
+ private
27
+
28
+ attr_reader :path_patterns
29
+ end
30
+ end
@@ -9,8 +9,6 @@ module AssetFinder
9
9
  config.javascript_patterns = Rails.application.config.asset_finder.javascript_patterns
10
10
  config.stylesheet_patterns = Rails.application.config.asset_finder.stylesheet_patterns
11
11
  end
12
-
13
- Rails.application.config.assets.precompile += AssetFinder::Finder.execute
14
12
  end
15
13
  end
16
14
  end
@@ -0,0 +1,11 @@
1
+ module AssetFinder
2
+ class SprocketsConfigGenerator
3
+ def initialize
4
+ freeze
5
+ end
6
+
7
+ def execute
8
+ Javascript::SprocketsConfigGenerator.new.execute + Stylesheet::SprocketsConfigGenerator.new.execute
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,31 @@
1
+ require 'find'
2
+
3
+ module AssetFinder
4
+ module Stylesheet
5
+ class DartsassConfigGenerator
6
+ def initialize(root_dir: nil)
7
+ @root_dir = root_dir || File.join(Rails.root, 'app/assets/stylesheets/')
8
+ @path_pattern_collection = PathPatternCollection.build
9
+ @path_collector = PathCollector.new(root_dir: @root_dir, path_pattern_collection: @path_pattern_collection)
10
+ @normalizer = Normalizer.new(root_dir: @root_dir, path_pattern_collection: @path_pattern_collection)
11
+
12
+ freeze
13
+ end
14
+
15
+ def execute
16
+ {}.tap do |results|
17
+ path_collector.execute.each do |path|
18
+ key = path.delete_prefix(root_dir)
19
+ value = normalizer.normalize(path)
20
+
21
+ results[key] = value
22
+ end
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ attr_reader :root_dir, :path_pattern_collection, :path_collector, :normalizer
29
+ end
30
+ end
31
+ end
@@ -1,25 +1,23 @@
1
1
  module AssetFinder
2
2
  module Stylesheet
3
3
  class Normalizer
4
- DEFAULT_PATTERNS = [
5
- /^(.*)\.css\.scss$/,
6
- /^(.*)\.css$/,
7
- /^(.*)\.scss$/
8
- ].freeze
9
-
10
- def initialize(root_dir, patterns = [])
4
+ def initialize(root_dir:, path_pattern_collection:)
11
5
  @root_dir = root_dir.to_s
12
- @patterns = patterns + DEFAULT_PATTERNS
6
+ @path_pattern_collection = path_pattern_collection
7
+
8
+ freeze
13
9
  end
14
10
 
15
11
  def normalize(path)
16
- @patterns.each do |pattern|
17
- if path.match(pattern)
18
- return $1.sub(@root_dir, '') + '.css'
19
- end
20
- end
21
- nil
12
+ match = path_pattern_collection.match(path: path)
13
+ return unless match
14
+
15
+ match[1].sub(root_dir, '') + '.css'
22
16
  end
17
+
18
+ private
19
+
20
+ attr_reader :root_dir, :path_pattern_collection
23
21
  end
24
22
  end
25
23
  end
@@ -0,0 +1,28 @@
1
+ require 'find'
2
+
3
+ module AssetFinder
4
+ module Stylesheet
5
+ class PathCollector
6
+ def initialize(root_dir:, path_pattern_collection:)
7
+ @root_dir = root_dir
8
+ @path_pattern_collection = path_pattern_collection
9
+
10
+ freeze
11
+ end
12
+
13
+ def execute
14
+ [].tap do |paths|
15
+ Find.find(root_dir).each do |path|
16
+ next unless path_pattern_collection.match?(path: path)
17
+
18
+ paths << path
19
+ end
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ attr_reader :root_dir, :path_pattern_collection
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,16 @@
1
+ module AssetFinder
2
+ module Stylesheet
3
+ class PathPatternCollection < AssetFinder::PathPatternCollection
4
+ DEFAULT_PATTERNS = [
5
+ /^(.*)\.css\.scss$/,
6
+ /^(.*)\.css$/,
7
+ /^(.*)\.scss$/
8
+ ].freeze
9
+
10
+ def self.build
11
+ patterns = AssetFinder.config.stylesheet_patterns + DEFAULT_PATTERNS
12
+ new(path_patterns: patterns.map { |pattern| PathPattern.new(pattern: pattern) })
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,24 @@
1
+ require 'find'
2
+
3
+ module AssetFinder
4
+ module Stylesheet
5
+ class SprocketsConfigGenerator
6
+ def initialize(root_dir: nil)
7
+ @root_dir = root_dir || File.join(Rails.root, 'app/assets/stylesheets/')
8
+ @path_pattern_collection = PathPatternCollection.build
9
+ @path_collector = PathCollector.new(root_dir: @root_dir, path_pattern_collection: @path_pattern_collection)
10
+ @normalizer = Normalizer.new(root_dir: @root_dir, path_pattern_collection: @path_pattern_collection)
11
+
12
+ freeze
13
+ end
14
+
15
+ def execute
16
+ path_collector.execute.map { |path| normalizer.normalize(path) }.compact
17
+ end
18
+
19
+ private
20
+
21
+ attr_reader :root_dir, :path_pattern_collection, :path_collector, :normalizer
22
+ end
23
+ end
24
+ end
@@ -1,3 +1,3 @@
1
1
  module AssetFinder
2
- VERSION = "1.6.0"
2
+ VERSION = "2.0.0"
3
3
  end
data/lib/asset_finder.rb CHANGED
@@ -1,19 +1,29 @@
1
1
  require "asset_finder/version"
2
2
  require "asset_finder/configuration"
3
- require "asset_finder/finder"
3
+ require "asset_finder/sprockets_config_generator"
4
+ require "asset_finder/path_pattern"
5
+ require "asset_finder/path_pattern_collection"
6
+ require "asset_finder/javascript/sprockets_config_generator"
4
7
  require "asset_finder/javascript/normalizer"
5
- require "asset_finder/javascript/finder"
8
+ require "asset_finder/javascript/path_collector"
9
+ require "asset_finder/javascript/path_pattern_collection"
10
+ require "asset_finder/stylesheet/dartsass_config_generator"
11
+ require "asset_finder/stylesheet/sprockets_config_generator"
6
12
  require "asset_finder/stylesheet/normalizer"
7
- require "asset_finder/stylesheet/finder"
13
+ require "asset_finder/stylesheet/path_collector"
14
+ require "asset_finder/stylesheet/path_pattern_collection"
8
15
  require "asset_finder/railtie" if defined?(::Rails::Railtie)
9
16
 
10
17
  module AssetFinder
11
18
  class << self
12
- attr_accessor :configuration
13
- end
19
+ attr_accessor :config
20
+
21
+ def config
22
+ @config ||= Configuration.new
23
+ end
14
24
 
15
- def self.configure
16
- self.configuration ||= Configuration.new
17
- yield(self.configuration)
25
+ def configure
26
+ yield config
27
+ end
18
28
  end
19
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asset_finder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takahiro Ooishi
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-06-26 00:00:00.000000000 Z
11
+ date: 2023-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -79,6 +79,7 @@ executables: []
79
79
  extensions: []
80
80
  extra_rdoc_files: []
81
81
  files:
82
+ - ".github/workflows/release.yml"
82
83
  - ".github/workflows/ruby.yml"
83
84
  - ".gitignore"
84
85
  - ".rspec"
@@ -91,18 +92,25 @@ files:
91
92
  - bin/setup
92
93
  - lib/asset_finder.rb
93
94
  - lib/asset_finder/configuration.rb
94
- - lib/asset_finder/finder.rb
95
- - lib/asset_finder/javascript/finder.rb
96
95
  - lib/asset_finder/javascript/normalizer.rb
96
+ - lib/asset_finder/javascript/path_collector.rb
97
+ - lib/asset_finder/javascript/path_pattern_collection.rb
98
+ - lib/asset_finder/javascript/sprockets_config_generator.rb
99
+ - lib/asset_finder/path_pattern.rb
100
+ - lib/asset_finder/path_pattern_collection.rb
97
101
  - lib/asset_finder/railtie.rb
98
- - lib/asset_finder/stylesheet/finder.rb
102
+ - lib/asset_finder/sprockets_config_generator.rb
103
+ - lib/asset_finder/stylesheet/dartsass_config_generator.rb
99
104
  - lib/asset_finder/stylesheet/normalizer.rb
105
+ - lib/asset_finder/stylesheet/path_collector.rb
106
+ - lib/asset_finder/stylesheet/path_pattern_collection.rb
107
+ - lib/asset_finder/stylesheet/sprockets_config_generator.rb
100
108
  - lib/asset_finder/version.rb
101
109
  homepage: https://github.com/taka0125/asset_finder
102
110
  licenses:
103
111
  - MIT
104
112
  metadata: {}
105
- post_install_message:
113
+ post_install_message:
106
114
  rdoc_options: []
107
115
  require_paths:
108
116
  - lib
@@ -117,8 +125,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
117
125
  - !ruby/object:Gem::Version
118
126
  version: '0'
119
127
  requirements: []
120
- rubygems_version: 3.1.6
121
- signing_key:
128
+ rubygems_version: 3.4.10
129
+ signing_key:
122
130
  specification_version: 4
123
131
  summary: Find javascripts and stylesheets for `rake asset:precompile`.
124
132
  test_files: []
@@ -1,7 +0,0 @@
1
- module AssetFinder
2
- class Finder
3
- def self.execute
4
- Javascript::Finder.execute + Stylesheet::Finder.execute
5
- end
6
- end
7
- end
@@ -1,24 +0,0 @@
1
- require 'find'
2
-
3
- module AssetFinder
4
- module Javascript
5
- class Finder
6
- def self.execute
7
- [].tap do |paths|
8
- root_dir = File.join(Rails.root, 'app/assets/javascripts/')
9
- normalizer = Normalizer.new(
10
- root_dir,
11
- AssetFinder.configuration.javascript_patterns,
12
- normalize_index_file: AssetFinder.configuration.normalize_index_file
13
- )
14
-
15
- Find.find(root_dir).each do |path|
16
- normalized_path = normalizer.normalize(path)
17
- next if normalized_path.nil?
18
- paths << normalized_path
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,20 +0,0 @@
1
- require 'find'
2
-
3
- module AssetFinder
4
- module Stylesheet
5
- class Finder
6
- def self.execute
7
- [].tap do |paths|
8
- root_dir = File.join(Rails.root, 'app/assets/stylesheets/')
9
- normalizer = Normalizer.new(root_dir, AssetFinder.configuration.stylesheet_patterns)
10
-
11
- Find.find(root_dir).each do |path|
12
- normalized_path = normalizer.normalize(path)
13
- next if normalized_path.nil?
14
- paths << normalized_path
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end