view-cell 0.8.2 → 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: e824d4c0b1b36272bec26a314c40443dd2ff0aab2c9aa42f2d299ad9bb60932b
4
- data.tar.gz: 9fdcfa09e93d5757ed33c52f9858fea668b13e1410be8a77ad36392fa482bbc9
3
+ metadata.gz: 17fa863f47248eaa8787f33a52b94287380c194adb6502b5757b3adfc4b68e42
4
+ data.tar.gz: 58783589b2318b83f796cf65b8ee074b02472bd154046c1c674401334ee05361
5
5
  SHA512:
6
- metadata.gz: f74b643dcd73c2a576c932e9644cfbbe77426a2f501dcebb15c0323d332f363ce32121cacea0e6d0da0146d3516577028a32812785c25396b2cb1195f9fa2bc6
7
- data.tar.gz: 60342055ac39181ed1240d04a8865e19bf748bb7da572e792dd6375bc65520169b8292e20aae9355035caf45fddb6ad28445e957e33f9485d6ea17547c4ecfc8
6
+ metadata.gz: b2c9d1cad6445cd5aeafc47be258bc534c2fffe8192a42654b5d3f4b9d5e1e651a7f8a7fbaf8f2adcdb67dbae676bf4691aa486876f646d22453459c24a7b27c
7
+ data.tar.gz: 8f0c5655356dd424c9803cf164db2c85b2e54a884de894b3de51320efa3758bafbc73d4d3dc42543f269bd12ba2fd0391afd991896f43b881c1579fa5bae6844
data/.version CHANGED
@@ -1,3 +1,4 @@
1
- 0.8.2
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)
@@ -56,12 +66,25 @@ class ViewCell
56
66
  end
57
67
  end
58
68
 
59
- # set or get template root directory
60
- def template_root name=nil
61
- if name
62
- 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
63
83
  else
64
- 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")
65
88
  end
66
89
  end
67
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.2
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-15 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.0.6
114
+ rubygems_version: 3.5.3
73
115
  signing_key:
74
116
  specification_version: 4
75
117
  summary: Simple to use web view cell