essence 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: 0a9516a2911b410deb58ca4b9ba2afbf083752314b0bb6df0018c81a4615f14d
4
- data.tar.gz: 51074c18359021237cc4588b64a858aed0464746d5b9d0f0513319e722b73828
3
+ metadata.gz: 41a46dd9be7eb9ea84ba3ca4ad2f3a20333154644472673c347117bd6fb6b652
4
+ data.tar.gz: 3fd04819b2f327760571d3ec200a7300c45b7a4d7627b425e969a6999a051925
5
5
  SHA512:
6
- metadata.gz: a94fccdf29ea63f7fd807b786f8bd477ac44feb623a19bae66814412d6c170536b15ec46f8f02266c5bf6afbc0db61f2c30e95f2b58e5a6dbb3288a807af18ac
7
- data.tar.gz: 8e49f1011e3ddbecf3b37f3f5a0bd257b94061eab3053c8f06f616f3a60cd5f179688f9deacda83eb6ccb9129c48a0c47c6b8607fe5ca80c36e9b22e379c5dec
6
+ metadata.gz: 5688120d6baf34e1de5049978bd7a8b63f18bfd9dae45ab8acfbe3096b42f36168c5408502e7d4fc24bdafb4cda29fa1e7db77469fc3b6cd297ec685e89bb0a7
7
+ data.tar.gz: 9067b68f43129af1e0d5e4398b1d3682cf10bb05b0e06898ba708cec4d79e531e00129998a4697306c1b229fb139f33b985980c6216129a04279c1d02fb8e4d9
data/README.md ADDED
@@ -0,0 +1,13 @@
1
+ # Essence
2
+
3
+ A simple, ergonomic and performant component library for Ruby applications.
4
+
5
+ ---
6
+
7
+ ## Installation
8
+
9
+ TBA
10
+
11
+ ## Licence
12
+
13
+ MIT
data/exe/essence ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "bundler/setup"
5
+ require_relative "../lib/essence"
6
+
7
+ Essence::CLI.call
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Essence
4
+ module CLI
5
+ class Add < Dry::CLI::Command
6
+ desc "Add an Essence component to your project"
7
+ argument :component_name, required: true, desc: "Component name"
8
+ example Essence.component_names
9
+
10
+ def call(*args)
11
+ component_name = args[0][:component_name]
12
+
13
+ return puts "> #{component_name}: component unsupported" unless Essence.component_names.include?(component_name.to_sym)
14
+
15
+ Essence::CLI::Commands.copy_component(component_name:)
16
+ Essence::CLI::Commands.replace_component_contents(component_name:)
17
+ Essence::CLI::Commands.replace_component_contents(
18
+ component_name:,
19
+ from: Essence::CLI::Commands::COMPONENT_DEFINITION_SUFFIX,
20
+ to: Essence::CLI::Commands::PHLEX_COMPONENT_DEFINITION_SUFFIX
21
+ )
22
+
23
+ puts "> Successfully added #{component_name} component to #{Essence::CLI::Commands::DESTINATION_DIR.join("#{component_name}.rb")}"
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Essence
4
+ module CLI
5
+ class Install < Dry::CLI::Command
6
+ BASE_COMPONENT_NAME = "essence"
7
+ BASE_DEFINITION_PREFIX = "class Essence::Essence"
8
+ PHLEX_BASE_DEFINITION_PREFIX = "class Components::Essence"
9
+
10
+ desc "Install Essence to your project"
11
+ def call(*)
12
+ puts "> Installing Essence..."
13
+ puts "> Copying base component to your project"
14
+ Essence::CLI::Commands.copy_component(component_name: BASE_COMPONENT_NAME)
15
+ Essence::CLI::Commands.replace_component_contents(
16
+ component_name: BASE_COMPONENT_NAME,
17
+ from: BASE_DEFINITION_PREFIX,
18
+ to: PHLEX_BASE_DEFINITION_PREFIX
19
+ )
20
+ # Essence::CLI::Commands.rename_component_file(
21
+ # from: Essence::CLI::Commands::DESTINATION_DIR.join("#{BASE_COMPONENT_NAME}.rb"),
22
+ # to: Essence::CLI::Commands::DESTINATION_DIR.join("essence.rb")
23
+ # )
24
+ puts "> Essence has been successfully installed!"
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Essence
4
+ module CLI
5
+ class Version < Dry::CLI::Command
6
+ desc "Print Essence version"
7
+
8
+ def call(*)
9
+ puts Essence::VERSION
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/cli"
4
+
5
+ # CLI Commands
6
+ require_relative "cli/add"
7
+ require_relative "cli/install"
8
+ require_relative "cli/version"
9
+
10
+ module Essence
11
+ module CLI
12
+ def self.call(*args)
13
+ Dry::CLI.new(Commands).call
14
+ end
15
+
16
+ module Commands
17
+ extend Dry::CLI::Registry
18
+
19
+ # Constants
20
+ COMPONENTS_DIR = Pathname.new(File.expand_path("components", __dir__))
21
+ DESTINATION_DIR = Pathname.new(File.expand_path(Dir.pwd)).join("app/components")
22
+ COMPONENT_DEFINITION_PREFIX = "class Essence::"
23
+ COMPONENT_DEFINITION_SUFFIX = "< Essence::Essence"
24
+ PHLEX_COMPONENT_DEFINITION_PREFIX = "class Components::"
25
+ PHLEX_COMPONENT_DEFINITION_SUFFIX = "< Components::Essence"
26
+
27
+ # Registering commands
28
+ register "add", Add, aliases: ["a", "generate", "g"]
29
+ register "install", Install, aliases: ["i"]
30
+ register "version", Version, aliases: ["v", "-v", "--version"]
31
+
32
+ private
33
+
34
+ # UTILITIES
35
+ def self.copy_component(component_name:)
36
+ source_path = COMPONENTS_DIR.join("#{component_name}.rb")
37
+ destination_path = DESTINATION_DIR.join("#{component_name}.rb")
38
+
39
+ FileUtils.mkdir_p(DESTINATION_DIR)
40
+ FileUtils.copy(source_path, destination_path)
41
+ end
42
+
43
+ def self.replace_component_contents(
44
+ component_name:,
45
+ from: COMPONENT_DEFINITION_PREFIX,
46
+ to: PHLEX_COMPONENT_DEFINITION_PREFIX
47
+ )
48
+ component_file = DESTINATION_DIR.join("#{component_name}.rb")
49
+ return unless File.exist?(component_file)
50
+
51
+ replaced_content = File.read(component_file).gsub(from, to)
52
+ File.write(component_file, replaced_content)
53
+ end
54
+
55
+ def self.rename_component_file(from:, to:)
56
+ return if from.nil? || to.nil?
57
+ return unless File.exist?(from)
58
+
59
+ FileUtils.mv(from, to)
60
+ end
61
+ end
62
+ end
63
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Essence::Button < Essence::Component
3
+ class Essence::Button < Essence::Essence
4
4
  BASE = "inline-flex items-center rounded-xs border border-transparent font-medium transition duration-150 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed hover:opacity-90"
5
5
 
6
6
  SIZES = {
@@ -1,4 +1,6 @@
1
- class Essence::Component < Phlex::HTML
1
+ class Essence::Essence < Phlex::HTML
2
+ extend Phlex::Kit
3
+
2
4
  TAILWIND_MERGER = ::TailwindMerge::Merger.new.freeze unless defined?(TAILWIND_MERGER)
3
5
 
4
6
  attr_reader :attributes
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Essence::Link < Essence::Component
3
+ class Essence::Link < Essence::Essence
4
4
  CLASS = "inline-flex items-center gap-1 font-medium text-gray-900 border-b-2 hover:border-gray-900 transition-colors"
5
5
  KINDS = {
6
6
  regular: "border-transparent",
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Essence::Row < Essence::Component
3
+ class Essence::Row < Essence::Essence
4
4
  CLASS = "flex gap-4"
5
5
 
6
6
  KINDS = {
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Essence::Skeleton < Essence::Component
3
+ class Essence::Skeleton < Essence::Essence
4
4
  CLASSES = "animate-pulse bg-gray-200/55 rounded-xs"
5
5
 
6
6
  def initialize(**attributes)
@@ -1,3 +1,3 @@
1
1
  module Essence
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/essence.rb CHANGED
@@ -1,11 +1,42 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "tailwind_merge"
2
4
 
3
5
  module Essence
4
6
  # Autoloading
5
- autoload :Component, "essence/component"
7
+ autoload :Component, "essence/components/component"
6
8
 
7
9
  autoload :Button, "essence/components/button"
8
10
  autoload :Link, "essence/components/link"
9
11
  autoload :Skeleton, "essence/components/skeleton"
10
12
  autoload :Row, "essence/components/row"
13
+
14
+ autoload :CLI, "essence/cli"
15
+
16
+ # Components
17
+ # Class names and classes are separated to avoid loading in Phlex into the CLI tooling
18
+
19
+ def self.component_class_names
20
+ @component_class_names ||= {
21
+ essence: "Essence::Essence",
22
+ button: "Essence::Button",
23
+ link: "Essence::Link",
24
+ skeleton: "Essence::Skeleton",
25
+ row: "Essence::Row",
26
+ }
27
+ end
28
+
29
+ def self.component_classes
30
+ @components_classes ||= {
31
+ essence: ::Essence::Essence,
32
+ button: ::Essence::Button,
33
+ link: ::Essence::Link,
34
+ skeleton: ::Essence::Skeleton,
35
+ row: ::Essence::Row,
36
+ }
37
+ end
38
+
39
+ def self.component_names
40
+ @component_names ||= component_class_names.keys
41
+ end
11
42
  end
metadata CHANGED
@@ -1,16 +1,36 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: essence
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
  - Elvinas Predkelis
8
8
  - Primevise
9
9
  autorequire:
10
- bindir: bin
10
+ bindir: exe
11
11
  cert_chain: []
12
- date: 2024-12-15 00:00:00.000000000 Z
12
+ date: 2024-12-18 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: dry-cli
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0.7'
21
+ - - "<"
22
+ - !ruby/object:Gem::Version
23
+ version: '2'
24
+ type: :runtime
25
+ prerelease: false
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ version: '0.7'
31
+ - - "<"
32
+ - !ruby/object:Gem::Version
33
+ version: '2'
14
34
  - !ruby/object:Gem::Dependency
15
35
  name: phlex
16
36
  requirement: !ruby/object:Gem::Requirement
@@ -42,13 +62,20 @@ dependencies:
42
62
  description: Component library for Ruby applications using Phlex
43
63
  email:
44
64
  - info@primevise.com
45
- executables: []
65
+ executables:
66
+ - essence
46
67
  extensions: []
47
68
  extra_rdoc_files: []
48
69
  files:
70
+ - README.md
71
+ - exe/essence
49
72
  - lib/essence.rb
50
- - lib/essence/component.rb
73
+ - lib/essence/cli.rb
74
+ - lib/essence/cli/add.rb
75
+ - lib/essence/cli/install.rb
76
+ - lib/essence/cli/version.rb
51
77
  - lib/essence/components/button.rb
78
+ - lib/essence/components/essence.rb
52
79
  - lib/essence/components/link.rb
53
80
  - lib/essence/components/row.rb
54
81
  - lib/essence/components/skeleton.rb