view-cell 0.8.1 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ddef51affd6bcedf0ce6f86419a5f17cadcd5080bd1173d879deed77c1821868
4
- data.tar.gz: 5b89bac05cf3ffce870d999965b325f0df222ff37f53ea96860696bc184bf017
3
+ metadata.gz: 17fa863f47248eaa8787f33a52b94287380c194adb6502b5757b3adfc4b68e42
4
+ data.tar.gz: 58783589b2318b83f796cf65b8ee074b02472bd154046c1c674401334ee05361
5
5
  SHA512:
6
- metadata.gz: 803efa74181ff96dfa1254af724c9ca933c519572bc4ef1c5159721b6e766cc7d98804e8b40ea433885ea3c9fc3e874154e06e16c03da529bd8ce93e847624b0
7
- data.tar.gz: 51438134607c9aad7c59badc36a39b6960d58011de0c6afa2a35c57926ea740bc742e14fe30b22f7dbf898dfb65c5a5a636a31a9a3339e7219bd4909b2df516b
6
+ metadata.gz: b2c9d1cad6445cd5aeafc47be258bc534c2fffe8192a42654b5d3f4b9d5e1e651a7f8a7fbaf8f2adcdb67dbae676bf4691aa486876f646d22453459c24a7b27c
7
+ data.tar.gz: 8f0c5655356dd424c9803cf164db2c85b2e54a884de894b3de51320efa3758bafbc73d4d3dc42543f269bd12ba2fd0391afd991896f43b881c1579fa5bae6844
data/.version CHANGED
@@ -1,3 +1,4 @@
1
- 0.8.1
1
+ 1.0.0
2
+
2
3
 
3
4
 
data/lib/adapters/view.rb CHANGED
@@ -1,14 +1,17 @@
1
- if Object.const_defined?('ActionView::Base')
2
- # Rails inject
3
- ActionView::Base.include ViewCell::ProxyMethod
1
+ # enables shorcut
2
+ # FooCell.new(self).bar -> cell.foo.bar
4
3
 
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
4
+ # include gem before rails if you do not want to import proxy methods
5
+ # gem 'view-cell'
12
6
 
7
+ [
8
+ 'ActionView::Base',
9
+ 'ActionController::Base',
10
+ 'Lux::Template::Helper',
11
+ 'Lux::Controller',
12
+ 'Sinatra::Application'
13
+ ].each do |klass|
14
+ if Object.const_defined?(klass)
15
+ klass.constantize.include ViewCell::ProxyMethod
16
+ end
13
17
  end
14
-
@@ -1,4 +1,14 @@
1
1
  class ViewCell
2
+ include HtmlTag
3
+
4
+ DATA ||= {
5
+ template_root: nil,
6
+ css: {}
7
+ }
8
+
9
+ # exports "template_root" class attr
10
+ cattr :template_root, class: true
11
+
2
12
  class << self
3
13
  # load cell based on a name, pass context and optional vars
4
14
  # ViewCell.get(:user, self) -> UserCell.new(self)
@@ -9,22 +19,46 @@ class ViewCell
9
19
  end
10
20
 
11
21
  # delegate current scope methods to parent binding
22
+ # delegate :image_tag, :request, params
12
23
  def delegate *list
13
24
  list.each do |el|
14
25
  define_method(el) { |*args, &block| parent.send(el, *args, &block) }
15
26
  end
16
27
  end
17
28
 
29
+ # = cell @users
30
+ # = cell @user
31
+ # = cell.user.render @user
32
+ # = cell(:user, user: @user).render
18
33
  def cell parent, *args
19
34
  if args.first
20
- # cell(:user, user: @user).profile
21
- ViewCell.get(parent, *args)
35
+ # covert to list of objects
36
+ unless [String, Symbol, Array].include?(args[0].class)
37
+ args[0] = [args.first]
38
+ end
39
+
40
+ out =
41
+ if args.first.class == Array
42
+ # cell @users
43
+ args.first.map do |object|
44
+ name = object.class.to_s.underscore.to_sym
45
+ ViewCell.get(parent, name).render object
46
+ end.join('')
47
+ else
48
+ # cell(:user, user: @user).profile
49
+ ViewCell.get parent, *args
50
+ end
51
+
52
+ out.respond_to?(:html_safe) ? out.html_safe : out
22
53
  else
23
54
  # cell.user.profile
24
55
  ViewCell::Proxy.new(parent)
25
56
  end
26
57
  end
27
58
 
59
+ # can be called as a block or a method
60
+ # block do ...
61
+ # def block; super; ...
28
62
  def before &block
29
63
  define_method :before do
30
64
  super() if self.class != ViewCell
@@ -32,12 +66,25 @@ class ViewCell
32
66
  end
33
67
  end
34
68
 
35
- # set or get template root directory
36
- def template_root name=nil
37
- if name
38
- self.class.instance_variable_set :@template_root, name
69
+ def css text = nil
70
+ if text
71
+ require 'sassc' unless Object.const_defined?('SassC')
72
+
73
+ unless text.include?('{')
74
+ dir_name = self.template_root || File.dirname(caller[0].split(':')[0])
75
+ class_part = to_s.underscore.sub(/_cell$/, '')
76
+ dir_name = dir_name % class_part if dir_name.include?('%s')
77
+ css_file = Pathname.new(dir_name).join(text)
78
+ text = css_file.read
79
+ end
80
+
81
+ key = caller[0].split(':in ')[0]
82
+ DATA[:css][key] = SassC::Engine.new(text, style: :compact).render.gsub(/\n+/, $/).chomp
39
83
  else
40
- self.class.instance_variable_get :@template_root
84
+ DATA[:css].inject([]) do |list, el|
85
+ name = el[0].split('/').last.split('.')[0].gsub('_', '-')
86
+ list.push("/* #{name} */\n" + el[1])
87
+ end.join("\n\n")
41
88
  end
42
89
  end
43
90
  end
@@ -1,9 +1,7 @@
1
1
  class ViewCell
2
2
  RENDER_CACHE ||= {}
3
3
 
4
- @template_root = nil
5
-
6
- def initialize parent=nil, vars={}
4
+ def initialize parent = nil, vars={}
7
5
  @_parent = parent
8
6
  vars.each { |k,v| instance_variable_set "@#{k}", v}
9
7
  before
@@ -29,40 +27,35 @@ class ViewCell
29
27
 
30
28
  # render template by name
31
29
  def template 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
30
+ path = if template_root = self.class.template_root
31
+ [template_root, name].join '/'
32
+ else
33
+ [File.dirname(caller[0]), name].join '/'
41
34
  end
42
35
 
43
- name = name % class_part if name.include?('%s')
36
+ class_part = self.class.to_s.underscore.sub(/_cell$/, '')
37
+ path = path % class_part if path.include?('%s')
44
38
 
45
- RENDER_CACHE.delete(name) if _development?
39
+ RENDER_CACHE.delete(path) if _development?
40
+ RENDER_CACHE[path] ||= begin
41
+ file_name = ''
46
42
 
47
- RENDER_CACHE[name] ||= proc do
48
43
  # find extension if one not provided
49
- file_name = name
50
-
51
- unless name =~ /\.\w{2,4}$/
52
- if (file = Dir['%s*' % name].first)
44
+ if path =~ /\.\w{2,4}$/
45
+ file_name = path
46
+ else
47
+ if (file = Dir['%s.*' % path].first)
53
48
  file_name = file
54
49
  end
55
50
  end
56
51
 
57
52
  unless File.exist?(file_name)
58
- raise ArgumentError, 'Template "%s.*" not found' % name
53
+ raise ArgumentError, 'Template "%s.*" not found' % [path.sub(Dir.pwd, '.')]
59
54
  end
60
55
 
61
56
  Tilt.new(file_name)
62
- end.call
63
-
64
- out = RENDER_CACHE[name].render(self)
65
- out.respond_to?(:html_safe) ? out.html_safe : out
57
+ end
58
+ RENDER_CACHE[path].render(self)
66
59
  end
67
60
 
68
61
  private
data/lib/view-cell.rb CHANGED
@@ -1,3 +1,7 @@
1
+ require 'pathname'
2
+ require 'html-tag'
3
+ require 'class-cattr'
4
+
1
5
  require_relative 'view-cell/class'
2
6
  require_relative 'view-cell/instance'
3
7
  require_relative 'view-cell/proxy'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: view-cell
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 1.0.0
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-03-12 00:00:00.000000000 Z
11
+ date: 2024-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tilt
@@ -38,6 +38,48 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sassc
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: html-tag
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: class-cattr
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
41
83
  description: Clean, simple explicit and strait-forward web view cell for use in Rails/Sinatra/Lux.
42
84
  email: reic.dino@gmail.com
43
85
  executables: []
@@ -69,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
69
111
  - !ruby/object:Gem::Version
70
112
  version: '0'
71
113
  requirements: []
72
- rubygems_version: 3.1.2
114
+ rubygems_version: 3.5.3
73
115
  signing_key:
74
116
  specification_version: 4
75
117
  summary: Simple to use web view cell