view 1.0.0.alpha.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.rdoc ADDED
@@ -0,0 +1,158 @@
1
+ = View
2
+
3
+ Automatic viewer. Very configurable. Very flexible. Very alpha (for now).
4
+
5
+ It is made for displaying stuff in views. This can be very handy for DSLs that create views.
6
+ Some of those DSLs are coming soon to a rubygem near you!
7
+
8
+ But first, the view!
9
+
10
+ == Usage
11
+
12
+ Use it from your views:
13
+
14
+ = view @post
15
+
16
+ View will try to figure out what the most logical way is to present the object you passed in.
17
+ If the @post object has a title for instance, it will use that.
18
+
19
+ See the auto formatter for more information.
20
+
21
+ You can use view anywhere you like:
22
+
23
+ puts View.to_s(@post)
24
+
25
+ But beware that for many formatters, a reference to the template is required.
26
+ It is a helper for the view part of your application after all.
27
+
28
+ == Options
29
+
30
+ View will automatically try to choose the proper formatter. You can specify a formatter yourself:
31
+
32
+ = view @post.created_at, :as => :date
33
+
34
+ You can add a block to specify your own behavior. The parsed value is passed in as a block-variable.
35
+
36
+ = view @post.author do |author|
37
+ = link_to author, @post.author
38
+
39
+ Most formatters pass their options down to the method they use, such as the image formatter:
40
+
41
+ = view @user.avatar, :as => :image, :size => "40x40", :class => "avatar"
42
+
43
+ == Examples
44
+
45
+ There are many formatters included (18 and counting), but here are some interesting use cases of some of them.
46
+
47
+ # Options are passed to the helper methods:
48
+ = view @post, :as => :link, :method => :delete, :confirm => "are you sure?"
49
+
50
+ # Renders a link to the edit_page of the post:
51
+ = view @post, :as => :link, :path => [ :edit ]
52
+
53
+ # Renders a sentence of links:
54
+ = view Post.all, :each => { :as => :link }
55
+
56
+ # When using paperclip, renders the image:
57
+ = view @project.logo, :as => :image
58
+
59
+ # Renders "yes" or "no" (with I18n support!)
60
+ = view @user.admin?
61
+
62
+ See the formatters in lib/views/formatters to see their full documentation.
63
+
64
+ == Adding formatters
65
+
66
+ You can add a formatter by inheriting from View::Formatter.
67
+ The only method you need to implement is the to_s method.
68
+
69
+ In the class you have access to the following methods:
70
+
71
+ * value: the object passed in
72
+ * options: a filtered hash of options
73
+ * all_options: the unfiltered hash
74
+ * template: call methods like link_to on this
75
+
76
+ If you wanted a uppercase formatter for example, you could do this:
77
+
78
+ class Uppercase < View::Formatter
79
+
80
+ def to_s
81
+ value.to_s.upcase
82
+ end
83
+
84
+ end
85
+
86
+ The name of the formatter is automatically infered from the name of the class.
87
+
88
+ You can use the .as method to specify a different name.
89
+
90
+ class Foo < View::Formatter
91
+ as :bar
92
+ # etc ...
93
+ end
94
+
95
+ You can control which options are allowed, by adding reserved options:
96
+
97
+ class Foo < View::Formatter
98
+ self.reserved_options = [ :foo, :bar ]
99
+ end
100
+
101
+ Now, the options method will return the options passed by the user, minus foo and bar.
102
+ To use them, in your code, use the all_options method.
103
+ This is done to easily pass the options to another method, without cluttering:
104
+
105
+ class Paragraph < View::Formatter
106
+ def to_s
107
+ template.content_tag(:p, value.to_s, options)
108
+ end
109
+ end
110
+
111
+ To more tightly control which options are allowed, specify the allowed_options.
112
+
113
+ class Size < View::Formatter
114
+ self.allowed_options = [ :separator, :delimiter, :precision ]
115
+ def to_s
116
+ template.number_to_human_size(value, options)
117
+ end
118
+ end
119
+
120
+ You can use the existing formatters as examples.
121
+
122
+ == Configuration:
123
+
124
+ See lib/view.rb for information on configuration.
125
+
126
+ == Installation
127
+
128
+ === Rails 3
129
+
130
+ In Rails 3, just add it to your Gemfile:
131
+
132
+ gem 'view'
133
+
134
+ Run <tt>bundle install</tt> and you're ready to go!
135
+
136
+ === Rails 2
137
+
138
+ In Rails 2, add it to app/environment.rb:
139
+
140
+ config.gem 'view'
141
+
142
+ And run <tt>rake gems:install</tt> to get it.
143
+
144
+ Afterwards, include the helper mehtod manually, by editing app/helpers/application_helper.rb:
145
+
146
+ module ApplicationHelper
147
+ include View::Helper
148
+ end
149
+
150
+ Caution: some helpers may use new helper methods from Rails 3 and might not work in Rails 2.
151
+
152
+ == Contributing
153
+
154
+ Yes please! You know the drill: fork, commit, pull request, profit!
155
+
156
+ == License
157
+
158
+ Copyright 2010 Iain Hecker (iain@iain.nl), released under the MIT License.
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'view'
@@ -0,0 +1,134 @@
1
+ module View
2
+
3
+ class Formatter
4
+
5
+ attr_reader :value, :template, :block
6
+
7
+ class_inheritable_accessor :default_options
8
+ self.default_options = {}
9
+
10
+ class_inheritable_array :reserved_options
11
+ self.reserved_options = [ :as, :block_arguments ]
12
+
13
+ class_inheritable_array :allowed_options
14
+ self.allowed_options = []
15
+
16
+ def initialize(value, options = {}, template = nil, &block)
17
+ @value = value
18
+ @options = options
19
+ @template = template
20
+ @block = block
21
+ end
22
+
23
+ def self.inherited(formatter)
24
+ super
25
+ formatters.unshift(formatter)
26
+ end
27
+
28
+ def self.formatters
29
+ View.formatters ||= []
30
+ end
31
+
32
+ def self.as(type)
33
+ @type = type
34
+ end
35
+
36
+ def self.type
37
+ @type || name.split('::').last.underscore
38
+ end
39
+
40
+ def self.to_s(*args, &block)
41
+ new(*args, &block).format
42
+ end
43
+
44
+ def format
45
+ if block
46
+ captured_value
47
+ else
48
+ formatted_value
49
+ end
50
+ end
51
+
52
+ def to_s
53
+ msg <<-MSG.squeeze(' ')
54
+ The only thing a formatter needs to do is implement the #to_s method.
55
+ If you see this error, you forgot to do that for the #{self.class.type} formatter.
56
+ MSG
57
+ raise NotImplementedError.new(msg)
58
+ end
59
+
60
+ def options
61
+ default_options.merge(all_options).delete_if do |key, value|
62
+ option_not_allowed?(key)
63
+ end
64
+ end
65
+
66
+ private
67
+
68
+ def template_can_capture?
69
+ template && template.respond_to?(:capture)
70
+ end
71
+
72
+ def captured_value
73
+ if template_can_capture?
74
+ captured_value_by_template
75
+ else
76
+ captured_return_value
77
+ end
78
+ end
79
+
80
+ def captured_value_by_template
81
+ template.capture(formatted_value, *block_arguments, &block)
82
+ end
83
+
84
+ def captured_return_value
85
+ block.call(formatted_value, *block_arguments)
86
+ end
87
+
88
+ def formatted_value
89
+ formatter.new(value, all_options, template, &block).to_s
90
+ end
91
+
92
+ def formatter
93
+ find_formatter || formatter_not_found
94
+ end
95
+
96
+ def formatter_not_found
97
+ raise "Couldn't find the #{as} formatter. Got: #{formatter_names.join(', ')}"
98
+ end
99
+
100
+ def formatter_names
101
+ self.class.formatters.map { |formatter| formatter.type.to_s }
102
+ end
103
+
104
+ def find_formatter
105
+ self.class.formatters.find { |formatter| formatter.type.to_s == as.to_s }
106
+ end
107
+
108
+ def option_not_allowed?(key)
109
+ if allowed_options.empty?
110
+ reserved_options.map(&:to_s).include?(key.to_s)
111
+ else
112
+ !allowed_options.map(&:to_s).include?(key.to_s)
113
+ end
114
+ end
115
+
116
+ def block_arguments
117
+ all_options[:block_arguments] || []
118
+ end
119
+
120
+ def as
121
+ all_options[:as] || View.default_formatter
122
+ end
123
+
124
+ def all_options
125
+ @options
126
+ end
127
+
128
+ end
129
+
130
+ end
131
+
132
+ Dir[File.expand_path('../formatters/*.rb', __FILE__)].each do |formatter_file|
133
+ require formatter_file
134
+ end
@@ -0,0 +1,49 @@
1
+ module View
2
+
3
+ class Auto < Formatter
4
+
5
+ def to_s
6
+ if as
7
+ format
8
+ else
9
+ guess
10
+ end
11
+ end
12
+
13
+ def datetime_format?
14
+ value.respond_to?(:strftime)
15
+ end
16
+
17
+ def file_link_format?
18
+ View.file_methods.any? { |method| value.respond_to?(method) }
19
+ end
20
+
21
+ def boolean_format?
22
+ value == true || value == false
23
+ end
24
+
25
+ def nil_format?
26
+ value.nil?
27
+ end
28
+
29
+ def sentence_format?
30
+ value.respond_to?(:to_sentence)
31
+ end
32
+
33
+ def link_format?
34
+ all_options[:to]
35
+ end
36
+
37
+ def as
38
+ %w|nil boolean file_link datetime sentence link|.find { |type| send("#{type}_format?") }
39
+ end
40
+
41
+ def guess
42
+ View.guessing_methods.each do |method|
43
+ return value.send(method) if value.respond_to?(method)
44
+ end
45
+ end
46
+
47
+ end
48
+
49
+ end
@@ -0,0 +1,19 @@
1
+ module View
2
+
3
+ class Boolean < Formatter
4
+
5
+ def to_s
6
+ ::I18n.t(boolean_value.to_s, :scope => [:view, :booleans], :default => default)
7
+ end
8
+
9
+ def default
10
+ boolean_value ? "Yes" : "No"
11
+ end
12
+
13
+ def boolean_value
14
+ !!value
15
+ end
16
+
17
+ end
18
+
19
+ end
@@ -0,0 +1,13 @@
1
+ module View
2
+
3
+ class Currency < Formatter
4
+
5
+ self.allowed_options = [ :precision, :unit, :separator, :delimiter, :format ]
6
+
7
+ def to_s
8
+ template.number_to_currency(value, options)
9
+ end
10
+
11
+ end
12
+
13
+ end
@@ -0,0 +1,11 @@
1
+ module View
2
+
3
+ class Date < Formatter
4
+
5
+ def to_s
6
+ ::I18n.l(value.to_date, options) if value.present?
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -0,0 +1,11 @@
1
+ module View
2
+
3
+ class Datetime < Formatter
4
+
5
+ def to_s
6
+ ::I18n.l(value, options) if value.present?
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -0,0 +1,13 @@
1
+ module View
2
+
3
+ class Delimited < Formatter
4
+
5
+ self.allowed_options = [ :separator, :delimiter ]
6
+
7
+ def to_s
8
+ template.number_with_delimiter(value, options)
9
+ end
10
+
11
+ end
12
+
13
+ end
@@ -0,0 +1,33 @@
1
+ module View
2
+
3
+ class FileLink < Formatter
4
+
5
+ self.reserved_options = [ :text, :text_method ]
6
+ self.default_options = { :target => "_blank" }
7
+
8
+ def to_s
9
+ template.link_to(text, path, options)
10
+ end
11
+
12
+ def path
13
+ View.path_methods.each do |method|
14
+ return value.send(method) if value.respond_to?(method)
15
+ end
16
+ nil
17
+ end
18
+
19
+ def text
20
+ all_options[:text] || text_via_method || value.to_s
21
+ end
22
+
23
+ def text_via_method
24
+ send(text_method) if text_method
25
+ end
26
+
27
+ def text_method
28
+ all_options[:text_method]
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,11 @@
1
+ module View
2
+
3
+ class HtmlSafe < Formatter
4
+
5
+ def to_s
6
+ value.to_s.html_safe
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -0,0 +1,16 @@
1
+ module View
2
+
3
+ # The number_to_human helper was introduced in Rails 3.
4
+ # It will give results like "10 thousand"
5
+ class Human < Formatter
6
+
7
+ self.allowed_options = [ :locale, :precision, :significant, :separator, :delimiter,
8
+ :strip_insignificant_zeros, :units, :format ]
9
+
10
+ def to_s
11
+ template.number_to_human(value, options)
12
+ end
13
+
14
+ end
15
+
16
+ end
@@ -0,0 +1,37 @@
1
+ module View
2
+
3
+ class Image < Formatter
4
+
5
+ self.reserved_options = [ :with ]
6
+
7
+ def to_s
8
+ template.image_tag(path, options) if file?
9
+ end
10
+
11
+ def path
12
+ value.send(path_method, *path_arguments)
13
+ end
14
+
15
+ # TODO I'm only guessing here, I don't actually know how other upload gems
16
+ # work, besides paperclip.
17
+ def path_method
18
+ View.path_methods.find { |method| value.respond_to?(method) }
19
+ end
20
+
21
+ # TODO with seems like a stupid name, but style is probably used for
22
+ # image_tag
23
+ def path_arguments
24
+ all_options[:with] || View.path_arguments
25
+ end
26
+
27
+ def file?
28
+ value.send(file_method)
29
+ end
30
+
31
+ def file_method
32
+ View.file_methods.find { |method| value.respond_to?(method) }
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -0,0 +1,25 @@
1
+ module View
2
+
3
+ class Link < Formatter
4
+
5
+ self.reserved_options = [ :to, :path, :text ]
6
+
7
+ def to_s
8
+ template.link_to(format, to, options)
9
+ end
10
+
11
+ def to
12
+ all_options[:to] || template.polymorphic_path(automatic_link)
13
+ end
14
+
15
+ def automatic_link
16
+ (all_options[:path] || []) + [ value ]
17
+ end
18
+
19
+ def as
20
+ all_options[:text] || :auto
21
+ end
22
+
23
+ end
24
+
25
+ end
@@ -0,0 +1,11 @@
1
+ module View
2
+
3
+ class Nil < Formatter
4
+
5
+ def to_s
6
+ ::I18n.t(:nil, :scope => :view, :default => "")
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -0,0 +1,13 @@
1
+ module View
2
+
3
+ class Percentage < Formatter
4
+
5
+ self.allowed_options = [ :precision, :separator, :delimiter ]
6
+
7
+ def to_s
8
+ template.number_to_percentage(value, options)
9
+ end
10
+
11
+ end
12
+
13
+ end
@@ -0,0 +1,13 @@
1
+ module View
2
+
3
+ class Phone < Formatter
4
+
5
+ self.allowed_options = [ :area_code, :delimiter, :extension, :country_code ]
6
+
7
+ def to_s
8
+ template.number_to_phone(value, options)
9
+ end
10
+
11
+ end
12
+
13
+ end
@@ -0,0 +1,13 @@
1
+ module View
2
+
3
+ class Precision < Formatter
4
+
5
+ self.allowed_options = [ :precision, :separator, :delimiter ]
6
+
7
+ def to_s
8
+ template.number_with_precision(value, options)
9
+ end
10
+
11
+ end
12
+
13
+ end
@@ -0,0 +1,11 @@
1
+ module View
2
+
3
+ class Self < Formatter
4
+
5
+ def to_s
6
+ value
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -0,0 +1,33 @@
1
+ module View
2
+
3
+ class Sentence < Formatter
4
+
5
+ self.allowed_options = [ :words_connector, :two_words_connector, :last_word_connector ]
6
+
7
+ def to_s
8
+ if all_safe?
9
+ sentence.html_safe
10
+ else
11
+ sentence
12
+ end
13
+ end
14
+
15
+ def all_safe?
16
+ formatted_values.all? { |element| element.html_safe? }
17
+ end
18
+
19
+ def formatted_values
20
+ value.map { |element| View.to_s(element, each, template, &block) }
21
+ end
22
+
23
+ def sentence
24
+ formatted_values.to_sentence if value.present?
25
+ end
26
+
27
+ def each
28
+ all_options[:each] || { :as => View.default_formatter }
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,13 @@
1
+ module View
2
+
3
+ class Size < Formatter
4
+
5
+ self.allowed_options = [ :precision, :separator, :delimiter ]
6
+
7
+ def to_s
8
+ template.number_to_human_size(value, options)
9
+ end
10
+
11
+ end
12
+
13
+ end
@@ -0,0 +1,11 @@
1
+ module View
2
+
3
+ module Helper
4
+
5
+ def view(value, options = {}, &block)
6
+ ::View.to_s(value, options, self, &block)
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -0,0 +1,13 @@
1
+ module View
2
+
3
+ class Railtie < ::Rails::Railtie
4
+
5
+ ActiveSupport.on_load(:action_view) do
6
+ ActiveSupport.on_load(:after_initialize) do
7
+ include Helper
8
+ end
9
+ end
10
+
11
+ end
12
+
13
+ end
@@ -0,0 +1,3 @@
1
+ module View
2
+ VERSION = '1.0.0.alpha.1'
3
+ end
data/lib/view.rb ADDED
@@ -0,0 +1,29 @@
1
+ module View
2
+
3
+ autoload :Formatter, 'view/formatter'
4
+ autoload :Helper, 'view/helper'
5
+ autoload :VERSION, 'view/version'
6
+
7
+ mattr_accessor :guessing_methods
8
+ self.guessing_methods = %w|to_label display_name full_name name title username login value to_s|
9
+
10
+ mattr_accessor :file_methods
11
+ self.file_methods = %w|mounted_as file? public_filename|
12
+
13
+ mattr_accessor :path_methods
14
+ self.path_methods = %w|mounted_as url public_filename|
15
+
16
+ mattr_accessor :path_arguments
17
+ self.path_arguments = []
18
+
19
+ mattr_accessor :default_formatter
20
+ self.default_formatter = :auto
21
+
22
+ mattr_accessor :formatters
23
+
24
+
25
+ def self.to_s(value, options = {}, template = nil, &block)
26
+ Formatter.to_s(value, options, template, &block)
27
+ end
28
+
29
+ end
@@ -0,0 +1,22 @@
1
+ require "rubygems"
2
+ require "bundler/setup"
3
+ Bundler.setup :default
4
+ require 'active_support'
5
+ require 'active_support/core_ext'
6
+ require 'rspec'
7
+ require 'view'
8
+
9
+ module WithTranslation
10
+ def with_translation(keys)
11
+ locale = I18n.locale
12
+ I18n.backend.store_translations(:test, keys)
13
+ I18n.locale = :test
14
+ yield
15
+ ensure
16
+ I18n.locale = locale
17
+ end
18
+ end
19
+
20
+ RSpec.configure do |config|
21
+ config.include(WithTranslation)
22
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Auto formatter" do
4
+
5
+ it "guesses the to_label" do
6
+ object = Struct.new(:to_label).new("some label")
7
+ View.to_s(object).should == "some label"
8
+ end
9
+
10
+ it "guesses to_s" do
11
+ object = Struct.new(:to_s).new("string")
12
+ View.to_s(object).should == "string"
13
+ end
14
+
15
+ it "guesses a name" do
16
+ object = Struct.new(:name).new("my name")
17
+ View.to_s(object).should == "my name"
18
+ end
19
+
20
+ it "guesses a login" do
21
+ object = Struct.new(:login).new("loginname")
22
+ View.to_s(object).should == "loginname"
23
+ end
24
+
25
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Boolean formatter" do
4
+
5
+ it "formats true" do
6
+ View.to_s(true).should == "Yes"
7
+ end
8
+
9
+ it "formats false" do
10
+ View.to_s(false).should == "No"
11
+ end
12
+
13
+ it "formats boolean values" do
14
+ View.to_s("h", :as => :boolean).should == "Yes"
15
+ View.to_s(nil, :as => :boolean).should == "No"
16
+ end
17
+
18
+ it "localizes booleans" do
19
+ with_translation :view => { :booleans => { :true => "yup" } } do
20
+ View.to_s(true).should == "yup"
21
+ end
22
+ with_translation :view => { :booleans => { :false => "nope" } } do
23
+ View.to_s(false).should == "nope"
24
+ end
25
+ end
26
+
27
+
28
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Date formatter" do
4
+
5
+ it "localizes dates" do
6
+ date = Date.new(2010, 10, 11)
7
+ with_translation :date => { :formats => { :foo => "%A" }, :day_names => [ "zondag", "maandag" ] } do
8
+ View.to_s(date, :format => :foo).should == "maandag"
9
+ end
10
+ end
11
+
12
+ it "formats dates" do
13
+ date = Date.new(2010, 10, 10)
14
+ View.to_s(date).should == "2010-10-10"
15
+ end
16
+
17
+ it "forces datetimes to date" do
18
+ time = Time.new(2010, 10, 10, 8, 45, 30, '+01:00')
19
+ View.to_s(time, :as => :date).should == "2010-10-10"
20
+ end
21
+
22
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Datetime formatter" do
4
+
5
+ it "formats" do
6
+ time = Time.new(2010, 10, 10, 8, 45, 30, '+01:00')
7
+ View.to_s(time).should == "Sun, 10 Oct 2010 08:45:30 +0100"
8
+ end
9
+
10
+ it "localizes" do
11
+ time = Time.new(2010, 10, 10, 8, 45, 30, '+01:00')
12
+ with_translation :time => { :formats => { :short => "%d-%m-%Y %H:%M" } } do
13
+ View.to_s(time, :format => :short).should == "10-10-2010 08:45"
14
+ end
15
+ end
16
+
17
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Nil formatter" do
4
+
5
+ it "formats nil" do
6
+ View.to_s(nil).should == ""
7
+ end
8
+
9
+ it "uses i18n for nil" do
10
+ with_translation :view => { :nil => "nothing" } do
11
+ View.to_s(nil).should == "nothing"
12
+ end
13
+ end
14
+
15
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Self formatter" do
4
+
5
+ it "doesn't format with formatter self" do
6
+ time = Time.now
7
+ View.to_s(time, :as => :self).should == time
8
+ end
9
+
10
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Sentence formatter" do
4
+
5
+ it "constructs a sentence" do
6
+ object = [ 1, 2, 3 ]
7
+ View.to_s(object).should == "1, 2, and 3"
8
+ end
9
+
10
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe "View::Helper" do
4
+
5
+ pending "views" do
6
+ template = Class.new do
7
+ include View::Helper
8
+ end
9
+ end
10
+
11
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe "View" do
4
+
5
+ it "doesn't touch strings" do
6
+ View.to_s("bar").should == "bar"
7
+ end
8
+
9
+ it "parses the block" do
10
+ View.to_s("bar") { |val| val.upcase }.should == "BAR"
11
+ end
12
+
13
+ end
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: view
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: true
5
+ segments:
6
+ - 1
7
+ - 0
8
+ - 0
9
+ - alpha
10
+ - 1
11
+ version: 1.0.0.alpha.1
12
+ platform: ruby
13
+ authors:
14
+ - Iain Hecker
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2010-10-03 00:00:00 +02:00
20
+ default_executable:
21
+ dependencies: []
22
+
23
+ description: A very extensible way of viewing objects, easily integrated with other gems
24
+ email:
25
+ - iain@iain.nl
26
+ executables: []
27
+
28
+ extensions: []
29
+
30
+ extra_rdoc_files:
31
+ - README.rdoc
32
+ files:
33
+ - lib/view/formatter.rb
34
+ - lib/view/formatters/auto.rb
35
+ - lib/view/formatters/boolean.rb
36
+ - lib/view/formatters/currency.rb
37
+ - lib/view/formatters/date.rb
38
+ - lib/view/formatters/datetime.rb
39
+ - lib/view/formatters/delimited.rb
40
+ - lib/view/formatters/file_link.rb
41
+ - lib/view/formatters/html_safe.rb
42
+ - lib/view/formatters/human.rb
43
+ - lib/view/formatters/image.rb
44
+ - lib/view/formatters/link.rb
45
+ - lib/view/formatters/nil.rb
46
+ - lib/view/formatters/percentage.rb
47
+ - lib/view/formatters/phone.rb
48
+ - lib/view/formatters/precision.rb
49
+ - lib/view/formatters/self.rb
50
+ - lib/view/formatters/sentence.rb
51
+ - lib/view/formatters/size.rb
52
+ - lib/view/helper.rb
53
+ - lib/view/railtie.rb
54
+ - lib/view/version.rb
55
+ - lib/view.rb
56
+ - init.rb
57
+ - README.rdoc
58
+ - spec/spec_helper.rb
59
+ - spec/view/formatters/auto_spec.rb
60
+ - spec/view/formatters/boolean_spec.rb
61
+ - spec/view/formatters/date_spec.rb
62
+ - spec/view/formatters/datetime_spec.rb
63
+ - spec/view/formatters/nil_spec.rb
64
+ - spec/view/formatters/self_spec.rb
65
+ - spec/view/formatters/sentence_spec.rb
66
+ - spec/view/helper_spec.rb
67
+ - spec/view/view_spec.rb
68
+ has_rdoc: true
69
+ homepage: http://github.com/iain/view
70
+ licenses: []
71
+
72
+ post_install_message:
73
+ rdoc_options: []
74
+
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ none: false
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ segments:
83
+ - 0
84
+ version: "0"
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ segments:
91
+ - 1
92
+ - 3
93
+ - 6
94
+ version: 1.3.6
95
+ requirements: []
96
+
97
+ rubyforge_project: view
98
+ rubygems_version: 1.3.7
99
+ signing_key:
100
+ specification_version: 3
101
+ summary: Displaying objects automatically
102
+ test_files:
103
+ - spec/spec_helper.rb
104
+ - spec/view/formatters/auto_spec.rb
105
+ - spec/view/formatters/boolean_spec.rb
106
+ - spec/view/formatters/date_spec.rb
107
+ - spec/view/formatters/datetime_spec.rb
108
+ - spec/view/formatters/nil_spec.rb
109
+ - spec/view/formatters/self_spec.rb
110
+ - spec/view/formatters/sentence_spec.rb
111
+ - spec/view/helper_spec.rb
112
+ - spec/view/view_spec.rb