label_weaver 0.0.3 → 0.0.4

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: 8d4577814ad253da907628f3c86300dc89c2b362260fa6772af602670ce2aa63
4
- data.tar.gz: a262362d186dca07c7789baca7cd642c3d9b43e5ea1ca3ec6259ac4a244ef90f
3
+ metadata.gz: 7c9548ad5700605d0b7809e4a1e7d41444728bdfdb31aefa23da2aab812bf250
4
+ data.tar.gz: 9eff12ebcc85a52eb4e46768d3a37f72a61eb9087464fcaea50bfdf731918115
5
5
  SHA512:
6
- metadata.gz: 64c146c67e07cb609d4c7ac458e37d071edd0e592ec460f3b692b559a5121b2dfa12c5294a71eb565cb7d2064d54053aae8a0cf09ccdae2fc94fe48f4970cbcd
7
- data.tar.gz: 17f74363825bd9115228468d77b175b19c2895a680acd3809e0a7d25f3dda1338cae90e660fd26140fc57b78cd6aff80dd99f405938141d46cfcb5d56104d131
6
+ metadata.gz: b825c71ab2b865e46af1df187f5f125ee5ec234b900e2f9e9e5df5105410cf2ee013aec6ada2ea306e8aa90362ed562d93259634a71eb4abcec60c7a1a19d00f
7
+ data.tar.gz: d04fb881bcc8ff5ad003b6fd2664bee1b0359d920d550754e95db838572857fe2c0b7eb23b20ea57669a224eb1a82b53245bb25411259a322c8aec4f5c334990
data/README.md CHANGED
@@ -1,3 +1,34 @@
1
1
  # LabelWeaver
2
2
 
3
3
  [![Ruby Code Style](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://github.com/standardrb/standard)
4
+ [![Gem Version](https://badge.fury.io/rb/label_weaver.svg)](https://badge.fury.io/rb/label_weaver)
5
+
6
+ <!-- TOC -->
7
+ * [LabelWeaver](#labelweaver)
8
+ * [Installation](#installation)
9
+ * [Setting up a new whitelabel project](#setting-up-a-new-whitelabel-project)
10
+ * [Developing the whitelabel project](#developing-the-whitelabel-project)
11
+ * [CI Usage](#ci-usage)
12
+ <!-- TOC -->
13
+
14
+ LabelWeaver is a gem to help developing whitelabel applications of an existing code base.
15
+
16
+ It does so by automatically merging the base code into the whitelabel code, leading to only the
17
+ changed files being part of a new repository or branch.
18
+
19
+ ## Installation
20
+
21
+ ```bash
22
+ gem install label_weaver
23
+ ```
24
+
25
+ ## Setting up a new whitelabel project
26
+
27
+
28
+ ## Developing a whitelabel project
29
+
30
+ ### Local Development
31
+
32
+ ### Diffs
33
+
34
+ ## CI Usage
data/label_weaver.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "label_weaver"
5
- spec.version = "0.0.3"
5
+ spec.version = "0.0.4"
6
6
  spec.authors = ["Stefan Exner"]
7
7
  spec.email = ["stex@stex.codes"]
8
8
  spec.homepage = "https://gitlab.com/lopo-tech/label_weaver"
@@ -17,10 +17,8 @@ Gem::Specification.new do |spec|
17
17
  spec.required_ruby_version = "~> 3.3"
18
18
  spec.add_dependency "cogger", "~> 0.21"
19
19
  spec.add_dependency "containable", "~> 0.0"
20
- spec.add_dependency "dry-monads", "~> 1.6"
21
20
  spec.add_dependency "dry-schema", "~> 1.6"
22
21
  spec.add_dependency "diffy", "~> 3.4"
23
- spec.add_dependency "etcher", "~> 1.6"
24
22
  spec.add_dependency "git", "~> 2.1.1"
25
23
  spec.add_dependency "infusible", "~> 3.5"
26
24
  spec.add_dependency "ruby-next-core", "~> 1.0"
@@ -22,8 +22,12 @@ module LabelWeaver
22
22
  kernel.exit(1)
23
23
  end
24
24
 
25
+ Hooks.new.run(:develop, :before_start)
26
+
25
27
  repo.clone_or_update
26
28
  copy_repository_files
29
+
30
+ Hooks.new.run(:develop, :after_start)
27
31
  end
28
32
 
29
33
  private
@@ -52,8 +56,8 @@ module LabelWeaver
52
56
  def repo
53
57
  @repo ||= LabelWeaver::TempRepo.new(
54
58
  context.repository_dir,
55
- repository_url: configuration.git_repository,
56
- branch: configuration.git_branch,
59
+ repository_url: configuration.git[:repository],
60
+ branch: configuration.git[:branch],
57
61
  excludes: configuration.excludes,
58
62
  logger: logger
59
63
  )
@@ -22,7 +22,9 @@ module LabelWeaver
22
22
  kernel.exit(1)
23
23
  end
24
24
 
25
+ Hooks.new.run(:develop, :before_stop)
25
26
  remove_base_files
27
+ Hooks.new.run(:develop, :after_stop)
26
28
  end
27
29
 
28
30
  private
@@ -64,8 +66,8 @@ module LabelWeaver
64
66
  def repo
65
67
  @repo ||= LabelWeaver::TempRepo.new(
66
68
  context.repository_dir,
67
- repository_url: configuration.git_repository,
68
- branch: configuration.git_branch,
69
+ repository_url: configuration.git[:repository],
70
+ branch: configuration.git[:branch],
69
71
  excludes: configuration.excludes,
70
72
  logger: logger
71
73
  )
@@ -39,7 +39,6 @@ module LabelWeaver
39
39
  project_root_dir: Pathname.new(Dir.pwd),
40
40
  local_tmp_dir: Pathname.new(Dir.pwd).join(".config", "label_weaver"),
41
41
  repository_dir: Pathname.new(Dir.pwd).join(".config", "label_weaver", "repository"),
42
- tracking_file: Pathname.new(Dir.pwd).join(".config", "label_weaver", "files.yml"),
43
42
  defaults_path:,
44
43
  xdg_config:,
45
44
  version_label: specification.labeled_version
@@ -2,14 +2,22 @@
2
2
 
3
3
  require "dry/schema"
4
4
 
5
- Dry::Schema.load_extensions :monads
6
-
7
5
  module LabelWeaver
8
6
  module Configuration
9
7
  Contract = Dry::Schema.Params do
10
- required(:git_repository).filled :string
11
- required(:git_branch).filled :string
8
+ required(:git).hash do
9
+ required(:repository).filled(:string)
10
+ required(:branch).filled(:string)
11
+ end
12
12
  optional(:excludes).array :string
13
+ optional(:hooks).hash do
14
+ optional(:develop).hash do
15
+ optional(:before_start).array(:string)
16
+ optional(:after_start).array(:string)
17
+ optional(:before_stop).array(:string)
18
+ optional(:after_stop).array(:string)
19
+ end
20
+ end
13
21
  end
14
22
  end
15
23
  end
@@ -5,6 +5,10 @@ git:
5
5
  # Shell filename globbing rules apply, not regular expressions
6
6
  excludes:
7
7
  - .git/**
8
+ hooks:
9
+ develop:
10
+ after_start:
11
+ - echo "Development Mode Started"
8
12
  # Files here will be appended on whitelabel development instead of being skipped if the
9
13
  # file already exists in a project
10
14
  #append:
@@ -5,8 +5,12 @@ module LabelWeaver
5
5
  # Defines the configuration model for use throughout the gem.
6
6
  Model = Data.define(
7
7
  :excludes,
8
- :git_repository,
9
- :git_branch
10
- )
8
+ :git,
9
+ :hooks
10
+ ) do
11
+ def initialize(git:, hooks: {}, excludes: [])
12
+ super
13
+ end
14
+ end
11
15
  end
12
16
  end
@@ -2,7 +2,6 @@
2
2
 
3
3
  require "cogger"
4
4
  require "containable"
5
- require "etcher"
6
5
  require "runcom"
7
6
  require "spek"
8
7
 
@@ -12,19 +11,29 @@ module LabelWeaver
12
11
  extend Containable
13
12
 
14
13
  register :configuration do
15
- self[:defaults].add_loader(:yaml, self[:xdg_config].active)
16
- .then { |registry| Etcher.call registry }
14
+ if self[:xdg_config].active
15
+ data = self[:defaults].merge(YAML.load_file(self[:xdg_config].active, symbolize_names: true))
16
+ contract = Configuration::Contract.call(**data)
17
+
18
+ raise ArgumentError.new(contract.errors.to_h) if contract.failure?
19
+
20
+ Configuration::Model.new(**data)
21
+ else
22
+ Configuration::Model.new(**self[:defaults])
23
+ end
17
24
  end
18
25
 
19
26
  register :defaults do
20
- Etcher::Registry.new(contract: Configuration::Contract, model: Configuration::Model)
21
- .add_loader(:yaml, self[:defaults_path])
27
+ YAML.load_file(self[:defaults_path], symbolize_names: true)
22
28
  end
23
29
 
24
30
  register(:specification) { Spek::Loader.call "#{__dir__}/../../label_weaver.gemspec" }
25
31
  register(:defaults_path) { Pathname(__dir__).join("configuration/defaults.yml") }
26
32
  register(:xdg_config) { Runcom::Config.new("label_weaver/configuration.yml") }
27
- register(:logger) { Cogger.new(id: "label_weaver") }
33
+ register(:logger) do
34
+ Cogger.add_emoji :any, "🪝"
35
+ Cogger.new(id: "label_weaver")
36
+ end
28
37
  register :kernel, Kernel
29
38
  end
30
39
  end
@@ -0,0 +1,12 @@
1
+ module LabelWeaver
2
+ class Hooks
3
+ include Import[:configuration, :logger]
4
+
5
+ def run(*path)
6
+ configuration.hooks.dig(*path)&.each do |hook|
7
+ logger.any "$> #{hook}"
8
+ system(hook)
9
+ end
10
+ end
11
+ end
12
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: label_weaver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Exner
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-08-27 00:00:00.000000000 Z
11
+ date: 2024-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cogger
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.0'
41
- - !ruby/object:Gem::Dependency
42
- name: dry-monads
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '1.6'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '1.6'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: dry-schema
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -80,20 +66,6 @@ dependencies:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
68
  version: '3.4'
83
- - !ruby/object:Gem::Dependency
84
- name: etcher
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '1.6'
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '1.6'
97
69
  - !ruby/object:Gem::Dependency
98
70
  name: git
99
71
  requirement: !ruby/object:Gem::Requirement
@@ -246,6 +218,7 @@ files:
246
218
  - lib/label_weaver/configuration/defaults.yml
247
219
  - lib/label_weaver/configuration/model.rb
248
220
  - lib/label_weaver/container.rb
221
+ - lib/label_weaver/hooks.rb
249
222
  - lib/label_weaver/import.rb
250
223
  - lib/label_weaver/temp_repo.rb
251
224
  homepage: https://gitlab.com/lopo-tech/label_weaver