view-cell 0.7.0 → 0.8.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a15d49ffdcd069071a8221bbc30a4085ddc6e5a99899aa4269b1c8e806557971
4
- data.tar.gz: 22c6c8ddf07120ffbc4b4efb69bbc8329d769e8577da336f6d2d8081cca7afd4
3
+ metadata.gz: e824d4c0b1b36272bec26a314c40443dd2ff0aab2c9aa42f2d299ad9bb60932b
4
+ data.tar.gz: 9fdcfa09e93d5757ed33c52f9858fea668b13e1410be8a77ad36392fa482bbc9
5
5
  SHA512:
6
- metadata.gz: f57e0b945f9533fd17c0cbd389c81ce860129a73299b54b6384ab3ea037d6da7510355540df5a2211ca6d473aa55388d40d8e67b771f4319a3ea3634de2c08f6
7
- data.tar.gz: 9b8c586e7353abcd7a365a5634f30943ee7cdbf010d5c88bd4d66cd2ac127a2a3353afcbd5356331a10a5a3f083b8aababa9f9743c7787066a4cadbe2fc3f9c4
6
+ metadata.gz: f74b643dcd73c2a576c932e9644cfbbe77426a2f501dcebb15c0323d332f363ce32121cacea0e6d0da0146d3516577028a32812785c25396b2cb1195f9fa2bc6
7
+ data.tar.gz: 60342055ac39181ed1240d04a8865e19bf748bb7da572e792dd6375bc65520169b8292e20aae9355035caf45fddb6ad28445e957e33f9485d6ea17547c4ecfc8
data/.version CHANGED
@@ -1 +1,3 @@
1
- 0.7.0
1
+ 0.8.2
2
+
3
+
data/lib/adapters/view.rb CHANGED
@@ -1,14 +1,14 @@
1
- klass =
2
- if defined? ActionView::Base
3
- ActionView::Base
4
- elsif defined? HtmlHelper
5
- HtmlHelper
6
- end
1
+ if Object.const_defined?('ActionView::Base')
2
+ # Rails inject
3
+ ActionView::Base.include ViewCell::ProxyMethod
4
+
5
+ elsif Object.const_defined?('Lux::Template::Helper')
6
+ # Lux inject
7
+ Lux::Template::Helper.include ViewCell::ProxyMethod
8
+
9
+ elsif Object.const_defined?('Sinatra::Application')
10
+ # Sinatra inject
11
+ Sinatra::Application.include ViewCell::ProxyMethod
7
12
 
8
- if klass
9
- klass.class_eval do
10
- def cell *args
11
- ViewCell.cell self, *args
12
- end
13
- end
14
13
  end
14
+
data/lib/view-cell.rb CHANGED
@@ -3,3 +3,18 @@ require_relative 'view-cell/instance'
3
3
  require_relative 'view-cell/proxy'
4
4
 
5
5
  require_relative 'adapters/view'
6
+
7
+ # If inflectors are not present, inject them (thx Piotr)
8
+ for el in [:underscore, :classify, :constantize]
9
+ unless ''.respond_to?(el)
10
+ require 'dry/inflector'
11
+
12
+ eval %[
13
+ class String
14
+ def #{el}
15
+ Dry::Inflector.new.#{el}(self)
16
+ end
17
+ end
18
+ ]
19
+ end
20
+ end
@@ -9,22 +9,53 @@ class ViewCell
9
9
  end
10
10
 
11
11
  # delegate current scope methods to parent binding
12
+ # delegate :image_tag, :request, params
12
13
  def delegate *list
13
14
  list.each do |el|
14
15
  define_method(el) { |*args, &block| parent.send(el, *args, &block) }
15
16
  end
16
17
  end
17
18
 
18
- # cell.user.profile
19
- # cell(:user, user: @user).profile
19
+ # = cell @users
20
+ # = cell @user
21
+ # = cell.user.render @user
22
+ # = cell(:user, user: @user).render
20
23
  def cell parent, *args
21
24
  if args.first
22
- ViewCell.get(parent, *args)
25
+ # covert to list of objects
26
+ unless [String, Symbol, Array].include?(args[0].class)
27
+ args[0] = [args.first]
28
+ end
29
+
30
+ out =
31
+ if args.first.class == Array
32
+ # cell @users
33
+ args.first.map do |object|
34
+ name = object.class.to_s.underscore.to_sym
35
+ ViewCell.get(parent, name).render object
36
+ end.join('')
37
+ else
38
+ # cell(:user, user: @user).profile
39
+ ViewCell.get parent, *args
40
+ end
41
+
42
+ out.respond_to?(:html_safe) ? out.html_safe : out
23
43
  else
44
+ # cell.user.profile
24
45
  ViewCell::Proxy.new(parent)
25
46
  end
26
47
  end
27
48
 
49
+ # can be called as a block or a method
50
+ # block do ...
51
+ # def block; super; ...
52
+ def before &block
53
+ define_method :before do
54
+ super() if self.class != ViewCell
55
+ instance_exec &block
56
+ end
57
+ end
58
+
28
59
  # set or get template root directory
29
60
  def template_root name=nil
30
61
  if name
@@ -24,11 +24,11 @@ class ViewCell
24
24
 
25
25
  # call
26
26
  def cell *args
27
- ViewCell.get @_parent, *args
27
+ ViewCell.cell @_parent, *args
28
28
  end
29
29
 
30
30
  # render template by name
31
- def render name
31
+ def template name
32
32
  template_root = self.class.template_root
33
33
  class_part = self.class.to_s.underscore.sub(/_cell$/, '')
34
34
 
@@ -42,7 +42,7 @@ class ViewCell
42
42
 
43
43
  name = name % class_part if name.include?('%s')
44
44
 
45
- RENDER_CACHE.delete(name) if Rails.env.development?
45
+ RENDER_CACHE.delete(name) if _development?
46
46
 
47
47
  RENDER_CACHE[name] ||= proc do
48
48
  # find extension if one not provided
@@ -51,14 +51,23 @@ class ViewCell
51
51
  unless name =~ /\.\w{2,4}$/
52
52
  if (file = Dir['%s*' % name].first)
53
53
  file_name = file
54
- else
55
- raise 'Template "%s.*" not found' % name
56
54
  end
57
55
  end
58
56
 
57
+ unless File.exist?(file_name)
58
+ raise ArgumentError, 'Template "%s.*" not found' % name
59
+ end
60
+
59
61
  Tilt.new(file_name)
60
62
  end.call
61
63
 
62
- RENDER_CACHE[name].render(self).html_safe
64
+ out = RENDER_CACHE[name].render(self)
65
+ out.respond_to?(:html_safe) ? out.html_safe : out
66
+ end
67
+
68
+ private
69
+
70
+ def _development?
71
+ ENV['RAILS_ENV'] == 'development' || ENV['RACK_ENV'] == 'development'
63
72
  end
64
73
  end
@@ -10,4 +10,11 @@ class ViewCell
10
10
  ViewCell.get(@parent, cell_name, vars)
11
11
  end
12
12
  end
13
+
14
+ # adaptrer will inject this
15
+ module ProxyMethod
16
+ def cell *args
17
+ ViewCell.cell self, *args
18
+ end
19
+ end
13
20
  end
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: view-cell
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dino Reic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-11 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2021-03-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: tilt
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: dry-inflector
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
13
41
  description: Clean, simple explicit and strait-forward web view cell for use in Rails/Sinatra/Lux.
14
42
  email: reic.dino@gmail.com
15
43
  executables: []