classlist 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|