view-cell 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.version +1 -0
- data/lib/adapters/view.rb +14 -0
- data/lib/view-cell.rb +5 -0
- data/lib/view-cell/class.rb +37 -0
- data/lib/view-cell/instance.rb +64 -0
- data/lib/view-cell/proxy.rb +13 -0
- metadata +48 -0
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
|
data/lib/view-cell.rb
ADDED
@@ -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
|
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: []
|