traco 1.3.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,9 @@
1
+ # Changelog
2
+
3
+ ## 2.0.0
4
+
5
+ * Backwards incompatible: for dashed locales like `:"pt-BR"`, the column names are now expected to end in e.g. `_pt_br`, not `_pt-BR`.
6
+
7
+ ## 1.3.0
8
+
9
+ Whatever we had before introducing this changelog.
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![Build Status](https://secure.travis-ci.org/barsoom/traco.png)](http://travis-ci.org/barsoom/traco)
4
4
 
5
- Translatable attributes for Rails 3, stored in the model table itself.
5
+ Translatable attributes for Rails 3 and 4 (Ruby 1.9+), stored in the model table itself.
6
6
 
7
7
  Inspired by Iain Hecker's [translatable_columns](https://github.com/iain/translatable_columns/).
8
8
 
@@ -15,26 +15,30 @@ Say you want `Post#title` and `Post#body` to support both English and Swedish va
15
15
 
16
16
  Write a migration to get database columns with locale suffixes, e.g. `title_sv` and `title_en`, like:
17
17
 
18
- class CreatePosts < ActiveRecord::Migration
19
- def change
20
- create_table :posts do |t|
21
- t.string :title_sv, :title_en
22
- t.text :body_sv, :body_en
18
+ ```ruby
19
+ class CreatePosts < ActiveRecord::Migration
20
+ def change
21
+ create_table :posts do |t|
22
+ t.string :title_sv, :title_en
23
+ t.text :body_sv, :body_en
23
24
 
24
- t.timestamps
25
- end
26
- end
25
+ t.timestamps
27
26
  end
27
+ end
28
+ end
29
+ ```
28
30
 
29
31
  Don't create a database column named `title` without a suffix, since Traco will define a method with that name.
30
32
 
31
- E.g. `title_pt-BR` is also fine, if you need to use that locale format.
33
+ If you use a locale format like `pt-BR`, the column name would be `title_pt_br`.
32
34
 
33
35
  Declare the attributes in the model:
34
36
 
35
- class Post < ActiveRecord::Base
36
- translates :title, :body
37
- end
37
+ ```ruby
38
+ class Post < ActiveRecord::Base
39
+ translates :title, :body
40
+ end
41
+ ```
38
42
 
39
43
  You can still use your accessors like `title_sv` and `title_sv=` in forms, validations and other code, but you also get:
40
44
 
@@ -48,23 +52,28 @@ You can still use your accessors like `title_sv` and `title_sv=` in forms, valid
48
52
 
49
53
  `.locale_columns(:title)`: Returns an array like `[:title_sv, :title_en]` sorted with default locale first and then alphabetically. Suitable for looping in forms:
50
54
 
51
- <% Post.locale_columns(:title).each do |column| %>
52
- <p>
53
- <%= form.label column %>
54
- <%= form.text_field column %>
55
- </p>
56
- <% end %>
55
+ ```erb
56
+ <% Post.locale_columns(:title).each do |column| %>
57
+ <p>
58
+ <%= form.label column %>
59
+ <%= form.text_field column %>
60
+ </p>
61
+ <% end %>
62
+ ```
57
63
 
58
64
  Or perhaps for things like:
59
65
 
60
- attr_accessible *locale_columns(:title)
66
+ ```ruby
67
+ attr_accessible *locale_columns(:title)
61
68
 
62
- validates *locale_columns(:title),
63
- :uniqueness => true
69
+ validates *locale_columns(:title), :uniqueness => true
70
+ ```
64
71
 
65
72
  You can also pass multiple attributes if you like:
66
73
 
67
- attr_accessible *locale_columns(:title, :body)
74
+ ```ruby
75
+ attr_accessible *locale_columns(:title, :body)
76
+ ```
68
77
 
69
78
  The return value will be sorted like `[:title_sv, :title_en, :body_sv, :body_en]`.
70
79
 
@@ -79,10 +88,12 @@ Please note that your `translates :title, :body` declaration must be called befo
79
88
 
80
89
  if you specify
81
90
 
82
- class Post < ActiveRecord::Base
83
- translates :title, :body,
84
- fallback: false
85
- end
91
+ ```ruby
92
+ class Post < ActiveRecord::Base
93
+ translates :title, :body,
94
+ fallback: false
95
+ end
96
+ ```
86
97
 
87
98
  then `#title` will return `nil` if there is no translation in the current locale, instead of falling back to the default locale.
88
99
 
@@ -91,20 +102,23 @@ then `#title` will return `nil` if there is no translation in the current locale
91
102
 
92
103
  Methods are defined in an included module, so you can just override them and call Traco's implementation with `super`:
93
104
 
94
- class Post < ActiveRecord::Base
95
- translates :title
96
-
97
- def title
98
- super.reverse
99
- end
100
- end
105
+ ```ruby
106
+ class Post < ActiveRecord::Base
107
+ translates :title
101
108
 
109
+ def title
110
+ super.reverse
111
+ end
112
+ end
113
+ ```
102
114
 
103
115
  ## Installation
104
116
 
105
- Add this to your `Gemfile` if you use Bundler 1.1+:
117
+ Add this to your `Gemfile`:
106
118
 
107
- gem 'traco'
119
+ ```ruby
120
+ gem 'traco'
121
+ ```
108
122
 
109
123
  Then run
110
124
 
@@ -116,7 +130,7 @@ to install it.
116
130
  ## Running the tests
117
131
 
118
132
  bundle
119
- rake # or guard
133
+ rake
120
134
 
121
135
 
122
136
  <!-- Keeping this a hidden brain dump for now.
@@ -2,3 +2,10 @@ require "traco/version"
2
2
  require "traco/translates"
3
3
  require "traco/class_methods"
4
4
  require "traco/localized_reader"
5
+
6
+ module Traco
7
+ # E.g. :sv -> :sv, :"pt-BR" -> :pt_br
8
+ def self.locale_suffix(locale)
9
+ locale.to_s.downcase.sub("-", "_").to_sym
10
+ end
11
+ end
@@ -0,0 +1,78 @@
1
+ module Traco
2
+ class AttributeSetup
3
+ INSTANCE_METHODS_MODULE_NAME = "TracoInstanceMethods"
4
+
5
+ def initialize(klass)
6
+ @klass = klass
7
+ end
8
+
9
+ def set_up(attributes, options)
10
+ ensure_class_methods
11
+ ensure_attribute_list
12
+ ensure_instance_methods_module
13
+ add_attributes attributes, options
14
+ end
15
+
16
+ private
17
+
18
+ def ensure_class_methods
19
+ klass.extend Traco::ClassMethods
20
+ end
21
+
22
+ # Only called once per class or inheritance chain (e.g. once
23
+ # for the superclass, not at all for subclasses). The separation
24
+ # is important if we don't want to overwrite values if running
25
+ # multiple times in the same class or in different classes of
26
+ # an inheritance chain.
27
+ def ensure_attribute_list
28
+ return if klass.respond_to?(:translatable_attributes)
29
+ klass.class_attribute :translatable_attributes
30
+ klass.translatable_attributes = []
31
+ end
32
+
33
+ def ensure_instance_methods_module
34
+ # Instance methods are defined on an included module, so your class
35
+ # can just redefine them and call `super`, if you need to.
36
+ # http://thepugautomatic.com/2013/07/dsom/
37
+ unless klass.const_defined?(INSTANCE_METHODS_MODULE_NAME, _search_ancestors = false)
38
+ klass.send :include, klass.const_set(INSTANCE_METHODS_MODULE_NAME, Module.new)
39
+ end
40
+ end
41
+
42
+ def add_attributes(attributes, options)
43
+ klass.translatable_attributes |= attributes
44
+
45
+ attributes.each do |attribute|
46
+ define_localized_reader attribute, options
47
+ define_localized_writer attribute, options
48
+ end
49
+ end
50
+
51
+ def define_localized_reader(attribute, options)
52
+ fallback = options.fetch(:fallback, true)
53
+
54
+ custom_define_method(attribute) do
55
+ @localized_readers ||= {}
56
+ @localized_readers[attribute] ||= Traco::LocalizedReader.new(self, attribute, fallback: fallback)
57
+ @localized_readers[attribute].value
58
+ end
59
+ end
60
+
61
+ def define_localized_writer(attribute, options)
62
+ custom_define_method("#{attribute}=") do |value|
63
+ suffix = Traco.locale_suffix(I18n.locale)
64
+ send("#{attribute}_#{suffix}=", value)
65
+ end
66
+ end
67
+
68
+ def custom_define_method(name, &block)
69
+ klass.const_get(INSTANCE_METHODS_MODULE_NAME).module_eval do
70
+ define_method(name, &block)
71
+ end
72
+ end
73
+
74
+ def klass
75
+ @klass
76
+ end
77
+ end
78
+ end
@@ -1,6 +1,6 @@
1
1
  module Traco
2
2
  module ClassMethods
3
- LOCALE_RE = /[a-zA-Z]{2}(?:-[a-zA-Z]{2})?/
3
+ LOCALE_RE = /[a-zA-Z]{2}(?:_[a-zA-Z]{2})?/
4
4
 
5
5
  def locales_for_attribute(attribute)
6
6
  re = /\A#{attribute}_(#{LOCALE_RE})\z/
@@ -19,13 +19,15 @@ module Traco
19
19
  end
20
20
 
21
21
  def human_attribute_name(attribute, options = {})
22
- default = super(attribute, options.merge(:default => ""))
23
- if default.blank? && attribute.to_s.match(/\A(\w+)_(#{LOCALE_RE})\z/)
22
+ default = super(attribute, options.merge(default: ""))
23
+
24
+ if default.blank? && attribute.to_s.match(/\A(\w+?)_(#{LOCALE_RE})\z/)
24
25
  column, locale = $1, $2.to_sym
25
26
  if translates?(column)
26
27
  return "#{super(column, options)} (#{locale_name(locale)})"
27
28
  end
28
29
  end
30
+
29
31
  super
30
32
  end
31
33
 
@@ -33,7 +35,7 @@ module Traco
33
35
 
34
36
  def locale_sort_value
35
37
  lambda { |locale|
36
- if locale == I18n.default_locale
38
+ if locale == Traco.locale_suffix(I18n.default_locale)
37
39
  # Sort the default locale first.
38
40
  "0"
39
41
  else
@@ -48,7 +50,8 @@ module Traco
48
50
  end
49
51
 
50
52
  def locale_name(locale)
51
- I18n.t(locale, :scope => :"i18n.languages", :default => locale.to_s.upcase)
53
+ default = locale.to_s.upcase.sub("_", "-")
54
+ I18n.t(locale, scope: :"i18n.languages", default: default)
52
55
  end
53
56
  end
54
57
  end
@@ -8,7 +8,7 @@ module Traco
8
8
 
9
9
  def value
10
10
  locales_to_try.each do |locale|
11
- value = @record.send("#{@attribute}_#{locale}")
11
+ value = @record.send("#{@attribute}_#{Traco.locale_suffix(locale)}")
12
12
  return value if value.present?
13
13
  end
14
14
 
@@ -18,14 +18,14 @@ module Traco
18
18
  private
19
19
 
20
20
  def locales_to_try
21
- @locales_to_try ||= locale_chain & locales_for_attribute
21
+ locale_chain & locales_for_attribute
22
22
  end
23
23
 
24
24
  def locale_chain
25
25
  chain = []
26
26
  chain << I18n.locale
27
27
  chain << I18n.default_locale if @fallback
28
- chain
28
+ chain.map { |locale| Traco.locale_suffix(locale) }
29
29
  end
30
30
 
31
31
  def locales_for_attribute
@@ -1,3 +1,5 @@
1
+ require "traco/attribute_setup"
2
+
1
3
  module Traco
2
4
  module Translates
3
5
  def translates(*attributes)
@@ -9,84 +11,3 @@ module Traco
9
11
  end
10
12
 
11
13
  ActiveRecord::Base.send :extend, Traco::Translates
12
-
13
-
14
- module Traco
15
- class AttributeSetup
16
- INSTANCE_METHODS_MODULE_NAME = "TracoInstanceMethods"
17
-
18
- def initialize(klass)
19
- @klass = klass
20
- end
21
-
22
- def set_up(attributes, options)
23
- ensure_class_methods
24
- ensure_attribute_list
25
- ensure_instance_methods_module
26
- add_attributes attributes, options
27
- end
28
-
29
- private
30
-
31
- def ensure_class_methods
32
- klass.extend Traco::ClassMethods
33
- end
34
-
35
- # Only called once per class or inheritance chain (e.g. once
36
- # for the superclass, not at all for subclasses). The separation
37
- # is important if we don't want to overwrite values if running
38
- # multiple times in the same class or in different classes of
39
- # an inheritance chain.
40
- def ensure_attribute_list
41
- return if klass.respond_to?(:translatable_attributes)
42
- klass.class_attribute :translatable_attributes
43
- klass.translatable_attributes = []
44
- end
45
-
46
- def ensure_instance_methods_module
47
- # Instance methods are defined on an included module, so your class
48
- # can just redefine them and call `super`, if you need to.
49
- # http://thepugautomatic.com/2013/07/dsom/
50
- unless klass.const_defined?(INSTANCE_METHODS_MODULE_NAME, _search_ancestors = false)
51
- klass.send :include, klass.const_set(INSTANCE_METHODS_MODULE_NAME, Module.new)
52
- end
53
- end
54
-
55
- def add_attributes(attributes, options)
56
- fallback = options.fetch(:fallback, true)
57
-
58
- klass.translatable_attributes |= attributes
59
-
60
- attributes.each do |attribute|
61
- define_localized_reader attribute, :fallback => fallback
62
- define_localized_writer attribute
63
- end
64
- end
65
-
66
- def define_localized_reader(attribute, options)
67
- fallback = options[:fallback]
68
-
69
- custom_define_method(attribute) do
70
- @localized_readers ||= {}
71
- @localized_readers[attribute] ||= Traco::LocalizedReader.new(self, attribute, :fallback => fallback)
72
- @localized_readers[attribute].value
73
- end
74
- end
75
-
76
- def define_localized_writer(attribute)
77
- custom_define_method("#{attribute}=") do |value|
78
- send("#{attribute}_#{I18n.locale}=", value)
79
- end
80
- end
81
-
82
- def custom_define_method(name, &block)
83
- klass.const_get(INSTANCE_METHODS_MODULE_NAME).module_eval do
84
- define_method(name, &block)
85
- end
86
- end
87
-
88
- def klass
89
- @klass
90
- end
91
- end
92
- end
@@ -1,3 +1,3 @@
1
1
  module Traco
2
- VERSION = "1.3.0"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -1,6 +1,6 @@
1
1
  RSpec.configure do |config|
2
2
  config.treat_symbols_as_metadata_keys_with_true_values = true
3
- config.filter_run :focus => true
3
+ config.filter_run focus: true
4
4
  config.run_all_when_everything_filtered = true
5
5
 
6
6
  # Clear class state before each spec.
@@ -18,13 +18,13 @@ end
18
18
  require "active_record"
19
19
  require "app/post.rb"
20
20
 
21
- ActiveRecord::Base.establish_connection :adapter => "sqlite3", :database => ":memory:"
21
+ ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
22
22
 
23
23
  silence_stream(STDOUT) do
24
- ActiveRecord::Schema.define(:version => 0) do
25
- create_table :posts, :force => true do |t|
26
- t.string :title_sv, :title_en, :title_fi, 'title_pt-BR'
27
- t.string :body_sv, :body_en, :body_fi, 'body_pt-BR'
24
+ ActiveRecord::Schema.define(version: 0) do
25
+ create_table :posts, force: true do |t|
26
+ t.string :title_sv, :title_en, :title_pt_br
27
+ t.string :body_sv, :body_en, :body_pt_br
28
28
  end
29
29
  end
30
30
  end
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require "spec_helper"
2
4
  require "traco"
3
5
 
@@ -44,9 +46,9 @@ describe Post, ".locales_for_attribute" do
44
46
  end
45
47
 
46
48
  it "lists the locales, default first and then alphabetically" do
47
- I18n.default_locale = :fi
49
+ I18n.default_locale = :"pt-BR"
48
50
  Post.locales_for_attribute(:title).should == [
49
- :fi, :en, :"pt-BR", :sv,
51
+ :pt_br, :en, :sv
50
52
  ]
51
53
  end
52
54
  end
@@ -54,27 +56,27 @@ end
54
56
  describe Post, ".locale_columns" do
55
57
  before do
56
58
  Post.translates :title
57
- I18n.default_locale = :fi
59
+ I18n.default_locale = :"pt-BR"
58
60
  end
59
61
 
60
62
  it "lists the columns-with-locale for that attribute, default locale first and then alphabetically" do
61
63
  Post.locale_columns(:title).should == [
62
- :title_fi, :title_en, :"title_pt-BR", :title_sv
64
+ :title_pt_br, :title_en, :title_sv
63
65
  ]
64
66
  end
65
67
 
66
68
  it "supports multiple attributes" do
67
69
  Post.translates :body
68
70
  Post.locale_columns(:body, :title).should == [
69
- :body_fi, :body_en, :"body_pt-BR", :body_sv,
70
- :title_fi, :title_en, :"title_pt-BR", :title_sv
71
+ :body_pt_br, :body_en, :body_sv,
72
+ :title_pt_br, :title_en, :title_sv
71
73
  ]
72
74
  end
73
75
  end
74
76
 
75
77
  describe Post, "#title" do
76
78
  let(:post) {
77
- Post.new(:title_sv => "Hej", :title_en => "Halloa", :title_fi => "Moi moi")
79
+ Post.new(title_sv: "Hej", title_en: "Halloa", title_pt_br: "Olá")
78
80
  }
79
81
 
80
82
  before do
@@ -87,6 +89,12 @@ describe Post, "#title" do
87
89
  post.title.should == "Hej"
88
90
  end
89
91
 
92
+ it "handles dashed locales" do
93
+ I18n.locale = :"pt-BR"
94
+ post.title_pt_br.should == "Olá"
95
+ post.title.should == "Olá"
96
+ end
97
+
90
98
  it "falls back to the default locale if locale has no column" do
91
99
  I18n.locale = :ru
92
100
  post.title.should == "Halloa"
@@ -106,7 +114,7 @@ describe Post, "#title" do
106
114
  it "returns nil if all are blank" do
107
115
  post.title_sv = " "
108
116
  post.title_en = ""
109
- post.title_fi = nil
117
+ post.title_pt_br = nil
110
118
  post.title.should be_nil
111
119
  end
112
120
 
@@ -128,14 +136,22 @@ describe Post, "#title" do
128
136
  post.title.should == "title"
129
137
  post.body.should == "body"
130
138
  end
139
+
140
+ it "reflects locale change" do
141
+ post.title.should == "Hej"
142
+ I18n.locale = :en
143
+ post.title.should == "Halloa"
144
+ I18n.locale = :sv
145
+ post.title.should == "Hej"
146
+ end
131
147
 
132
- context "with :fallback => false" do
148
+ context "with fallback: false" do
133
149
  let(:post) {
134
- Post.new(:title_sv => "Hej", :title_en => "Halloa")
150
+ Post.new(title_sv: "Hej", title_en: "Halloa")
135
151
  }
136
152
 
137
153
  before do
138
- Post.translates :title, :fallback => false
154
+ Post.translates :title, fallback: false
139
155
  I18n.default_locale = :en
140
156
  end
141
157
 
@@ -155,17 +171,22 @@ end
155
171
  describe Post, "#title=" do
156
172
  before do
157
173
  Post.translates :title
158
- I18n.locale = :sv
159
174
  end
160
175
 
161
176
  let(:post) { Post.new }
162
177
 
163
178
  it "assigns in the current locale" do
179
+ I18n.locale = :sv
164
180
  post.title = "Hej"
165
- post.title.should == "Hej"
166
181
  post.title_sv.should == "Hej"
167
182
  end
168
183
 
184
+ it "handles dashed locales" do
185
+ I18n.locale = :"pt-BR"
186
+ post.title = "Olá"
187
+ post.title_pt_br.should == "Olá"
188
+ end
189
+
169
190
  it "raises if locale has no column" do
170
191
  I18n.locale = :ru
171
192
  lambda {
@@ -180,33 +201,33 @@ describe Post, ".human_attribute_name" do
180
201
  I18n.locale = :sv
181
202
  end
182
203
 
183
- it "appends a known language name" do
184
- Post.human_attribute_name(:title_en).should == "Titel (engelska)"
204
+ it "uses explicit translations if present" do
205
+ Post.human_attribute_name(:title_sv).should == "Svensk titel"
185
206
  end
186
207
 
187
- it "uses abbreviation when language name is not known" do
188
- Post.human_attribute_name(:title_fi).should == "Titel (FI)"
208
+ it "appends translated language name if present" do
209
+ Post.human_attribute_name(:title_en).should == "Titel (engelska)"
189
210
  end
190
211
 
191
- it "yields to defined translations" do
192
- Post.human_attribute_name(:title_sv).should == "Svensk titel"
212
+ it "appends an abbreviation when language name is not translated" do
213
+ Post.human_attribute_name(:title_pt_br).should == "Titel (PT-BR)"
193
214
  end
194
215
 
195
- it "passes through the default behavior" do
216
+ it "passes through the default behavior for untranslated attributes" do
196
217
  Post.human_attribute_name(:title).should == "Titel"
197
218
  end
198
219
 
199
- it "passes through untranslated columns" do
220
+ it "passes through untranslated attributes even if the name suggests it's translated" do
200
221
  Post.human_attribute_name(:body_sv).should == "Body sv"
201
222
  end
202
223
 
203
224
  # ActiveModel::Errors#full_messages passes in an ugly default.
204
225
 
205
- it "does not yield to passed-in defaults" do
206
- Post.human_attribute_name(:title_en, :default => "Title en").should == "Titel (engelska)"
226
+ it "does not honor passed-in defaults for locale columns" do
227
+ Post.human_attribute_name(:title_en, default: "Title en").should == "Titel (engelska)"
207
228
  end
208
229
 
209
230
  it "passes through defaults" do
210
- Post.human_attribute_name(:body_sv, :default => "Boday").should == "Boday"
231
+ Post.human_attribute_name(:body_sv, default: "Boday").should == "Boday"
211
232
  end
212
233
  end
@@ -21,6 +21,4 @@ Gem::Specification.new do |s|
21
21
 
22
22
  s.add_development_dependency "rake"
23
23
  s.add_development_dependency "rspec"
24
- s.add_development_dependency "guard"
25
- s.add_development_dependency "guard-rspec"
26
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: traco
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 2.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-10-07 00:00:00.000000000 Z
12
+ date: 2013-12-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -75,38 +75,6 @@ dependencies:
75
75
  - - ! '>='
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: guard
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
86
- type: :development
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
94
- - !ruby/object:Gem::Dependency
95
- name: guard-rspec
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
101
- version: '0'
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
78
  description:
111
79
  email:
112
80
  - henrik@barsoom.se
@@ -117,11 +85,12 @@ files:
117
85
  - .gitignore
118
86
  - .rvmrc
119
87
  - .travis.yml
88
+ - CHANGELOG.md
120
89
  - Gemfile
121
- - Guardfile
122
- - README.markdown
90
+ - README.md
123
91
  - Rakefile
124
92
  - lib/traco.rb
93
+ - lib/traco/attribute_setup.rb
125
94
  - lib/traco/class_methods.rb
126
95
  - lib/traco/localized_reader.rb
127
96
  - lib/traco/translates.rb
@@ -145,7 +114,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
145
114
  version: '0'
146
115
  segments:
147
116
  - 0
148
- hash: -2274355270320966914
117
+ hash: -4140218999015648570
149
118
  required_rubygems_version: !ruby/object:Gem::Requirement
150
119
  none: false
151
120
  requirements:
@@ -154,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
123
  version: '0'
155
124
  segments:
156
125
  - 0
157
- hash: -2274355270320966914
126
+ hash: -4140218999015648570
158
127
  requirements: []
159
128
  rubyforge_project:
160
129
  rubygems_version: 1.8.24
data/Guardfile DELETED
@@ -1,6 +0,0 @@
1
- guard "rspec", :version => 2, :cli => "--color" do
2
- watch(%r{^spec/.+_spec\.rb$})
3
- watch(%r{^lib/traco/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
4
- watch(%r{^lib/(.+)\.rb$}) { |m| "spec" }
5
- watch('spec/spec_helper.rb') { |m| "spec" }
6
- end