label_weaver 0.0.3 → 0.0.4

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: 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