view-cell 0.7.0 → 0.8.2

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
  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: []