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