xrb 0.1

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.
data/README ADDED
@@ -0,0 +1,60 @@
1
+ XRB was inspired by XHP ( http://github.com/facebook/xhp/ ).
2
+ XRB is a Rails Engine to be used.
3
+
4
+ Having used XHP intensively, I saw the benefits of XML literals as first class
5
+ elements in a programming language. The biggest benefit was that you could
6
+ easily build large libraries of components to reuse on many sites.
7
+
8
+ As I was unable to figure out how to add XML literals into the Ruby parser.
9
+ I thought I would start with a more Ruby approach.
10
+
11
+ Installation
12
+ ============
13
+
14
+ Edit Your Application's Gemfile
15
+ -------------------------------
16
+
17
+ Add to your Gemfile
18
+
19
+ gem 'xrb', :require => 'xrb/engine'
20
+
21
+ In your ApplicationHelper add
22
+
23
+ require UiHelper
24
+
25
+ Usage
26
+ =====
27
+
28
+ Inside your template files you can now use XRB.
29
+
30
+ <%= ui :image, :block do %>
31
+ <% ui :link => user_path(user) %>
32
+ <%= image_tag(user.photo.url(:thumbnail), :title => user %>
33
+ <% end %>
34
+ <% ui :group do %>
35
+ <% ui :link => user_path(user) %>
36
+ <%= user %>
37
+ <% end %>
38
+ <% ui :group do %>
39
+ <%= user.description %>
40
+ <% end %>
41
+ <% end %>
42
+ <% end %>
43
+
44
+
45
+ Defining your own XRB Element
46
+ -----------------------------
47
+
48
+ Say you want to define an element `user`.
49
+ Inside a helper file we need to add a function:
50
+
51
+ def ui_user(xrb)
52
+ user = xrb.attributes.delete(:user)
53
+
54
+ xrb.content = ui_output do
55
+ content_tag :div, user, xrb.attributes
56
+ end
57
+ end
58
+
59
+ Change the code inside `ui_output` to let design how your component will look
60
+ like.
@@ -0,0 +1,80 @@
1
+ module UiHelper
2
+
3
+ def ui(*args, &block)
4
+ component = []
5
+ if args.length == 1 && args.first.is_a?(Hash) && args.first.length == 1
6
+ component << args.first.keys.first
7
+ else
8
+ while args.first.is_a? Symbol
9
+ component << args.shift
10
+ end
11
+ end
12
+ component = "ui_#{component.join '_'}"
13
+ xrb = ui_capture(*args, &block)
14
+ @components << xrb if @components
15
+
16
+ self.send(component, xrb)
17
+ end
18
+
19
+ def ui_image_block(xrb)
20
+ image = xrb.components.shift
21
+ group = xrb.components.shift
22
+
23
+ title = group.components.shift
24
+ contents = group.components.shift
25
+
26
+ ui_output do <<-HTML
27
+ <div class="image-block">
28
+ <div class="image">#{image}</div>
29
+ <div class="content">
30
+ <div class="title">#{title}</div>
31
+ #{contents}
32
+ </div>
33
+ </div>
34
+ <div class="clear"></div>
35
+ HTML
36
+ end
37
+ end
38
+
39
+ def ui_link(xrb)
40
+ xrb.attributes[:href] = xrb.attributes[:link] if xrb.attributes[:link]
41
+
42
+ xrb.content = ui_output do
43
+ content_tag(:a, xrb.inner_content, xrb.attributes)
44
+ end
45
+ end
46
+
47
+ def ui_group(xrb)
48
+ xrb.content = ui_output do
49
+ xrb.inner_content
50
+ end
51
+ end
52
+
53
+ # helper
54
+ def ui_output
55
+ value = yield
56
+
57
+ value.html_safe
58
+ end
59
+
60
+ def ui_capture(*args, &block)
61
+ xrb = ::XRB::Element.new
62
+ xrb.attributes = args.extract_options!
63
+
64
+ if block
65
+ @components, old_components = [], @components
66
+ xrb.inner_content = capture(&block)
67
+ xrb.components = @components
68
+ @components = old_components
69
+ else
70
+ xrb.inner_content = args.first || ''
71
+ end
72
+
73
+ if xrb.inner_content.is_a?(String) && ! xrb.inner_content.html_safe?
74
+ xrb.inner_content = xrb.inner_content.html_safe
75
+ end
76
+
77
+ xrb
78
+ end
79
+
80
+ end
@@ -0,0 +1,9 @@
1
+ module XRB
2
+ class Element
3
+ attr_accessor :content, :inner_content, :attributes, :components
4
+
5
+ def to_s
6
+ content
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,4 @@
1
+ module XRB
2
+ class Engine < Rails::Engine
3
+ end
4
+ end
@@ -0,0 +1 @@
1
+ require 'xrb/engine'
@@ -0,0 +1,12 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = %q{xrb}
3
+ s.version = "0.1"
4
+ s.authors = ["Aizat Faiz"]
5
+ s.email = %q{aizat.faiz@gmail.com}
6
+ s.date = Time.now.utc.strftime("%Y-%m-%d")
7
+ s.files = `git ls-files`.split("\n")
8
+ s.homepage = %q{http://github.com/aizatto/xrb}
9
+ s.rdoc_options = ["--charset=UTF-8"]
10
+ s.rubygems_version = %q{1.7.2}
11
+ s.summary = %q{XRB summary}
12
+ end
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: xrb
3
+ version: !ruby/object:Gem::Version
4
+ hash: 9
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ version: "0.1"
10
+ platform: ruby
11
+ authors:
12
+ - Aizat Faiz
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-06-05 00:00:00 Z
18
+ dependencies: []
19
+
20
+ description:
21
+ email: aizat.faiz@gmail.com
22
+ executables: []
23
+
24
+ extensions: []
25
+
26
+ extra_rdoc_files: []
27
+
28
+ files:
29
+ - README
30
+ - app/helpers/ui_helper.rb
31
+ - app/models/xrb/element.rb
32
+ - lib/xrb/engine.rb
33
+ - rails/init.rb
34
+ - xrb.gemspec
35
+ homepage: http://github.com/aizatto/xrb
36
+ licenses: []
37
+
38
+ post_install_message:
39
+ rdoc_options:
40
+ - --charset=UTF-8
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ hash: 3
49
+ segments:
50
+ - 0
51
+ version: "0"
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ requirements: []
62
+
63
+ rubyforge_project:
64
+ rubygems_version: 1.7.2
65
+ signing_key:
66
+ specification_version: 3
67
+ summary: XRB summary
68
+ test_files: []
69
+