trenni-formatters 2.7.0 → 2.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +5 -11
- data/lib/trenni/formatters/formatter.rb +44 -2
- data/lib/trenni/formatters/html/definition_list_form.rb +14 -9
- data/lib/trenni/formatters/html/form_formatter.rb +0 -10
- data/lib/trenni/formatters/truncated_text.rb +8 -8
- data/lib/trenni/formatters/version.rb +1 -1
- data/spec/trenni/formatters/html/form_formatter_spec.rb +22 -1
- data/trenni-formatters.gemspec +1 -1
- metadata +7 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d037e40cc445eb738842fe5d21e393b3b9166a4cd0cc16f663a68d89748029c3
|
4
|
+
data.tar.gz: 971da30b39aa8c5bfb40d2838ef09083abb25ff054e6ab8d4dfc63b405a5d2dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dab2480c97459bbb95ec16b6c68a006d6cf513ad3888f0484d38b2136a0ea8c62eb948692ecc8d573a98a4030e96365b3b6dfef3fd9aab7229eb7bddffdeef26
|
7
|
+
data.tar.gz: af3b1cf1cb56ae17c96c1ba08b3975c6667a30b4e303a61453132fb5bf977b630eca7ea9224e5b45fd1e75d096705f7908d233ea8a22d600d9802711d60a3568
|
data/.travis.yml
CHANGED
@@ -25,12 +25,54 @@ require 'mapping/descendants'
|
|
25
25
|
module Trenni
|
26
26
|
module Formatters
|
27
27
|
class Formatter < Mapping::Model
|
28
|
-
def
|
28
|
+
def self.for(object, **options)
|
29
|
+
self.new(object: object, **options)
|
30
|
+
end
|
31
|
+
|
32
|
+
def initialize(**options)
|
29
33
|
@options = options
|
30
34
|
end
|
31
35
|
|
36
|
+
# The target object of the form.
|
37
|
+
def object
|
38
|
+
@object ||= @options[:object]
|
39
|
+
end
|
40
|
+
|
41
|
+
# The name of the field, used for the name attribute of an input.
|
42
|
+
def name_for(**options)
|
43
|
+
name = options[:name] || options[:field]
|
44
|
+
|
45
|
+
if suffix = options[:suffix]
|
46
|
+
name = "#{name}#{suffix}"
|
47
|
+
end
|
48
|
+
|
49
|
+
if nested_name = options[:nested_name]
|
50
|
+
"#{nested_name}[#{name}]"
|
51
|
+
else
|
52
|
+
name
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def nested_name_for(**options)
|
57
|
+
name_for(**options)
|
58
|
+
end
|
59
|
+
|
60
|
+
def nested(name, key = name, klass: self.class)
|
61
|
+
options = @options.dup
|
62
|
+
target = self.object.send(name)
|
63
|
+
|
64
|
+
options[:object] = target
|
65
|
+
options[:nested_name] = nested_name_for(name: key)
|
66
|
+
|
67
|
+
formatter = klass.new(**options)
|
68
|
+
|
69
|
+
return formatter unless block_given?
|
70
|
+
|
71
|
+
yield formatter
|
72
|
+
end
|
73
|
+
|
32
74
|
attr :options
|
33
|
-
|
75
|
+
|
34
76
|
def format_unspecified(object, options)
|
35
77
|
object.to_s
|
36
78
|
end
|
@@ -36,14 +36,14 @@ module Trenni
|
|
36
36
|
Builder.fragment do |builder|
|
37
37
|
builder.inline(:dt) do
|
38
38
|
builder.text title_for(options)
|
39
|
-
|
40
|
-
if details = details_for(options)
|
41
|
-
builder.inline(:small) { builder.text details }
|
42
|
-
end
|
43
39
|
end
|
44
40
|
|
45
41
|
builder.inline(:dd) do
|
46
42
|
builder.tag :input, input_attributes_for(options)
|
43
|
+
|
44
|
+
if details = details_for(options)
|
45
|
+
builder.inline(:small, class: 'details') { builder.text details }
|
46
|
+
end
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
@@ -72,7 +72,7 @@ module Trenni
|
|
72
72
|
builder.text title_for(options)
|
73
73
|
|
74
74
|
if details = details_for(options)
|
75
|
-
builder.inline(:small) { builder.text details }
|
75
|
+
builder.inline(:small, class: 'details') { builder.text details }
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
@@ -91,11 +91,16 @@ module Trenni
|
|
91
91
|
Builder.fragment do |builder|
|
92
92
|
builder.tag(:dd) do
|
93
93
|
builder.tag :input, :type => :hidden, :name => name_for(options), :value => 'false'
|
94
|
+
|
94
95
|
builder.inline(:label) do
|
95
96
|
builder.tag :input, checkbox_attributes_for(options)
|
96
97
|
# We would like a little bit of whitespace between the checkbox and the title.
|
97
98
|
builder.text " " + title_for(options)
|
98
99
|
end
|
100
|
+
|
101
|
+
if details = details_for(options)
|
102
|
+
builder.inline(:small, class: 'details') { builder.text details }
|
103
|
+
end
|
99
104
|
end
|
100
105
|
end
|
101
106
|
end
|
@@ -117,14 +122,14 @@ module Trenni
|
|
117
122
|
buffer << Builder.fragment do |builder|
|
118
123
|
builder.inline(:dt) do
|
119
124
|
builder.text title_for(options)
|
120
|
-
|
121
|
-
if details = details_for(options)
|
122
|
-
builder.inline(:small) { builder.text details }
|
123
|
-
end
|
124
125
|
end
|
125
126
|
|
126
127
|
builder.tag(:dd) do
|
127
128
|
klass.call(self, options, builder, &block)
|
129
|
+
|
130
|
+
if details = details_for(options)
|
131
|
+
builder.inline(:small, class: 'details') { builder.text details }
|
132
|
+
end
|
128
133
|
end
|
129
134
|
end
|
130
135
|
end
|
@@ -24,11 +24,6 @@ module Trenni
|
|
24
24
|
module Formatters
|
25
25
|
module HTML
|
26
26
|
module FormFormatter
|
27
|
-
# The target object of the form.
|
28
|
-
def object
|
29
|
-
@object ||= @options[:object]
|
30
|
-
end
|
31
|
-
|
32
27
|
# Return true if the object is begin created or false if it is being updated.
|
33
28
|
def new_record?
|
34
29
|
object.new_record?
|
@@ -39,11 +34,6 @@ module Trenni
|
|
39
34
|
options[:details]
|
40
35
|
end
|
41
36
|
|
42
|
-
# The name of the field, used for the name attribute of an input.
|
43
|
-
def name_for(options)
|
44
|
-
options[:name] || options[:field]
|
45
|
-
end
|
46
|
-
|
47
37
|
def field_for(options)
|
48
38
|
options[:field]
|
49
39
|
end
|
@@ -27,24 +27,24 @@ module Trenni
|
|
27
27
|
def truncated_text(content, options = {})
|
28
28
|
if content
|
29
29
|
length = options.fetch(:length, 30)
|
30
|
-
|
30
|
+
|
31
31
|
content = TruncatedText.truncate_text(content, length, options)
|
32
32
|
|
33
33
|
return self.format(content)
|
34
34
|
end
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
def self.truncate_text(text, truncate_at, options = {})
|
38
38
|
return text.dup unless text.length > truncate_at
|
39
|
-
|
39
|
+
|
40
40
|
options[:omission] ||= '...'
|
41
41
|
length_with_room_for_omission = truncate_at - options[:omission].length
|
42
42
|
stop = if options[:separator]
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
43
|
+
text.rindex(options[:separator], length_with_room_for_omission) || length_with_room_for_omission
|
44
|
+
else
|
45
|
+
length_with_room_for_omission
|
46
|
+
end
|
47
|
+
|
48
48
|
"#{text[0...stop]}#{options[:omission]}"
|
49
49
|
end
|
50
50
|
end
|
@@ -27,7 +27,7 @@ module Trenni::Formatters::FormFormatterSpec
|
|
27
27
|
end
|
28
28
|
|
29
29
|
describe Trenni::Formatters do
|
30
|
-
let(:formatter) {FormFormatter.
|
30
|
+
let(:formatter) {FormFormatter.for(double(bar: 10))}
|
31
31
|
|
32
32
|
it "should generate form" do
|
33
33
|
result = formatter.input(:field => :bar)
|
@@ -43,6 +43,27 @@ module Trenni::Formatters::FormFormatterSpec
|
|
43
43
|
result = formatter.input(:field => :bar, :title => "Title")
|
44
44
|
expect(result).to be == %Q{<dt>Title</dt>\n<dd><input name="bar" value="10"/></dd>}
|
45
45
|
end
|
46
|
+
|
47
|
+
context "with key" do
|
48
|
+
let(:formatter) {FormFormatter.for(double(bar: 10), nested_name: 'attributes')}
|
49
|
+
|
50
|
+
it "should generate form with nested name" do
|
51
|
+
result = formatter.input(:field => :bar)
|
52
|
+
expect(result).to be == %Q{<dt>Bar</dt>\n<dd><input name="attributes[bar]" value="10"/></dd>}
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "with nested object" do
|
57
|
+
let(:formatter) {FormFormatter.for(double(animal: double(name: "cat")))}
|
58
|
+
|
59
|
+
it "can generate nested attributes" do
|
60
|
+
result = formatter.nested(:animal) do |formatter|
|
61
|
+
formatter.input(field: :name)
|
62
|
+
end
|
63
|
+
|
64
|
+
expect(result).to be == %Q{<dt>Name</dt>\n<dd><input name="animal[name]" value="cat"/></dd>}
|
65
|
+
end
|
66
|
+
end
|
46
67
|
end
|
47
68
|
|
48
69
|
describe "<input>" do
|
data/trenni-formatters.gemspec
CHANGED
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_dependency "trenni", "~> 3.4"
|
28
28
|
spec.add_dependency "mapping", "~> 1.1"
|
29
29
|
|
30
|
-
spec.add_development_dependency "bundler"
|
30
|
+
spec.add_development_dependency "bundler"
|
31
31
|
spec.add_development_dependency "rspec", "~> 3.4"
|
32
32
|
spec.add_development_dependency "rake"
|
33
33
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trenni-formatters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: trenni
|
@@ -42,16 +42,16 @@ dependencies:
|
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -133,8 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
133
|
- !ruby/object:Gem::Version
|
134
134
|
version: '0'
|
135
135
|
requirements: []
|
136
|
-
|
137
|
-
rubygems_version: 2.6.10
|
136
|
+
rubygems_version: 3.0.1
|
138
137
|
signing_key:
|
139
138
|
specification_version: 4
|
140
139
|
summary: Formatters for Trenni, to assist with typical views and form based interfaces.
|