monoz 0.1.0 → 0.2.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: 3809e6abcde49688db77aeb2c395d7293a68528ac2a3a3fab51a753de5040048
4
- data.tar.gz: 138e119bf0ba056dd1f1ca54061b1d24e5c507a25e42a035a8639d2d548900e2
3
+ metadata.gz: bd7a1b2e7eee574ad959399f006f5ca5678bd810165be8f50e4a0a590d7b1e8f
4
+ data.tar.gz: 9dff952ec312b73c783aaf5b6e13c73304cd07a6a9200291f1db68a42c7fc6d5
5
5
  SHA512:
6
- metadata.gz: 5b52995d260a8ef32d5ee8341624f80e96ab5836b35995033ecbb2cc54987757102d0e4b8b4e9cebe1bf28190ce5895d8d5f6896700ec17e1d43bfccd3c28ff3
7
- data.tar.gz: fb384e4182854c0ab3633869e62283306af0a24f3bb030e99bc43514f1bf68f5107651b344480f4b22838890963d9233b50a3d7e31a83c55ef53fbeaf1ae2895
6
+ metadata.gz: 144a67fc74ec7fd2af382836f421ae3a59b2bbe13b1ff2655f31d5268ca7d94d37ff672ff5441850be58650a4ac40bb973868cd01c7a42983d8206576415ce67
7
+ data.tar.gz: c54341f5ba64cb74d6c9b5a1626f92491fb2cb7c8a30fb1fdea1ee3e9fba5d5494127d67ef2d3f0a0ce1444f2ee04cbd064b3ce446bd485e0449da0b3b3ff3c6
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2023 Rasmus Kjellberg
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -51,7 +51,7 @@ For example, a Monoz repository with both a frontend and a backend application t
51
51
 
52
52
  ### Bundle projects
53
53
 
54
- To manage the dependencies of your projects, you can use the monoz bundle command. This command will create a new Gemfile.lock file in each project directory based on the dependencies specified in their respective Gemfiles.
54
+ To manage the dependencies of your projects, you can use the `monoz bundle` command. This command will run `bundle` and create a new Gemfile.lock file in each project directory based on the dependencies specified in their respective `Gemfile`.
55
55
 
56
56
  To bundle all the projects in the Monoz repository, simply run:
57
57
 
@@ -59,9 +59,7 @@ To bundle all the projects in the Monoz repository, simply run:
59
59
  $ monoz bundle
60
60
  ```
61
61
 
62
- This will create a `Gemfile.lock` file for each project in the repository.
63
-
64
- If you want to update the dependencies of your projects, you can use the `monoz bundle update` command. This command will update the `Gemfile.lock` file of each project based on the latest available versions of their dependencies.
62
+ If you instead want to update the dependencies of your projects, you can use the `monoz bundle update` command. This command will update the `Gemfile.lock` file of each project based on the latest available versions of their dependencies.
65
63
 
66
64
  To update the dependencies of all projects in the Monoz repository, simply run:
67
65
 
@@ -71,11 +69,26 @@ $ monoz bundle update
71
69
 
72
70
  Note that when you add a new dependency to a project, you'll need to run `monoz bundle` to update its `Gemfile.lock` file before you can use the new dependency. Similarly, if you update the dependencies of a project's `Gemfile`, you'll need to run `monoz bundle` to update its `Gemfile.lock` file with the new versions.
73
71
 
72
+ #### Run other bundler commands
73
+
74
+ You can also run other bundler commands on all projects in the repository using the `monoz bundle` command followed by the desired arguments. For example, to run the RSpec tests for all projects, you can use the following command:
75
+
76
+ ```console
77
+ $ monoz bundle exec rspec
78
+
79
+ [kiqr_core] bundle exec rspec
80
+ [core_api] bundle exec rspec
81
+ [content_api] bundle exec rspec
82
+ [kiqr_cloud] bundle exec rspec
83
+ ```
84
+
85
+ This will execute the `bundle exec rspec` command in each project directory, ensuring that all the necessary dependencies are installed and loaded for each project. Similarly, you can run other bundler commands such as `bundle install`, `bundle update`, and so on, by appending the desired arguments to the `monoz bundle` command.
86
+
74
87
  ### Inspect projects
75
88
 
76
- You can inspect the projects in your Monoz repository using the monoz inspect command. This command will display a table that shows the projects in the repository, their type (app or gem), the gem name (if it's a gem), the test framework(s) used, and the projects that depend on them.
89
+ You can inspect the projects in your Monoz repository using the `monoz inspect` command. This command will display a table that shows the projects in the repository, their type (app or gem), the gem name (if it's a gem), the test framework(s) used, and the projects that depend on them.
77
90
 
78
- Here's an example output of the monoz inspect command:
91
+ Here's an example output of the `monoz inspect` command:
79
92
 
80
93
  ```console
81
94
  $ monoz inspect
data/bin/monoz CHANGED
@@ -8,4 +8,4 @@ begin
8
8
  rescue Monoz::Errors::ConfigurationNotFound
9
9
  puts "This is not a valid Monoz directory."
10
10
  puts "Run monoz init to initialize Monoz in the current directory."
11
- end
11
+ end
@@ -12,8 +12,10 @@ module Monoz
12
12
  Monoz::Services::InitService.new(self).call(path)
13
13
  end
14
14
 
15
- desc "bundle", "Run bundle commands in all projects"
16
- subcommand "bundle", Monoz::Cli::Bundle
15
+ desc "bundle [COMMAND]", "Run bundle commands in all projects"
16
+ def bundle(*command)
17
+ Monoz::Services::BundleService.new(self).call(*command)
18
+ end
17
19
 
18
20
  desc "inspect", "Inspect this monozrepo"
19
21
  subcommand "inspect", Monoz::Cli::Inspect
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "yaml"
2
4
  require "active_support/core_ext/module/delegation"
3
5
 
@@ -27,17 +29,17 @@ module Monoz
27
29
  end
28
30
 
29
31
  private
30
- def find_config_file(dir_path)
31
- while dir_path != "/"
32
- config_file_path = File.join(dir_path, "monoz.yml")
33
- return config_file_path if File.exist?(config_file_path)
32
+ def find_config_file(dir_path)
33
+ while dir_path != "/"
34
+ config_file_path = File.join(dir_path, "monoz.yml")
35
+ return config_file_path if File.exist?(config_file_path)
34
36
 
35
- dir_path = File.dirname(dir_path)
37
+ dir_path = File.dirname(dir_path)
38
+ end
36
39
  end
37
- end
38
40
 
39
- def load_config(config_file_path)
40
- YAML.load_file(config_file_path)
41
- end
41
+ def load_config(config_file_path)
42
+ YAML.load_file(config_file_path)
43
+ end
42
44
  end
43
45
  end
data/lib/monoz/project.rb CHANGED
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Monoz
2
4
  class Project
3
5
  attr_reader :name, :root_path, :gemspec, :type, :dependencies, :gem_name, :dependants
4
6
 
5
7
  def initialize(root_path)
6
8
  @root_path = root_path
7
-
9
+
8
10
  parse_project_files
9
11
  parse_dependencies
10
12
 
@@ -46,68 +48,68 @@ module Monoz
46
48
  end
47
49
 
48
50
  private
49
- def parse_project_files
50
- @gemspec = parse_gemspec
51
- end
51
+ def parse_project_files
52
+ @gemspec = parse_gemspec
53
+ end
52
54
 
53
- def parse_dependencies
54
- @dependencies = gem_dependencies
55
- end
55
+ def parse_dependencies
56
+ @dependencies = gem_dependencies
57
+ end
56
58
 
57
- def parse_gemspec
58
- return nil unless (gemspec_file = gemspec_path) && File.exist?(gemspec_file)
59
+ def parse_gemspec
60
+ return nil unless (gemspec_file = gemspec_path) && File.exist?(gemspec_file)
59
61
 
60
- spec = Gem::Specification.load(gemspec_file)
61
- {
62
- name: spec.name,
63
- version: spec.version.to_s
64
- }
65
- end
62
+ spec = Gem::Specification.load(gemspec_file)
63
+ {
64
+ name: spec.name,
65
+ version: spec.version.to_s
66
+ }
67
+ end
66
68
 
67
- def setup_instance_variables
68
- @name = File.basename(root_path)
69
- @gem_name = @gemspec.dig(:name) if is_gem?
70
- @type = is_gem? ? "gem" : "app"
71
- @test_frameworks =
72
- @dependants = []
73
- end
69
+ def setup_instance_variables
70
+ @name = File.basename(root_path)
71
+ @gem_name = @gemspec.dig(:name) if is_gem?
72
+ @type = is_gem? ? "gem" : "app"
73
+ @test_frameworks =
74
+ @dependants = []
75
+ end
74
76
 
75
- def gemspec_path
76
- Dir.glob(File.join(@root_path, "*.gemspec")).first
77
- end
77
+ def gemspec_path
78
+ Dir.glob(File.join(@root_path, "*.gemspec")).first
79
+ end
78
80
 
79
- def gemfile_path
80
- Dir.glob(File.join(@root_path, "Gemfile")).first
81
- end
81
+ def gemfile_path
82
+ Dir.glob(File.join(@root_path, "Gemfile")).first
83
+ end
84
+
85
+ def gem_dependencies
86
+ dependencies = {}
87
+
88
+ # Check if a Gemfile exists
89
+ if (gemfile = gemfile_path) && File.exist?(gemfile)
90
+ gemfile_content = File.read(gemfile)
91
+
92
+ # Use regex to find all gem entries
93
+ gem_entries = gemfile_content.scan(/gem\s+['"]([^'"]+)['"](?:,\s*['"]([^'"]+)['"])?(?:,\s*['"]([^'"]+)['"])?/)
82
94
 
83
- def gem_dependencies
84
- dependencies = {}
85
-
86
- # Check if a Gemfile exists
87
- if (gemfile = gemfile_path) && File.exist?(gemfile)
88
- gemfile_content = File.read(gemfile)
89
-
90
- # Use regex to find all gem entries
91
- gem_entries = gemfile_content.scan(/gem\s+['"]([^'"]+)['"](?:,\s*['"]([^'"]+)['"])?(?:,\s*['"]([^'"]+)['"])?/)
92
-
93
- # Add each gem and its version to the hash
94
- gem_entries.each do |gem_entry|
95
- gem_name = gem_entry[0]
96
- version_spec = gem_entry[1] || ""
97
- dependencies[gem_name] = version_spec
95
+ # Add each gem and its version to the hash
96
+ gem_entries.each do |gem_entry|
97
+ gem_name = gem_entry[0]
98
+ version_spec = gem_entry[1] || ""
99
+ dependencies[gem_name] = version_spec
100
+ end
98
101
  end
99
- end
100
102
 
101
- # Check if a gemspec exists
102
- if (gemspec_file = gemspec_path) && File.exist?(gemspec_file)
103
- spec = Gem::Specification.load(gemspec_file)
104
- spec.dependencies.each do |dep|
105
- dependencies[dep.name] = dep.requirement.to_s
103
+ # Check if a gemspec exists
104
+ if (gemspec_file = gemspec_path) && File.exist?(gemspec_file)
105
+ spec = Gem::Specification.load(gemspec_file)
106
+ spec.dependencies.each do |dep|
107
+ dependencies[dep.name] = dep.requirement.to_s
108
+ end
106
109
  end
107
- end
108
110
 
109
- dependencies
110
- end
111
+ dependencies
112
+ end
111
113
 
112
114
  public
113
115
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "pathname"
2
4
  require "active_support/core_ext/module/delegation"
3
5
  require "terminal-table"
@@ -12,13 +14,13 @@ module Monoz
12
14
  project_folders = Monoz.config.dig("folders") || ["apps", "gems"]
13
15
 
14
16
  search_paths = project_folders.map { |folder| File.join(file_path, folder) }
15
-
17
+
16
18
  search_paths.each do |search_path|
17
19
  Dir.glob(File.join(search_path, "*/Gemfile")).each do |gemfile_path|
18
20
  project_path = File.dirname(gemfile_path)
19
21
  project = Project.new(project_path)
20
22
  if project.valid?
21
- @items << project
23
+ @items << project
22
24
  refresh_dependants(project)
23
25
  end
24
26
  end
@@ -68,7 +70,7 @@ module Monoz
68
70
  end
69
71
  table = Terminal::Table.new(
70
72
  headings: ["Project", "Type", "Gem Name", "Test Framework(s)", "Dependants"],
71
- rows: rows,
73
+ rows:,
72
74
  style: { padding_left: 2, padding_right: 2, border_i: "o" },
73
75
  )
74
76
  puts table
@@ -116,6 +118,5 @@ module Monoz
116
118
 
117
119
  sorted_items
118
120
  end
119
-
120
121
  end
121
122
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "yaml"
4
+ require "fileutils"
5
+ require "active_support"
6
+
7
+ module Monoz
8
+ module Services
9
+ class BundleService < Monoz::Services::BaseService
10
+ def call(*command)
11
+ Monoz.projects.order(:dependants).each do |project|
12
+ say "[#{project.name}] ", [:blue, :bold], false
13
+ say("bundle #{command.join(" ")}".strip, :green)
14
+ project.run "bundle", *command
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -11,7 +11,7 @@ module Monoz
11
11
  project_dir = File.dirname(config_file_path)
12
12
 
13
13
  if File.exist?(config_file_path)
14
- @thor.say "Error: monoz.yaml already exists in #{config_file_path}", :red
14
+ say "Error: monoz.yaml already exists in #{config_file_path}", :red
15
15
  return
16
16
  end
17
17
 
@@ -26,7 +26,7 @@ module Monoz
26
26
  system "git", "init"
27
27
  end
28
28
 
29
- @thor.say "Successfully initialized Monoz in #{project_dir}", :green
29
+ say "Successfully initialized Monoz in #{project_dir}", :green
30
30
  end
31
31
  end
32
32
  end
data/lib/monoz/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Monoz
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/monoz.rb CHANGED
@@ -10,7 +10,6 @@ module Monoz
10
10
  end
11
11
 
12
12
  module Cli
13
- autoload "Bundle", "monoz/cli/bundle"
14
13
  autoload "Inspect", "monoz/cli/inspect"
15
14
  autoload "Main", "monoz/cli/main"
16
15
  autoload "Run", "monoz/cli/run"
@@ -18,6 +17,7 @@ module Monoz
18
17
 
19
18
  module Services
20
19
  autoload "BaseService", "monoz/services/base_service"
20
+ autoload "BundleService", "monoz/services/bundle_service"
21
21
  autoload "InitService", "monoz/services/init_service"
22
22
  autoload "RunActionService", "monoz/services/run_action_service"
23
23
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: monoz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - kjellberg
@@ -60,16 +60,17 @@ executables:
60
60
  extensions: []
61
61
  extra_rdoc_files: []
62
62
  files:
63
+ - MIT-LICENSE
63
64
  - README.md
64
65
  - bin/monoz
65
66
  - lib/monoz.rb
66
- - lib/monoz/cli/bundle.rb
67
67
  - lib/monoz/cli/inspect.rb
68
68
  - lib/monoz/cli/main.rb
69
69
  - lib/monoz/configuration.rb
70
70
  - lib/monoz/project.rb
71
71
  - lib/monoz/project_collection.rb
72
72
  - lib/monoz/services/base_service.rb
73
+ - lib/monoz/services/bundle_service.rb
73
74
  - lib/monoz/services/init_service.rb
74
75
  - lib/monoz/services/run_action_service.rb
75
76
  - lib/monoz/version.rb
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "thor"
4
- require "yaml"
5
-
6
- module Monoz
7
- module Cli
8
- class Bundle < Thor
9
- default_task :install
10
-
11
- desc "install", "Install dependencies in all projects"
12
- def install
13
- Monoz.projects.order(:dependants).each do |project|
14
- say "#{project.type} ", project.text_color, false
15
- say "[#{project.name}] ", [:blue, :bold], false
16
- say "bundle install", :green
17
- project.run "bundle", "install"
18
- end
19
- end
20
-
21
- desc "update", "Update dependencies in all projects"
22
- def update
23
- Monoz.projects.order(:dependants).each do |project|
24
- say "#{project.type} ", project.text_color, false
25
- say "[#{project.name}] ", [:blue, :bold], false
26
- say "bundle update", :green
27
- project.run "bundle", "update"
28
- end
29
- end
30
- end
31
- end
32
- end