lotus-helpers 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 30f2cf703b4746c9bd13c43eb4f7e8d080251dd2
4
- data.tar.gz: 78149500f0aefbcd5748f5184d5927cbc3e524e1
3
+ metadata.gz: d83c162dc06d805a23d1266f8898ef9dbfaf1527
4
+ data.tar.gz: d2c072bfbcb73f392862e8614f3ac1c7ecf739a8
5
5
  SHA512:
6
- metadata.gz: 903e02d8560775ebae4c3801cd263d7477766065bf31936e845c245c4a1d526093b2375e7900e5244522b2e9aaafc7c4f84c47cb9f8c1c4fa38b15bb2019a5dc
7
- data.tar.gz: 3e840682aef29d505b238de7085cb6703ae31dff639c8b31b04064f4498a5d87f553fe09ae302cd2419d45bfaa8fffa15d7016425f3c24291e3f83b5e9310c34
6
+ metadata.gz: 46166d61c7fe8ae7c7b13cbc98c55ae830f836970f93247559c0045dcca7827fd71ea32fbac75482a8c9b362ae56e6e84f9e75359634f5c747b446df390e83df
7
+ data.tar.gz: 9b932b774eb95ed64c2e6c4779cfaf37a4861cce5121f55c9b29114809bfb748b43dcfa36ffe13dea19d59a3ff80f175720c57f9070cf2ff865c1af55720367b
@@ -0,0 +1,35 @@
1
+ # Lotus::Helpers
2
+ View helpers for Ruby web applications
3
+
4
+ ## v0.2.6 - 2016-01-12
5
+ ### Added
6
+ - [Cam Huynh] Added support for HTML helper (`#html`) block syntax (eg. `html { div('hello') }`)
7
+ - [Shin-ichi Ueda] Added support for `<dd>` HTML tag
8
+
9
+ ### Fixed
10
+ - [Rodrigo Panachi] Don't generate CSRF token hidden input for forms with `GET` method
11
+
12
+ ## v0.2.5 - 2015-09-30
13
+ ### Added
14
+ - [Leonardo Saraiva] Improved support for HTML content in `#link_to` helper. It now accepts blocks to build markup inside an anchor tag.
15
+ - [José Mota] Added `#text` to the form builder
16
+ - [Alex Wochna] Added `#number_field` to the form builder
17
+ - [Scott Le] Added `#text_area` to the form builder
18
+
19
+ ### Fixed
20
+ - [Pascal Betz] Ensure boolean attributes in HTML forms to not be printed if their value is `nil` (eg. avoid to print `disabled=""`).
21
+
22
+ ### Changed
23
+ - [Luca Guidi] Form `#label` helper outputs capitalized strings, instead of titleized (eg. `"Remember me"` instead of `"Remember Me"`).
24
+
25
+ ## v0.2.0 - 2015-06-23
26
+ ### Added
27
+ - [Luca Guidi] Introduced `Lotus::Helpers::FormHelper`. HTML5 form generator (`#form_for`).
28
+ - [Tom Kadwill & Luca Guidi] Introduced `Lotus::Helpers::NumberFormattingHelper`. Format numbers (`#format_number`).
29
+ - [Tom Kadwill] Introduced `Lotus::Helpers::LinkToHelper`. Link helper (`#link_to`).
30
+
31
+ ## v0.1.0 - 2015-03-23
32
+ ### Added
33
+ - [Luca Guidi] Introduced `Lotus::Helpers::RoutingHelper`. It exposes `#routes` in views for compatibility with Lotus (`lotusrb` gem)
34
+ - [Alfonso Uceda Pompa] Introduced `Lotus::Helpers::EscapeHelper`. It implements OWASP/ESAPI suggestions for HTML, HTML attribute and URL escape helpers.
35
+ - [Luca Guidi] Introduced `Lotus::Helpers::HtmlHelper`. It allows to generate complex HTML5 markup with Ruby.
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014 Luca Guidi
1
+ Copyright (c) 2014-2016 Luca Guidi
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -384,4 +384,4 @@ __Lotus::Helpers__ uses [Semantic Versioning 2.0.0](http://semver.org)
384
384
 
385
385
  ## Copyright
386
386
 
387
- Copyright © 2014-2015 Luca Guidi – Released under MIT License
387
+ Copyright © 2014-2016 Luca Guidi – Released under MIT License
@@ -18,6 +18,12 @@ module Lotus
18
18
  # @api private
19
19
  BROWSER_METHODS = ['GET', 'POST'].freeze
20
20
 
21
+ # Set of HTTP methods that should NOT generate CSRF token
22
+ #
23
+ # @since 0.2.0
24
+ # @api private
25
+ EXCLUDED_CSRF_METHODS = ['GET'].freeze
26
+
21
27
  # Checked attribute value
22
28
  #
23
29
  # @since 0.2.0
@@ -106,15 +112,16 @@ module Lotus
106
112
 
107
113
  # Nested form
108
114
  if @context.nil? && attributes.is_a?(Values)
109
- @values = attributes
110
- @attributes = {}
111
- @name = form
115
+ @values = attributes
116
+ @attributes = {}
117
+ @name = form
112
118
  else
113
- @form = form
114
- @name = form.name
115
- @values = Values.new(form.values, @context.params)
116
- @attributes = attributes
117
- @csrf_token = csrf_token
119
+ @form = form
120
+ @name = form.name
121
+ @values = Values.new(form.values, @context.params)
122
+ @attributes = attributes
123
+ @verb_method = verb_method
124
+ @csrf_token = csrf_token
118
125
  end
119
126
  end
120
127
 
@@ -792,22 +799,27 @@ module Lotus
792
799
  # @api private
793
800
  # @since 0.2.0
794
801
  def _method_override!
795
- verb = (@attributes.fetch(:method) { DEFAULT_METHOD }).to_s.upcase
796
-
797
- if BROWSER_METHODS.include?(verb)
798
- @attributes[:method] = verb
802
+ if BROWSER_METHODS.include?(@verb_method)
803
+ @attributes[:method] = @verb_method
799
804
  else
800
805
  @attributes[:method] = DEFAULT_METHOD
801
- @verb = verb
806
+ @verb = @verb_method
802
807
  end
803
808
  end
804
809
 
810
+ # Return the method from attributes
811
+ #
812
+ # @api private
813
+ def verb_method
814
+ (@attributes.fetch(:method) { DEFAULT_METHOD }).to_s.upcase
815
+ end
816
+
805
817
  # Return CSRF Protection token from view context
806
818
  #
807
819
  # @api private
808
820
  # @since 0.2.0
809
821
  def csrf_token
810
- @context.csrf_token if @context.respond_to?(:csrf_token)
822
+ @context.csrf_token if @context.respond_to?(:csrf_token) && !EXCLUDED_CSRF_METHODS.include?(@verb_method)
811
823
  end
812
824
 
813
825
  # Return a set of default HTML attributes
@@ -65,6 +65,15 @@ module Lotus
65
65
  # # hello
66
66
  # #</div>
67
67
  #
68
+ # # 8
69
+ # html do
70
+ # li 'Hello'
71
+ # li 'Lotus'
72
+ # end
73
+ # # =>
74
+ # #<li>Hello</li>
75
+ # #<li>Lotus</li>
76
+ #
68
77
  #
69
78
  #
70
79
  # @example Complex markup
@@ -178,14 +187,20 @@ module Lotus
178
187
  private
179
188
  # Instantiate an HTML builder
180
189
  #
190
+ # @param blk [Proc,Lotus::Helpers::HtmlHelper::HtmlBuilder,NilClass] the optional content block
191
+ #
181
192
  # @return [Lotus::Helpers::HtmlHelper::HtmlBuilder] the HTML builder
182
193
  #
183
194
  # @since 0.1.0
184
195
  #
185
196
  # @see Lotus::Helpers::HtmlHelper
186
197
  # @see Lotus::Helpers::HtmlHelper::HtmlBuilder
187
- def html
188
- HtmlBuilder.new
198
+ def html(&blk)
199
+ if block_given?
200
+ HtmlBuilder.new.fragment(&blk)
201
+ else
202
+ HtmlBuilder.new
203
+ end
189
204
  end
190
205
  end
191
206
  end
@@ -3,6 +3,7 @@ require 'lotus/utils/class_attribute'
3
3
  require 'lotus/utils/escape'
4
4
  require 'lotus/helpers/html_helper/empty_html_node'
5
5
  require 'lotus/helpers/html_helper/html_node'
6
+ require 'lotus/helpers/html_helper/html_fragment'
6
7
  require 'lotus/helpers/html_helper/text_node'
7
8
 
8
9
  module Lotus
@@ -45,6 +46,7 @@ module Lotus
45
46
  'div',
46
47
  'dl',
47
48
  'dt',
49
+ 'dd',
48
50
  'em',
49
51
  'fieldset',
50
52
  'figcaption',
@@ -231,6 +233,32 @@ module Lotus
231
233
  self
232
234
  end
233
235
 
236
+ # Define a HTML fragment
237
+ #
238
+ # @param blk [Proc] the optional nested content espressed as a block
239
+ #
240
+ # @return [self]
241
+ #
242
+ # @since 0.2.6
243
+ # @api public
244
+ #
245
+ # @see Lotus::Helpers::HtmlHelper
246
+ #
247
+ # @example
248
+ # html.fragment('Lotus') # => Lotus
249
+ #
250
+ # html do
251
+ # p 'hello'
252
+ # p 'lotus'
253
+ # end
254
+ # # =>
255
+ # <p>hello</p>
256
+ # <p>lotus</p>
257
+ def fragment(&blk)
258
+ @nodes << HtmlFragment.new(&blk)
259
+ self
260
+ end
261
+
234
262
  # Defines a custom empty tag
235
263
  #
236
264
  # @param name [Symbol,String] the name of the tag
@@ -296,6 +324,18 @@ module Lotus
296
324
  Utils::Escape::SafeString.new(@nodes.map(&:to_s).join(NEWLINE))
297
325
  end
298
326
 
327
+ # Encode the content with the given character encoding
328
+ #
329
+ # @param encoding [Encoding,String] the encoding or its string representation
330
+ #
331
+ # @return [String] the encoded string
332
+ #
333
+ # @since 0.2.5
334
+ # @api private
335
+ def encode(encoding)
336
+ to_s.encode(encoding)
337
+ end
338
+
299
339
  # Check if there are nested nodes
300
340
  #
301
341
  # @return [TrueClass,FalseClass] the result of the check
@@ -0,0 +1,45 @@
1
+ module Lotus
2
+ module Helpers
3
+ module HtmlHelper
4
+ # HTML Fragment
5
+ #
6
+ # @since 0.2.6
7
+ # @api private
8
+ #
9
+ # @see Lotus::Helpers::HtmlHelper::HtmlFragment
10
+ class HtmlFragment
11
+ # Initialize a HTML Fragment
12
+ #
13
+ # @param blk [Proc,Lotus::Helpers::HtmlHelper::HtmlBuilder,NilClass] the content block
14
+ #
15
+ # @return [Lotus::Helpers::HtmlHelper::HtmlFragment]
16
+ def initialize(&blk)
17
+ @builder = HtmlBuilder.new
18
+ @blk = blk
19
+ end
20
+
21
+ # Resolve and return the output
22
+ #
23
+ # @return [String] the output
24
+ #
25
+ # @since 0.2.6
26
+ # @api private
27
+ #
28
+ # @see Lotus::Helpers::HtmlHelper::EmptyHtmlNode#to_s
29
+ def to_s
30
+ content.to_s
31
+ end
32
+
33
+ def content
34
+ result = @builder.resolve(&@blk)
35
+
36
+ if @builder.nested?
37
+ @builder.to_s
38
+ else
39
+ "#{ Utils::Escape.html(result) }"
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -28,10 +28,10 @@ module Lotus
28
28
  # module Web::Views::Home
29
29
  # class Index
30
30
  # include Web::View
31
- # end
32
31
  #
33
- # def link_to_home
34
- # %(<a href="#{ routes.home_path }">Home</a>)
32
+ # def link_to_home
33
+ # %(<a href="#{ routes.home_path }">Home</a>)
34
+ # end
35
35
  # end
36
36
  # end
37
37
  #
@@ -3,6 +3,6 @@ module Lotus
3
3
  # Define version
4
4
  #
5
5
  # @since 0.1.0
6
- VERSION = '0.2.5'.freeze
6
+ VERSION = '0.2.6'.freeze
7
7
  end
8
8
  end
@@ -13,13 +13,13 @@ Gem::Specification.new do |spec|
13
13
  spec.homepage = 'http://lotusrb.org'
14
14
  spec.license = 'MIT'
15
15
 
16
- spec.files = `git ls-files -- lib/* LICENSE.md README.md lotus-helpers.gemspec`.split($/)
16
+ spec.files = `git ls-files -- lib/* CHANGELOG.md LICENSE.md README.md lotus-helpers.gemspec`.split($/)
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
  spec.required_ruby_version = '>= 2.0.0'
21
21
 
22
- spec.add_dependency 'lotus-utils', '~> 0.5', '>= 0.5.2'
22
+ spec.add_dependency 'lotus-utils', '~> 0.6'
23
23
 
24
24
  spec.add_development_dependency 'bundler', '~> 1.6'
25
25
  spec.add_development_dependency 'rake', '~> 10.0'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lotus-helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Guidi
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-09-30 00:00:00.000000000 Z
13
+ date: 2016-01-12 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: lotus-utils
@@ -18,20 +18,14 @@ dependencies:
18
18
  requirements:
19
19
  - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: '0.5'
22
- - - ">="
23
- - !ruby/object:Gem::Version
24
- version: 0.5.2
21
+ version: '0.6'
25
22
  type: :runtime
26
23
  prerelease: false
27
24
  version_requirements: !ruby/object:Gem::Requirement
28
25
  requirements:
29
26
  - - "~>"
30
27
  - !ruby/object:Gem::Version
31
- version: '0.5'
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: 0.5.2
28
+ version: '0.6'
35
29
  - !ruby/object:Gem::Dependency
36
30
  name: bundler
37
31
  requirement: !ruby/object:Gem::Requirement
@@ -83,6 +77,7 @@ executables: []
83
77
  extensions: []
84
78
  extra_rdoc_files: []
85
79
  files:
80
+ - CHANGELOG.md
86
81
  - LICENSE.md
87
82
  - README.md
88
83
  - lib/lotus-helpers.rb
@@ -95,6 +90,7 @@ files:
95
90
  - lib/lotus/helpers/html_helper.rb
96
91
  - lib/lotus/helpers/html_helper/empty_html_node.rb
97
92
  - lib/lotus/helpers/html_helper/html_builder.rb
93
+ - lib/lotus/helpers/html_helper/html_fragment.rb
98
94
  - lib/lotus/helpers/html_helper/html_node.rb
99
95
  - lib/lotus/helpers/html_helper/text_node.rb
100
96
  - lib/lotus/helpers/link_to_helper.rb
@@ -122,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
118
  version: '0'
123
119
  requirements: []
124
120
  rubyforge_project:
125
- rubygems_version: 2.4.5.1
121
+ rubygems_version: 2.5.1
126
122
  signing_key:
127
123
  specification_version: 4
128
124
  summary: Lotus helpers