tabletastic 0.2.1 → 0.2.2

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/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,7 @@
1
+ v0.2.2 (Mar 26, 2011)
2
+
3
+ * Add basic i18n support
4
+
1
5
  v0.2.1 (Nov 23, 2010)
2
6
 
3
7
  * [BUGFIX] No longer inappropriately escapes rows for Rails 3.0.3
data/README.rdoc CHANGED
@@ -77,7 +77,7 @@ For more information about Rails 3 and Block helpers and the new conventions, ch
77
77
  == Installation
78
78
 
79
79
  In your Rails project, Gemfile:
80
- gem "tabletastic", '~> 0.2.0.pre6'
80
+ gem "tabletastic"
81
81
 
82
82
  Or, for if you're behind the times, as a plugin:
83
83
  script/plugin install git://github.com/jgdavey/tabletastic.git
@@ -239,6 +239,23 @@ will product html like:
239
239
 
240
240
  If it _still_ isn't flexible enough for your needs, it might be time to return to static html/erb.
241
241
 
242
+ == Internationalization (I18n)
243
+
244
+ Tabletastic has some i18n-features enabled by default.
245
+
246
+ Here is an example of locales:
247
+
248
+ en:
249
+ tabletastic:
250
+ actions:
251
+ show: "See"
252
+ edit: "Edit"
253
+ destroy: "Remove"
254
+ confirmation: "Are you sure?"
255
+ models:
256
+ comment:
257
+ title: "Title"
258
+
242
259
  == Default Options and Tabletastic initializer
243
260
 
244
261
  As of version 0.2.0, you can now setup some of your own defaults in an initializer file.
@@ -109,12 +109,12 @@ module Tabletastic
109
109
  compound_resource.flatten! if prefix.kind_of?(Array)
110
110
  case action
111
111
  when :show
112
- @template.link_to("Show", compound_resource)
112
+ @template.link_to(link_title(action), compound_resource)
113
113
  when :destroy
114
- @template.link_to("Destroy", compound_resource,
115
- :method => :delete, :confirm => @@destroy_confirm_message)
114
+ @template.link_to(link_title(action), compound_resource,
115
+ :method => :delete, :confirm => confirmation_message)
116
116
  else # edit, other resource GET actions
117
- @template.link_to(action.to_s.titleize,
117
+ @template.link_to(link_title(action),
118
118
  @template.polymorphic_path(compound_resource, :action => action))
119
119
  end
120
120
  end
@@ -154,8 +154,16 @@ module Tabletastic
154
154
  associations
155
155
  end
156
156
 
157
+ def confirmation_message
158
+ I18n.t("tabletastic.actions.confirmation", :default => @@destroy_confirm_message)
159
+ end
160
+
157
161
  def content_tag(name, content = nil, options = nil, escape = true, &block)
158
162
  @template.content_tag(name, content, options, escape, &block)
159
163
  end
164
+
165
+ def link_title(action)
166
+ I18n.translate(action, :scope => "tabletastic.actions", :default => action.to_s.titleize)
167
+ end
160
168
  end
161
169
  end
@@ -4,15 +4,15 @@ module Tabletastic
4
4
  class TableField
5
5
  @@association_methods = %w[to_label display_name full_name name title username login value to_str to_s]
6
6
 
7
- attr_accessor :heading, :method_or_proc, :cell_html, :heading_html
7
+ attr_reader :heading, :method, :method_or_proc, :cell_html, :heading_html, :klass
8
8
 
9
9
  def initialize(*args, &proc)
10
10
  options = args.extract_options!
11
- method = args.first.to_sym
11
+ @method = args.first.to_sym
12
12
  @method_or_proc = block_given? ? proc : method
13
13
  @cell_html, @heading_html = options[:cell_html], options[:heading_html]
14
14
  @klass = options.delete(:klass)
15
- @heading = options.delete(:heading) || @klass.try(:human_attribute_name, method.to_s) || method.to_s.humanize
15
+ @heading = options.delete(:heading) || default_heading
16
16
  end
17
17
 
18
18
  def cell_data(record)
@@ -29,6 +29,22 @@ module Tabletastic
29
29
 
30
30
  private
31
31
 
32
+ def default_heading
33
+ I18n.translate(method, :scope => i18n_scope, :default => klass_default_heading)
34
+ end
35
+
36
+ def klass_default_heading
37
+ if klass.respond_to?(:human_attribute_name)
38
+ klass.human_attribute_name(method.to_s)
39
+ else
40
+ method.to_s.humanize
41
+ end
42
+ end
43
+
44
+ def i18n_scope
45
+ [:tabletastic, :models, klass.try(:model_name).try(:singular)].compact
46
+ end
47
+
32
48
  def detect_string_method(association)
33
49
  @@association_methods.detect { |method| association.respond_to?(method) }
34
50
  end
@@ -1,3 +1,3 @@
1
1
  module Tabletastic
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
@@ -7,22 +7,11 @@ describe Tabletastic::TableField do
7
7
  tf.heading.should == "Method"
8
8
  end
9
9
 
10
- it "should know its heading when provided" do
11
- tf = TableField.new(:method, :heading => 'Foo', :klass => ::Post)
12
- tf.heading.should == "Foo"
13
- end
14
-
15
10
  it "should know what to do with a record" do
16
11
  tf = TableField.new(:downcase)
17
12
  tf.cell_data("HELLO").should == "hello"
18
13
  end
19
14
 
20
- it "should use a human_attribute_name whenever possible" do
21
- ::Post.stub!(:human_attribute_name).with('method').and_return("Blah blue")
22
- tf = TableField.new(:method, :klass => ::Post)
23
- tf.heading.should == "Blah blue"
24
- end
25
-
26
15
  it "should know what to do with a record (proc)" do
27
16
  tf = TableField.new(:fake) do |record|
28
17
  record.upcase
@@ -35,4 +24,40 @@ describe Tabletastic::TableField do
35
24
  tf = TableField.new(:booya)
36
25
  tf.cell_data(post).should_not be_html_safe
37
26
  end
27
+
28
+ describe "#heading" do
29
+ subject { TableField.new(:method, :heading => heading, :klass => Post) }
30
+ context "when heading option is provided" do
31
+ let(:heading) { "Foo" }
32
+ its(:heading) { should == "Foo" }
33
+ end
34
+
35
+ context "when heading option is omitted" do
36
+ let(:heading) { nil }
37
+ let(:derived_heading) { "Blah blue" }
38
+ let(:i18n_heading) { "I18n Foo" }
39
+
40
+ context "with I18n attributes defined" do
41
+ let(:i18n_translations) do
42
+ { :tabletastic => { :models => { :post => { :method => i18n_heading } } } }
43
+ end
44
+ before { I18n.backend.store_translations :en, i18n_translations }
45
+ after { I18n.backend.reload! }
46
+
47
+ its(:heading) { should == i18n_heading }
48
+ end
49
+
50
+ context "with no I18n attributes defined" do
51
+ context "with human_attribute_name-capable class" do
52
+ before { Post.stub!(:human_attribute_name).with('method').and_return(derived_heading) }
53
+ its(:heading) { should == derived_heading }
54
+ end
55
+
56
+ context "without human_attribute_name-capable class" do
57
+ its(:heading) { should == "Method" }
58
+ end
59
+ end
60
+
61
+ end
62
+ end
38
63
  end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tabletastic
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 19
5
+ prerelease:
5
6
  segments:
6
7
  - 0
7
8
  - 2
8
- - 1
9
- version: 0.2.1
9
+ - 2
10
+ version: 0.2.2
10
11
  platform: ruby
11
12
  authors:
12
13
  - Joshua Davey
@@ -14,7 +15,7 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-11-23 00:00:00 -06:00
18
+ date: 2011-03-26 00:00:00 -05:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
@@ -25,6 +26,7 @@ dependencies:
25
26
  requirements:
26
27
  - - ~>
27
28
  - !ruby/object:Gem::Version
29
+ hash: 7
28
30
  segments:
29
31
  - 3
30
32
  - 0
@@ -40,6 +42,7 @@ dependencies:
40
42
  requirements:
41
43
  - - ">="
42
44
  - !ruby/object:Gem::Version
45
+ hash: 3
43
46
  segments:
44
47
  - 0
45
48
  version: "0"
@@ -82,6 +85,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
82
85
  requirements:
83
86
  - - ">="
84
87
  - !ruby/object:Gem::Version
88
+ hash: 3
85
89
  segments:
86
90
  - 0
87
91
  version: "0"
@@ -90,6 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
94
  requirements:
91
95
  - - ">="
92
96
  - !ruby/object:Gem::Version
97
+ hash: 23
93
98
  segments:
94
99
  - 1
95
100
  - 3
@@ -98,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
103
  requirements: []
99
104
 
100
105
  rubyforge_project:
101
- rubygems_version: 1.3.7
106
+ rubygems_version: 1.5.2
102
107
  signing_key:
103
108
  specification_version: 3
104
109
  summary: A smarter table builder for Rails collections