classlist 1.0.0 → 1.1.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 +4 -4
- data/CHANGELOG.md +3 -1
- data/README.md +2 -0
- data/lib/classlist/add.rb +20 -0
- data/lib/classlist/all.rb +13 -0
- data/lib/classlist/operation.rb +11 -0
- data/lib/classlist/remove.rb +12 -3
- data/lib/classlist/reset.rb +10 -3
- data/lib/classlist/version.rb +1 -1
- data/lib/classlist.rb +28 -9
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13b03b38d0d38240cdabd34d10b534b811b5b292eea5c4e43eabd24f5ab199dc
|
4
|
+
data.tar.gz: d83e6fac0aacdb375188e2d5b633bc0a3e7f2f758ef1ff6262ac93ca544b8b5a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00bff560b1cd9064b353dd1979f0d5644bbe1e861d6ea0d646e4a25cb16c7eb3ae51b66e49bbcf13fb15531065a6b9d5d4818879088ceca8434174bffc082075
|
7
|
+
data.tar.gz: 418764901609311aea4f245cda2d297110a932402a61aa4999f79955e37e4221f8509b6a91a5f86e168ca7cff62c8b1455b8156be3a97b517d4c81ec3ec92311
|
data/CHANGELOG.md
CHANGED
@@ -9,7 +9,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
9
9
|
|
10
10
|
### Added
|
11
11
|
|
12
|
-
-
|
12
|
+
- Support for chains of operations longer than the most simple cases.
|
13
|
+
- Introduce Classlist::Operation as a common super class for Classlist::Add, Classlist::Remove, Classlist::Reset.
|
14
|
+
- Classlist::Add that adds all entries when merged
|
13
15
|
|
14
16
|
## [1.0.0]
|
15
17
|
|
data/README.md
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "classlist/operation"
|
4
|
+
|
5
|
+
# Classlist::Add is an operation that adds tokens to the original
|
6
|
+
# classlist when added to it.
|
7
|
+
class Classlist::Add < Classlist::Operation
|
8
|
+
def merge(original)
|
9
|
+
original.entries + entries
|
10
|
+
end
|
11
|
+
|
12
|
+
# resolve changes the original classlist
|
13
|
+
def resolve(original)
|
14
|
+
entries.each do |entry|
|
15
|
+
original.add(entry)
|
16
|
+
end
|
17
|
+
|
18
|
+
super
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Require this file to load all of Classlist into your application.
|
4
|
+
#
|
5
|
+
# For example in a Gemfile:
|
6
|
+
#
|
7
|
+
# gem "classlist", require: "classlist/all"
|
8
|
+
#
|
9
|
+
# Or you can just require what you need manually.
|
10
|
+
|
11
|
+
require "classlist/add"
|
12
|
+
require "classlist/remove"
|
13
|
+
require "classlist/reset"
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "classlist"
|
4
|
+
|
5
|
+
# Classlist::Operations modify the original classlist
|
6
|
+
class Classlist::Operation < Classlist
|
7
|
+
# resolve changes the original classlist
|
8
|
+
def resolve(original_classlist)
|
9
|
+
resolve_operations(original_classlist)
|
10
|
+
end
|
11
|
+
end
|
data/lib/classlist/remove.rb
CHANGED
@@ -1,11 +1,20 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "classlist"
|
3
|
+
require "classlist/operation"
|
4
4
|
|
5
|
-
# Classlist::Remove is
|
5
|
+
# Classlist::Remove is an operation that removes tokens from the original
|
6
6
|
# classlist when added to it.
|
7
|
-
class Classlist::Remove < Classlist
|
7
|
+
class Classlist::Remove < Classlist::Operation
|
8
8
|
def merge(original)
|
9
9
|
original.entries - entries
|
10
10
|
end
|
11
|
+
|
12
|
+
# #resolve changes the original classlist
|
13
|
+
def resolve(original)
|
14
|
+
entries.each do |entry|
|
15
|
+
original.remove(entry)
|
16
|
+
end
|
17
|
+
|
18
|
+
super
|
19
|
+
end
|
11
20
|
end
|
data/lib/classlist/reset.rb
CHANGED
@@ -1,11 +1,18 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "classlist"
|
3
|
+
require "classlist/operation"
|
4
4
|
|
5
|
-
# Classlist::Reset is
|
5
|
+
# Classlist::Reset is an operation that removes all tokens from the original
|
6
6
|
# classlist when merged.
|
7
|
-
class Classlist::Reset < Classlist
|
7
|
+
class Classlist::Reset < Classlist::Operation
|
8
8
|
def merge(original)
|
9
9
|
original.entries.replace(entries)
|
10
10
|
end
|
11
|
+
|
12
|
+
# #resolve changes the original classlist
|
13
|
+
def resolve(original)
|
14
|
+
original.entries.replace(entries)
|
15
|
+
|
16
|
+
super
|
17
|
+
end
|
11
18
|
end
|
data/lib/classlist/version.rb
CHANGED
data/lib/classlist.rb
CHANGED
@@ -12,23 +12,30 @@ class Classlist
|
|
12
12
|
extend Forwardable
|
13
13
|
def_delegators :@entries, :each
|
14
14
|
|
15
|
-
attr_reader :entries
|
15
|
+
attr_reader :entries, :operations
|
16
16
|
|
17
17
|
# Returns the Classlist resulting from adding other to this classlist.
|
18
18
|
def +(other)
|
19
|
-
|
20
|
-
|
19
|
+
case other
|
20
|
+
when Classlist::Operation
|
21
|
+
add_operation(other)
|
22
|
+
self
|
23
|
+
when Classlist
|
24
|
+
result = other.merge(self)
|
25
|
+
Classlist.new(result)
|
21
26
|
else
|
22
|
-
entries + build_entries(other)
|
27
|
+
result = entries + build_entries(other)
|
28
|
+
Classlist.new(result)
|
23
29
|
end
|
24
|
-
|
25
|
-
Classlist.new(result)
|
26
30
|
end
|
27
31
|
|
28
32
|
def ==(other)
|
29
33
|
return false unless other.is_a?(self.class)
|
30
34
|
|
31
|
-
|
35
|
+
resolve_operations(self)
|
36
|
+
other.resolve_operations
|
37
|
+
|
38
|
+
@entries == other.entries
|
32
39
|
end
|
33
40
|
|
34
41
|
# Adds the given tokens to the list, omitting any that are already present.
|
@@ -39,6 +46,10 @@ class Classlist
|
|
39
46
|
end
|
40
47
|
end
|
41
48
|
|
49
|
+
def add_operation(other)
|
50
|
+
@operations << other
|
51
|
+
end
|
52
|
+
|
42
53
|
def include?(token)
|
43
54
|
entries.include?(token)
|
44
55
|
end
|
@@ -46,6 +57,7 @@ class Classlist
|
|
46
57
|
|
47
58
|
def initialize(entries = [])
|
48
59
|
@entries = build_entries(entries)
|
60
|
+
@operations = []
|
49
61
|
end
|
50
62
|
|
51
63
|
# Returns the item in the list by its index, or null if the index is greater
|
@@ -91,12 +103,19 @@ class Classlist
|
|
91
103
|
true
|
92
104
|
end
|
93
105
|
|
106
|
+
def resolve_operations(original_classlist = self)
|
107
|
+
operations.each do |operation|
|
108
|
+
operation.resolve(original_classlist)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
94
112
|
def to_a
|
95
|
-
|
113
|
+
resolve_operations(self)
|
114
|
+
@entries
|
96
115
|
end
|
97
116
|
|
98
117
|
def to_s
|
99
|
-
|
118
|
+
to_a.join(" ")
|
100
119
|
end
|
101
120
|
alias_method :value, :to_s
|
102
121
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: classlist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jakob Skjerning
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-11-
|
11
|
+
date: 2022-11-07 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Serverside manipulation of lists of CSS classnames that play nicely with
|
14
14
|
View Components.
|
@@ -28,6 +28,9 @@ files:
|
|
28
28
|
- bin/setup
|
29
29
|
- classlist.gemspec
|
30
30
|
- lib/classlist.rb
|
31
|
+
- lib/classlist/add.rb
|
32
|
+
- lib/classlist/all.rb
|
33
|
+
- lib/classlist/operation.rb
|
31
34
|
- lib/classlist/remove.rb
|
32
35
|
- lib/classlist/reset.rb
|
33
36
|
- lib/classlist/version.rb
|