wrap_it 0.1.4 → 0.1.5
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/README.md +6 -0
- data/lib/wrap_it/base.rb +17 -6
- data/lib/wrap_it/callbacks.rb +2 -1
- data/lib/wrap_it/enums.rb +4 -4
- data/lib/wrap_it/html_class.rb +2 -2
- data/lib/wrap_it/link.rb +41 -0
- data/lib/wrap_it/switches.rb +5 -5
- data/lib/wrap_it/text_container.rb +1 -1
- data/lib/wrap_it/version.rb +1 -1
- data/lib/wrap_it.rb +1 -0
- data/spec/lib/base_spec.rb +9 -2
- data/spec/lib/container_spec.rb +2 -0
- data/spec/lib/html_class_spec.rb +15 -6
- data/spec/lib/link_spec.rb +25 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 452ea9b6986b74655e20c2b05043adfee92a6f3b
|
4
|
+
data.tar.gz: 5f9afcec73b2e3fcd904f918df595a3c884cce54
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4ced26c53ee1c80985c120ce7edde26b5a5a9306c8c37e25aee711bac374215f17a1b1dc9541bc279705cbd73664a6183e759c6c488b33ead6750a268c4b9c8a
|
7
|
+
data.tar.gz: d0565411c8abde8db3f6225adf5fe814a58ba100609573c3954887a3cab6e1b971c55e698a4b27cb2ea0a6a3ca10e0919aca8f422587cace395ec6171c423703
|
data/README.md
CHANGED
@@ -273,6 +273,12 @@ Creates your own DSL method to create child items. In arguments, you should spec
|
|
273
273
|
|
274
274
|
# Changes
|
275
275
|
|
276
|
+
`0.1.5`
|
277
|
+
* fixed: switches and enums can damage instance variables
|
278
|
+
* fixed: process helper_name option before initialize callbacks
|
279
|
+
* fixed: convert user defined tag to string
|
280
|
+
* added: Link class
|
281
|
+
|
276
282
|
`0.1.4`
|
277
283
|
* added: html_class_prefix
|
278
284
|
|
data/lib/wrap_it/base.rb
CHANGED
@@ -38,15 +38,20 @@ module WrapIt
|
|
38
38
|
def initialize(template, *args, &block)
|
39
39
|
@template, @arguments, @block = template, args, block
|
40
40
|
self.options = @arguments.extract_options!
|
41
|
+
|
42
|
+
@helper_name = @options.delete(:helper_name)
|
43
|
+
@helper_name.is_a?(String) && @helper_name = @helper_name.to_sym
|
44
|
+
|
41
45
|
@arguments.extend ArgumentsArray
|
42
46
|
add_default_classes
|
47
|
+
|
43
48
|
run_callbacks :initialize do
|
44
49
|
@tag = @options.delete(:tag) ||
|
45
50
|
self.class.get_derived(:@default_tag) || 'div'
|
46
|
-
@
|
47
|
-
@helper_name.is_a?(String) && @helper_name = @helper_name.to_sym
|
51
|
+
@tag = @tag.to_s
|
48
52
|
end
|
49
|
-
|
53
|
+
|
54
|
+
@arguments = nil
|
50
55
|
end
|
51
56
|
|
52
57
|
def omit_content?
|
@@ -124,6 +129,10 @@ module WrapIt
|
|
124
129
|
end
|
125
130
|
end
|
126
131
|
|
132
|
+
def unwrap
|
133
|
+
@wrapper = nil
|
134
|
+
end
|
135
|
+
|
127
136
|
protected
|
128
137
|
|
129
138
|
#
|
@@ -132,10 +141,10 @@ module WrapIt
|
|
132
141
|
# @param name [<Symbol, String>] Tag name. Converted to `String`.
|
133
142
|
#
|
134
143
|
# @return [void]
|
135
|
-
def self.default_tag(name)
|
144
|
+
def self.default_tag(name, override = true)
|
136
145
|
name.is_a?(String) || name.is_a?(Symbol) ||
|
137
146
|
fail(ArgumentError, 'Tag name should be a String or Symbol')
|
138
|
-
@default_tag = name.to_s
|
147
|
+
override ? @default_tag = name.to_s : @default_tag ||= name.to_s
|
139
148
|
end
|
140
149
|
|
141
150
|
def self.omit_content
|
@@ -166,7 +175,9 @@ module WrapIt
|
|
166
175
|
|
167
176
|
def do_render
|
168
177
|
# cleanup options from empty values
|
169
|
-
@options.select!
|
178
|
+
@options.select! do |k, v|
|
179
|
+
!v.nil? && (!v.respond_to?(:empty?) || !v.empty?)
|
180
|
+
end
|
170
181
|
run_callbacks :render do
|
171
182
|
@content = content_tag(tag, @content, options)
|
172
183
|
end
|
data/lib/wrap_it/callbacks.rb
CHANGED
data/lib/wrap_it/enums.rb
CHANGED
@@ -19,6 +19,7 @@ module WrapIt
|
|
19
19
|
private
|
20
20
|
|
21
21
|
def enums_init
|
22
|
+
@enums = {}
|
22
23
|
opt_keys = @options.keys
|
23
24
|
enums.each do |name, opts|
|
24
25
|
value = nil
|
@@ -36,7 +37,7 @@ module WrapIt
|
|
36
37
|
end
|
37
38
|
|
38
39
|
def enums
|
39
|
-
@
|
40
|
+
@enums_hash ||= self.class.collect_derived(:@enums, {}, :merge)
|
40
41
|
end
|
41
42
|
|
42
43
|
#
|
@@ -89,8 +90,7 @@ module WrapIt
|
|
89
90
|
opts[:regexp] = /\A#{prefix}(?:#{values.join('|')})\z/
|
90
91
|
opts[:html_class_prefix] = prefix
|
91
92
|
end
|
92
|
-
|
93
|
-
define_method("#{name}") { instance_variable_get(var) }
|
93
|
+
define_method("#{name}") { @enums[name] }
|
94
94
|
define_method("#{name}=", &Enums.setter(name, &block))
|
95
95
|
@enums ||= {}
|
96
96
|
@enums[name] = opts
|
@@ -104,7 +104,7 @@ module WrapIt
|
|
104
104
|
opts = enums[name]
|
105
105
|
v = value if opts[:values].include?(value)
|
106
106
|
v ||= opts[:default] if opts.key?(:default)
|
107
|
-
|
107
|
+
@enums[name] = v
|
108
108
|
block.nil? || instance_exec(v, &block)
|
109
109
|
if opts.key?(:regexp)
|
110
110
|
remove_html_class(opts[:regexp])
|
data/lib/wrap_it/html_class.rb
CHANGED
@@ -46,7 +46,7 @@ module WrapIt
|
|
46
46
|
#
|
47
47
|
# @return [String] HTML class prefix.
|
48
48
|
def html_class_prefix
|
49
|
-
self.class.html_class_prefix
|
49
|
+
@html_class_prefix ||= self.class.html_class_prefix
|
50
50
|
end
|
51
51
|
|
52
52
|
#
|
@@ -222,7 +222,7 @@ module WrapIt
|
|
222
222
|
#
|
223
223
|
# @return [void]
|
224
224
|
def html_class_prefix(prefix = nil)
|
225
|
-
return
|
225
|
+
return(get_derived(:@html_class_prefix) || '') if prefix.nil?
|
226
226
|
prefix.is_a?(String) || prefix.is_a?(Symbol) || fail(
|
227
227
|
ArgumentError, 'prefix should be a String or Symbol'
|
228
228
|
)
|
data/lib/wrap_it/link.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
module WrapIt
|
2
|
+
#
|
3
|
+
# Link
|
4
|
+
#
|
5
|
+
# @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
|
6
|
+
#
|
7
|
+
class Link < Base
|
8
|
+
include TextContainer
|
9
|
+
|
10
|
+
default_tag 'a'
|
11
|
+
|
12
|
+
def href
|
13
|
+
@options[:href]
|
14
|
+
end
|
15
|
+
|
16
|
+
def href=(value)
|
17
|
+
if value.is_a?(Hash)
|
18
|
+
defined?(Rails) || fail(
|
19
|
+
ArgumentError,
|
20
|
+
'Hash links supported only in Rails env'
|
21
|
+
)
|
22
|
+
value = @template.url_for(value)
|
23
|
+
end
|
24
|
+
value.is_a?(String) || fail(ArgumentError, 'Wrong link type')
|
25
|
+
@options[:href] = value
|
26
|
+
end
|
27
|
+
|
28
|
+
before_initialize do
|
29
|
+
link = @options[:link] || @options[:href] || @options[:url]
|
30
|
+
@options.delete(:link)
|
31
|
+
@options.delete(:href)
|
32
|
+
@options.delete(:url)
|
33
|
+
unless link.is_a?(String) || link.is_a?(Hash)
|
34
|
+
@block.nil? && tmp = @arguments.extract_first!(String)
|
35
|
+
link = @arguments.extract_first!(String)
|
36
|
+
tmp.nil? || @arguments.unshift(tmp)
|
37
|
+
end
|
38
|
+
link.nil? || self.href = link
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/wrap_it/switches.rb
CHANGED
@@ -19,8 +19,9 @@ module WrapIt
|
|
19
19
|
private
|
20
20
|
|
21
21
|
def switches_init
|
22
|
+
@switches = {}
|
22
23
|
keys = switches.keys
|
23
|
-
keys.each { |switch|
|
24
|
+
# keys.each { |switch| @switches[switch] = false }
|
24
25
|
@options.keys.select { |o| keys.include?(o) }.each do |switch|
|
25
26
|
send("#{switches[switch][:name]}=", @options.delete(switch) == true)
|
26
27
|
end
|
@@ -30,7 +31,7 @@ module WrapIt
|
|
30
31
|
end
|
31
32
|
|
32
33
|
def switches
|
33
|
-
@
|
34
|
+
@switches_hash ||= self.class.collect_derived(:@switches, {}, :merge)
|
34
35
|
end
|
35
36
|
|
36
37
|
#
|
@@ -83,8 +84,7 @@ module WrapIt
|
|
83
84
|
end
|
84
85
|
end
|
85
86
|
names = [name] + [[options[:aliases]] || []].flatten.compact
|
86
|
-
|
87
|
-
define_method("#{name}?") { instance_variable_get(var) == true }
|
87
|
+
define_method("#{name}?") { @switches[name] == true }
|
88
88
|
define_method("#{name}=", &Switches.setter(name, &block))
|
89
89
|
@switches ||= {}
|
90
90
|
names.each { |n| @switches[n] = options }
|
@@ -102,7 +102,7 @@ module WrapIt
|
|
102
102
|
def self.setter(name, &block)
|
103
103
|
proc do |value|
|
104
104
|
opts = switches[name]
|
105
|
-
|
105
|
+
@switches[name] = value == true
|
106
106
|
if value == true
|
107
107
|
opts.key?(:html_class) && add_html_class(*opts[:html_class])
|
108
108
|
block.nil? || instance_exec(true, &block)
|
data/lib/wrap_it/version.rb
CHANGED
data/lib/wrap_it.rb
CHANGED
data/spec/lib/base_spec.rb
CHANGED
@@ -14,10 +14,17 @@ describe WrapIt::Base do
|
|
14
14
|
expect(successor(tag: 'p').tag).to eq 'p'
|
15
15
|
end
|
16
16
|
|
17
|
-
it '
|
17
|
+
it 'drops @arguments after init' do
|
18
18
|
expect(
|
19
19
|
successor.instance_variable_get(:@arguments)
|
20
|
-
).to
|
20
|
+
).to be_nil
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'extends @arguments with ArgumentsArray module' do
|
24
|
+
args = nil
|
25
|
+
successor_class.class_eval { after_initialize { args = @arguments } }
|
26
|
+
successor
|
27
|
+
expect(args).to be_kind_of WrapIt::ArgumentsArray
|
21
28
|
end
|
22
29
|
|
23
30
|
it 'symbolizes options hash' do
|
data/spec/lib/container_spec.rb
CHANGED
data/spec/lib/html_class_spec.rb
CHANGED
@@ -10,12 +10,21 @@ describe WrapIt::HTMLClass do
|
|
10
10
|
expect(sub_class.new(template).html_class).to eq %w(a d e b c)
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
13
|
+
describe '#html_class_prefix' do
|
14
|
+
it 'returns empty string by default' do
|
15
|
+
expect(wrapper.html_class_prefix).to eq ''
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'returns value setted by class method' do
|
19
|
+
wrapper_class.class_eval { html_class_prefix 'e-' }
|
20
|
+
expect(wrapper.html_class_prefix).to eq 'e-'
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'returns derived value' do
|
24
|
+
wrapper_class.class_eval { html_class_prefix 'e-' }
|
25
|
+
sub_class = Class.new(wrapper_class)
|
26
|
+
expect(sub_class.new(template).html_class_prefix).to eq 'e-'
|
27
|
+
end
|
19
28
|
end
|
20
29
|
|
21
30
|
it 'has #add_html_class with chaining' do
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe WrapIt::Link do
|
4
|
+
it 'has `a` tag by default' do
|
5
|
+
expect(successor.tag).to eq 'a'
|
6
|
+
end
|
7
|
+
|
8
|
+
it { expect(successor).to be_kind_of WrapIt::TextContainer }
|
9
|
+
|
10
|
+
it 'takes href from options' do
|
11
|
+
[:link, :href, :url].each do |key|
|
12
|
+
@successor = nil
|
13
|
+
expect(successor(key => 'url').href).to eq 'url'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'takes href from first string arg if block present' do
|
18
|
+
expect(successor('url') { 'text' }.href).to eq 'url'
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'takes href from second string arg if no block given' do
|
22
|
+
expect(successor('text', 'url').href).to eq 'url'
|
23
|
+
expect(successor.instance_variable_get(:@body)).to eq 'text'
|
24
|
+
end
|
25
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wrap_it
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexey Ovchinnikov
|
@@ -116,6 +116,7 @@ files:
|
|
116
116
|
- lib/wrap_it/enums.rb
|
117
117
|
- lib/wrap_it/html_class.rb
|
118
118
|
- lib/wrap_it/html_data.rb
|
119
|
+
- lib/wrap_it/link.rb
|
119
120
|
- lib/wrap_it/no_rails.rb
|
120
121
|
- lib/wrap_it/rails.rb
|
121
122
|
- lib/wrap_it/switches.rb
|
@@ -130,6 +131,7 @@ files:
|
|
130
131
|
- spec/lib/enums_spec.rb
|
131
132
|
- spec/lib/html_class_spec.rb
|
132
133
|
- spec/lib/html_data_spec.rb
|
134
|
+
- spec/lib/link_spec.rb
|
133
135
|
- spec/lib/switches_spec.rb
|
134
136
|
- spec/rails/base_spec.rb
|
135
137
|
- spec/rails/container_spec.rb
|
@@ -174,6 +176,7 @@ test_files:
|
|
174
176
|
- spec/lib/enums_spec.rb
|
175
177
|
- spec/lib/html_class_spec.rb
|
176
178
|
- spec/lib/html_data_spec.rb
|
179
|
+
- spec/lib/link_spec.rb
|
177
180
|
- spec/lib/switches_spec.rb
|
178
181
|
- spec/rails/base_spec.rb
|
179
182
|
- spec/rails/container_spec.rb
|