view-cell 0.7.0
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 +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: []
|