view-cell 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: a15d49ffdcd069071a8221bbc30a4085ddc6e5a99899aa4269b1c8e806557971
4
+ data.tar.gz: 22c6c8ddf07120ffbc4b4efb69bbc8329d769e8577da336f6d2d8081cca7afd4
5
+ SHA512:
6
+ metadata.gz: f57e0b945f9533fd17c0cbd389c81ce860129a73299b54b6384ab3ea037d6da7510355540df5a2211ca6d473aa55388d40d8e67b771f4319a3ea3634de2c08f6
7
+ data.tar.gz: 9b8c586e7353abcd7a365a5634f30943ee7cdbf010d5c88bd4d66cd2ac127a2a3353afcbd5356331a10a5a3f083b8aababa9f9743c7787066a4cadbe2fc3f9c4
data/.version ADDED
@@ -0,0 +1 @@
1
+ 0.7.0
@@ -0,0 +1,14 @@
1
+ klass =
2
+ if defined? ActionView::Base
3
+ ActionView::Base
4
+ elsif defined? HtmlHelper
5
+ HtmlHelper
6
+ end
7
+
8
+ if klass
9
+ klass.class_eval do
10
+ def cell *args
11
+ ViewCell.cell self, *args
12
+ end
13
+ end
14
+ end
data/lib/view-cell.rb ADDED
@@ -0,0 +1,5 @@
1
+ require_relative 'view-cell/class'
2
+ require_relative 'view-cell/instance'
3
+ require_relative 'view-cell/proxy'
4
+
5
+ require_relative 'adapters/view'
@@ -0,0 +1,37 @@
1
+ class ViewCell
2
+ class << self
3
+ # load cell based on a name, pass context and optional vars
4
+ # ViewCell.get(:user, self) -> UserCell.new(self)
5
+ def get parent, name, vars={}
6
+ ('%sCell' % name.to_s.classify)
7
+ .constantize
8
+ .new parent, vars
9
+ end
10
+
11
+ # delegate current scope methods to parent binding
12
+ def delegate *list
13
+ list.each do |el|
14
+ define_method(el) { |*args, &block| parent.send(el, *args, &block) }
15
+ end
16
+ end
17
+
18
+ # cell.user.profile
19
+ # cell(:user, user: @user).profile
20
+ def cell parent, *args
21
+ if args.first
22
+ ViewCell.get(parent, *args)
23
+ else
24
+ ViewCell::Proxy.new(parent)
25
+ end
26
+ end
27
+
28
+ # set or get template root directory
29
+ def template_root name=nil
30
+ if name
31
+ self.class.instance_variable_set :@template_root, name
32
+ else
33
+ self.class.instance_variable_get :@template_root
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,64 @@
1
+ class ViewCell
2
+ RENDER_CACHE ||= {}
3
+
4
+ @template_root = nil
5
+
6
+ def initialize parent=nil, vars={}
7
+ @_parent = parent
8
+ vars.each { |k,v| instance_variable_set "@#{k}", v}
9
+ before
10
+ end
11
+
12
+ # called every time for every method in a class
13
+ def before
14
+ end
15
+
16
+ # access parent scope
17
+ def parent &block
18
+ if block
19
+ @_parent.instance_exec self, &block
20
+ else
21
+ @_parent
22
+ end
23
+ end
24
+
25
+ # call
26
+ def cell *args
27
+ ViewCell.get @_parent, *args
28
+ end
29
+
30
+ # render template by name
31
+ def render name
32
+ template_root = self.class.template_root
33
+ class_part = self.class.to_s.underscore.sub(/_cell$/, '')
34
+
35
+ if template_root
36
+ name = [template_root, name].join '/'
37
+ elsif name.is_a?(Symbol)
38
+ name = './app/views/cells/%s/%s' % [class_part, name]
39
+ elsif name.to_s =~ /^\w/
40
+ name = './app/views/cells/%s' % name
41
+ end
42
+
43
+ name = name % class_part if name.include?('%s')
44
+
45
+ RENDER_CACHE.delete(name) if Rails.env.development?
46
+
47
+ RENDER_CACHE[name] ||= proc do
48
+ # find extension if one not provided
49
+ file_name = name
50
+
51
+ unless name =~ /\.\w{2,4}$/
52
+ if (file = Dir['%s*' % name].first)
53
+ file_name = file
54
+ else
55
+ raise 'Template "%s.*" not found' % name
56
+ end
57
+ end
58
+
59
+ Tilt.new(file_name)
60
+ end.call
61
+
62
+ RENDER_CACHE[name].render(self).html_safe
63
+ end
64
+ end
@@ -0,0 +1,13 @@
1
+ class ViewCell
2
+ # proxy loader class
3
+ # cell.user.foo -> cell(:user).foo
4
+ class Proxy
5
+ def initialize parent
6
+ @parent = parent
7
+ end
8
+
9
+ def method_missing cell_name, vars={}
10
+ ViewCell.get(@parent, cell_name, vars)
11
+ end
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,48 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: view-cell
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.7.0
5
+ platform: ruby
6
+ authors:
7
+ - Dino Reic
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-02-11 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Clean, simple explicit and strait-forward web view cell for use in Rails/Sinatra/Lux.
14
+ email: reic.dino@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - "./.version"
20
+ - "./lib/adapters/view.rb"
21
+ - "./lib/view-cell.rb"
22
+ - "./lib/view-cell/class.rb"
23
+ - "./lib/view-cell/instance.rb"
24
+ - "./lib/view-cell/proxy.rb"
25
+ homepage: https://github.com/dux/view-cell
26
+ licenses:
27
+ - MIT
28
+ metadata: {}
29
+ post_install_message:
30
+ rdoc_options: []
31
+ require_paths:
32
+ - lib
33
+ required_ruby_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ required_rubygems_version: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ requirements: []
44
+ rubygems_version: 3.0.6
45
+ signing_key:
46
+ specification_version: 4
47
+ summary: Simple to use web view cell
48
+ test_files: []