viewlet 0.0.3 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format documentation
3
+ --profile
data/README.md CHANGED
@@ -229,6 +229,9 @@ that could be used as HTML id.
229
229
  = render :partial => "some_other_partial", :locals => {:member => member}
230
230
 
231
231
  %password_strength_viewlet{:levels => %w(none weak good)}
232
+
233
+ %password_strength_viewlet
234
+ - levels %w(none weak good) # notice optional dash at the beginning
232
235
  ```
233
236
 
234
237
  ## Todo
@@ -1,7 +1,7 @@
1
1
  require "viewlet/version"
2
2
  require "viewlet/base"
3
3
  require "viewlet/helpers"
4
- require "viewlet/railtie"
4
+ require "viewlet/railtie" if defined?(Rails)
5
5
 
6
6
  module Viewlet
7
7
  end
@@ -29,7 +29,7 @@ module Viewlet
29
29
 
30
30
  def _read_variable(name, *args, &block)
31
31
  if @variables[name].is_a?(Proc)
32
- @view.capture(*args, &@variables[name])
32
+ @variables[name].call(*args)
33
33
  else
34
34
  @variables[name]
35
35
  end
@@ -39,7 +39,11 @@ module Viewlet
39
39
  @variables[name] = if block
40
40
  # HAML changes argument-less block {|| } into block {|*a| }
41
41
  # which makes block.arity to be -1 instead of just 0
42
- block.arity == -1 ? @view.capture(&block) : block
42
+ if block.arity == -1
43
+ @view.capture(&block)
44
+ else
45
+ Proc.new { |*a| @view.capture(*a, &block) }
46
+ end
43
47
  else
44
48
  args.first
45
49
  end
@@ -1,3 +1,6 @@
1
+ require "active_support/core_ext/object/try"
2
+ require "active_support/core_ext/module/aliasing"
3
+
1
4
  Haml::Parser.class_eval do
2
5
  # `%simple_viewlet` becomes `= viewlet(:simple)`
3
6
  # `%complex_viewlet` becomes `= viewlet(:complex) do |viewlet_0|`
@@ -14,10 +17,19 @@ Haml::Parser.class_eval do
14
17
  viewlet_pop
15
18
  end
16
19
 
20
+ # `- prop "whatever"` becomes `- viewlet_0.prop "whatever"`
21
+ def silent_script_with_viewlet_parent_tag(text)
22
+ if viewlet_definition?
23
+ text = "- #{viewlet_peek}.#{text.gsub(/^\-\s*/, "")}"
24
+ end
25
+ silent_script_without_viewlet_parent_tag(text)
26
+ end
27
+ alias_method_chain :silent_script, :viewlet_parent_tag
28
+
17
29
  # `prop "whatever"` becomes `- viewlet_0.prop "whatever"`
18
- def plain_with_viewlet_parent_tag(text, escape_html = nil)
30
+ def plain_with_viewlet_parent_tag(text, escape_html=nil)
19
31
  if viewlet_definition?
20
- silent_script(" #{viewlet_peek}.#{text}")
32
+ silent_script_without_viewlet_parent_tag(" #{viewlet_peek}.#{text}")
21
33
  else
22
34
  plain_without_viewlet_parent_tag(text, escape_html)
23
35
  end
@@ -28,18 +40,21 @@ Haml::Parser.class_eval do
28
40
 
29
41
  def build_viewlet_node(node)
30
42
  name = node.value[:name].gsub(/_viewlet$/, "")
31
- attrs = attributes_string(node.value[:attributes_hashes])
43
+ attrs = attributes_string(node)
32
44
  block = "do |#{viewlet_push}|" if block_opened?
33
45
  script(" viewlet(:#{name} #{attrs}) #{block}")
34
46
  end
35
47
 
36
- def attributes_string(attributes_hashes)
37
- if attributes_hashes.empty?
38
- attributes_hashes = ""
39
- elsif attributes_hashes.size == 1
40
- attributes_hashes = ", #{attributes_hashes.first}"
48
+ def attributes_string(node)
49
+ return ", #{node.value[:attributes].inspect}" \
50
+ unless node.value[:attributes].empty?
51
+
52
+ if (hashes = node.value[:attributes_hashes]).empty?
53
+ ""
54
+ elsif hashes.size == 1
55
+ ", #{hashes.first}"
41
56
  else
42
- attributes_hashes = ", (#{attributes_hashes.join(").merge(")})"
57
+ ", (#{hashes.join(").merge(")})"
43
58
  end
44
59
  end
45
60
 
@@ -1,3 +1,5 @@
1
+ require "action_view"
2
+
1
3
  module Viewlet
2
4
  class Template
3
5
  def self.find(name)
@@ -1,3 +1,3 @@
1
1
  module Viewlet
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -0,0 +1,2 @@
1
+ = attr1
2
+ = attr2 if defined?(attr2)
@@ -0,0 +1,3 @@
1
+ = block_with_argument.text("method-argument")
2
+ = capture("capture-argument", &text)
3
+ = text.call("call-argument")
@@ -0,0 +1 @@
1
+ = text
@@ -0,0 +1 @@
1
+ %div
@@ -0,0 +1,28 @@
1
+ %block_with_argument_viewlet
2
+ text { |arg| "block-curly-#{arg}" }
3
+
4
+ %block_with_argument_viewlet
5
+ - text { |arg| "block-curly-dash-#{arg}" }
6
+
7
+ %block_with_argument_viewlet
8
+ text do |arg|
9
+ = "block-do-#{arg}"
10
+
11
+ %block_with_argument_viewlet
12
+ - text do |arg|
13
+ = "block-do-dash-#{arg}"
14
+
15
+ __END__
16
+ block-curly-method-argument
17
+ block-curly-capture-argument
18
+ block-curly-call-argument
19
+ block-curly-dash-method-argument
20
+ block-curly-dash-capture-argument
21
+ block-curly-dash-call-argument
22
+ block-do-method-argument
23
+ block-do-capture-argument
24
+ block-do-call-argument
25
+
26
+ block-do-dash-method-argument
27
+ block-do-dash-capture-argument
28
+ block-do-dash-call-argument
@@ -0,0 +1,34 @@
1
+ %block_without_argument_viewlet
2
+ text { "block-curly" }
3
+
4
+ %block_without_argument_viewlet
5
+ - text { "block-curly-dash" }
6
+
7
+ %block_without_argument_viewlet
8
+ text do
9
+ block-do
10
+
11
+ %block_without_argument_viewlet
12
+ - text do
13
+ block-do-dash
14
+
15
+ %block_without_argument_viewlet
16
+ text do
17
+ - block_var = "block-var" # use dash!
18
+ = block_var
19
+
20
+ %block_without_argument_viewlet
21
+ - text do
22
+ - block_var = "block-var-dash" # use dash!
23
+ = block_var
24
+
25
+ __END__
26
+ block-curly
27
+ block-curly-dash
28
+ block-do
29
+
30
+ block-do-dash
31
+
32
+ block-var
33
+
34
+ block-var-dash
@@ -0,0 +1,11 @@
1
+ %content_viewlet
2
+ text do
3
+ outer-viewlet
4
+
5
+ %content_viewlet
6
+ text do
7
+ inner-viewlet
8
+
9
+ __END__
10
+ outer-viewlet
11
+ inner-viewlet
@@ -0,0 +1,4 @@
1
+ %div_viewlet
2
+
3
+ __END__
4
+ <div></div>
@@ -0,0 +1,9 @@
1
+ %attributes_viewlet{:attr1 => "attr1"}
2
+ %attributes_viewlet{:attr1 => "attr1", :attr2 => "attr2"}
3
+ %attributes_viewlet{:attr1 => {:nested => "attr"}}
4
+
5
+ __END__
6
+ attr1
7
+ attr1
8
+ attr2
9
+ nestedattr
@@ -0,0 +1,24 @@
1
+ %content_viewlet
2
+ text "simple"
3
+
4
+ %content_viewlet
5
+ - text "simple-dash"
6
+
7
+ - outside_local_var = "outside-local-var"
8
+ %content_viewlet
9
+ - text outside_local_var
10
+
11
+ - @outside_instance_var = "outside-instance-var"
12
+ %content_viewlet
13
+ - text @outside_instance_var
14
+
15
+ - extend Module.new(){ def outside_method; "outside-method"; end }
16
+ %content_viewlet
17
+ - text outside_method
18
+
19
+ __END__
20
+ simple
21
+ simple-dash
22
+ outside-local-var
23
+ outside-instance-var
24
+ outside-method
@@ -0,0 +1,21 @@
1
+ require "spec_helper"
2
+ require "haml"
3
+ require "viewlet"
4
+ require "viewlet/haml"
5
+
6
+ describe "HAML syntax" do
7
+ let(:view) { SimpleView.new }
8
+
9
+ Dir[File.dirname(__FILE__) + "/haml/*.haml"].each do |f|
10
+ it("is able to render #{f}") { check_template(f) }
11
+ end
12
+
13
+ def check_template(file_path)
14
+ output = Haml::Engine.new(File.read(file_path)).render(view, {})
15
+ template_piece(output, :first).should == template_piece(File.read(file_path), :last)
16
+ end
17
+
18
+ def template_piece(output, piece=:first)
19
+ output.split("__END__").send(piece).strip
20
+ end
21
+ end
@@ -0,0 +1,22 @@
1
+ require "rubygems"
2
+ require "bundler/setup"
3
+
4
+ require "viewlet"
5
+
6
+ require "haml"
7
+ require "haml/template/plugin" # registers HAML with ActionView
8
+
9
+ module Rails # stub
10
+ def self.root
11
+ Pathname.new(File.expand_path(File.dirname(__FILE__)))
12
+ end
13
+ end
14
+
15
+ class SimpleView < ActionView::Base
16
+ include ActionView::Helpers::CaptureHelper
17
+ include Viewlet::Helpers
18
+ end
19
+
20
+ RSpec.configure do |config|
21
+ config.backtrace_clean_patterns = []
22
+ end
@@ -0,0 +1,65 @@
1
+ require "spec_helper"
2
+
3
+ describe "viewlet helper" do
4
+ let(:view) { SimpleView.new }
5
+
6
+ it "does not require a block" do
7
+ output = view.viewlet(:div)
8
+ output.should == "<div></div>\n"
9
+ end
10
+
11
+ it "accepts a argument-less block" do
12
+ output = view.viewlet(:div) {}
13
+ output.should == "<div></div>\n"
14
+ end
15
+
16
+ it "accepts a block with argument" do
17
+ output = view.viewlet(:div) { |v| }
18
+ output.should == "<div></div>\n"
19
+ end
20
+
21
+ it "raises error when variable used in the template is not provided" do
22
+ expect {
23
+ view.viewlet(:content)
24
+ }.to raise_error(ActionView::Template::Error, /undefined local variable or method `text'/)
25
+ end
26
+
27
+ describe "variable setting" do
28
+ it "allows to pass variables by hash" do
29
+ output = view.viewlet(:content, :text => "by-hash")
30
+ output.should == "by-hash\n"
31
+ end
32
+
33
+ it "allows to pass variables by block" do
34
+ output = view.viewlet(:content) do |v|
35
+ v.text "by-block"
36
+ end
37
+
38
+ output.should == "by-block\n"
39
+ end
40
+
41
+ it "overrides variables set by hash when set again by block" do
42
+ output = view.viewlet(:content, :text => "by-hash") do |v|
43
+ v.text "by-block"
44
+ end
45
+
46
+ output.should == "by-block\n"
47
+ end
48
+
49
+ it "allows to set variable as a block" do
50
+ output = view.viewlet(:block_without_argument) do |v|
51
+ v.text { "no-arg" }
52
+ end
53
+
54
+ output.should == "no-arg\n"
55
+ end
56
+
57
+ it "allows to set variable as a block that takes arguments" do
58
+ output = view.viewlet(:block_with_argument) do |v|
59
+ v.text { |arg| arg }
60
+ end
61
+
62
+ output.should == "method-argument\ncapture-argument\ncall-argument\n"
63
+ end
64
+ end
65
+ end
@@ -16,7 +16,9 @@ Gem::Specification.new do |s|
16
16
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
17
  s.require_paths = ["lib"]
18
18
 
19
- # specify any dependencies here; for example:
20
- # s.add_development_dependency "rspec"
21
- # s.add_runtime_dependency "rest-client"
19
+ s.add_runtime_dependency "activesupport"
20
+ s.add_runtime_dependency "actionpack"
21
+
22
+ s.add_development_dependency "rspec"
23
+ s.add_development_dependency "haml"
22
24
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: viewlet
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
5
- prerelease: false
4
+ hash: 21
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 3
10
- version: 0.0.3
9
+ - 5
10
+ version: 0.0.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Dmitriy Kalinin
@@ -15,10 +15,64 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-07-24 00:00:00 -07:00
19
- default_executable:
20
- dependencies: []
21
-
18
+ date: 2012-07-28 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: activesupport
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: actionpack
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: rspec
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 3
57
+ segments:
58
+ - 0
59
+ version: "0"
60
+ type: :development
61
+ version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: haml
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 0
73
+ version: "0"
74
+ type: :development
75
+ version_requirements: *id004
22
76
  description: Rails view components
23
77
  email:
24
78
  - cppforlife@gmail.com
@@ -30,6 +84,7 @@ extra_rdoc_files: []
30
84
 
31
85
  files:
32
86
  - .gitignore
87
+ - .rspec
33
88
  - Gemfile
34
89
  - MIT.LICENSE
35
90
  - README.md
@@ -46,8 +101,21 @@ files:
46
101
  - lib/viewlet/railtie.rb
47
102
  - lib/viewlet/template.rb
48
103
  - lib/viewlet/version.rb
104
+ - spec/app/viewlets/attributes.html.haml
105
+ - spec/app/viewlets/block_with_argument.html.haml
106
+ - spec/app/viewlets/block_without_argument.html.haml
107
+ - spec/app/viewlets/content.html.haml
108
+ - spec/app/viewlets/div.html.haml
109
+ - spec/haml/block_variables_with_arguments.html.haml
110
+ - spec/haml/block_variables_without_arguments.html.haml
111
+ - spec/haml/nested_viewlet.html.haml
112
+ - spec/haml/tag.html.haml
113
+ - spec/haml/variables_by_attributes.html.haml
114
+ - spec/haml/variables_by_block.html.haml
115
+ - spec/haml_syntax_spec.rb
116
+ - spec/spec_helper.rb
117
+ - spec/viewlet_helper_spec.rb
49
118
  - viewlet.gemspec
50
- has_rdoc: true
51
119
  homepage: https://github.com/cppforlife/viewlet
52
120
  licenses: []
53
121
 
@@ -77,9 +145,22 @@ required_rubygems_version: !ruby/object:Gem::Requirement
77
145
  requirements: []
78
146
 
79
147
  rubyforge_project:
80
- rubygems_version: 1.3.7
148
+ rubygems_version: 1.8.24
81
149
  signing_key:
82
150
  specification_version: 3
83
151
  summary: Rails view components
84
- test_files: []
85
-
152
+ test_files:
153
+ - spec/app/viewlets/attributes.html.haml
154
+ - spec/app/viewlets/block_with_argument.html.haml
155
+ - spec/app/viewlets/block_without_argument.html.haml
156
+ - spec/app/viewlets/content.html.haml
157
+ - spec/app/viewlets/div.html.haml
158
+ - spec/haml/block_variables_with_arguments.html.haml
159
+ - spec/haml/block_variables_without_arguments.html.haml
160
+ - spec/haml/nested_viewlet.html.haml
161
+ - spec/haml/tag.html.haml
162
+ - spec/haml/variables_by_attributes.html.haml
163
+ - spec/haml/variables_by_block.html.haml
164
+ - spec/haml_syntax_spec.rb
165
+ - spec/spec_helper.rb
166
+ - spec/viewlet_helper_spec.rb