traco 5.2.0 → 5.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 978a4848f6b31ac00301a8e43b89b7937a446a261031c699c3edc6cd8207d7f8
4
- data.tar.gz: 53b5f78c80d4e5bc9a8f16aadba823e2dd258dfec8e754650c63b8e12c5ac318
3
+ metadata.gz: c8d3d3ad540b0b54d9a5ce5adb2128e2edb4f3a1639cc943005bf8f0ffc59046
4
+ data.tar.gz: 28ac1c659ba7e3b6160e5d7da6bd995a2a0a12c08b0e070d461b45b85cc751ae
5
5
  SHA512:
6
- metadata.gz: a30e150540760c82a82ed68553c298dcade15f9695fbc7af1afb7f2c443e4804233c536c2f1652c7fb3338626bfa610df339f35ea00679b43e14742647fdcc8c
7
- data.tar.gz: 49a329d6a6b2cc7c2a6d68a21f5f9e2a2dd76327f162f8a1115c04c254ef6aaf3b287b2790e6d96b0f811873f5c46555e8d2c74143fb9bcaf678a51dc66863a4
6
+ metadata.gz: d2bd0a863da9ad824af47836f419f0b89ffd366aebf45a05772c2d109249effde7f5f18904480da34fd7d4deaf338125cfc5e8a74926c24ea6eecac8a16419dd
7
+ data.tar.gz: 6604dbef3ea352ecb532aa77b826e15664cb407bf168240d254f194b0be9340ced3791eda23d45199d14860c8a0f3364bb78c3d0ef257a0a9d565f3d8bb90a29
@@ -21,10 +21,11 @@ module Traco
21
21
  private
22
22
 
23
23
  def define_reader(attribute)
24
+ default_fallback = @options.fetch(:fallback, LocaleFallbacks::DEFAULT_FALLBACK)
25
+
24
26
  class_eval <<-EOM, __FILE__, __LINE__ + 1
25
- def #{attribute}(options = {})
26
- default_fallback = #{@options.fetch(:fallback, LocaleFallbacks::DEFAULT_FALLBACK).inspect}
27
- fallback = options.fetch(:fallback, default_fallback)
27
+ def #{attribute}(locale: nil, fallback: #{default_fallback.inspect})
28
+ return send(Traco.column(:#{attribute}, locale)) if locale
28
29
 
29
30
  columns_to_try = self.class._locale_columns_for_attribute(:#{attribute}, fallback: fallback)
30
31
  columns_to_try.each do |column|
@@ -48,8 +49,8 @@ module Traco
48
49
 
49
50
  def define_query(attribute)
50
51
  class_eval <<-EOM, __FILE__, __LINE__ + 1
51
- def #{attribute}?
52
- #{attribute}.present?
52
+ def #{attribute}?(locale: nil)
53
+ send(:#{attribute}, locale: locale).present?
53
54
  end
54
55
  EOM
55
56
  end
data/lib/traco/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Traco
2
- VERSION = "5.2.0"
2
+ VERSION = "5.3.0"
3
3
  end
data/spec/traco_spec.rb CHANGED
@@ -230,6 +230,19 @@ RSpec.describe Post, "#title" do
230
230
  expect(post.title).to eq "Hej"
231
231
  end
232
232
 
233
+ context "when given a 'locale' argument" do
234
+ it "gives the title in that locale, without fallback" do
235
+ post = Post.new(title_sv: "Hej", title_en: "Halloa")
236
+ I18n.default_locale = :en
237
+ I18n.locale = :en
238
+
239
+ expect(post.title(locale: :sv)).to eq "Hej"
240
+
241
+ post.title_sv = nil
242
+ expect(post.title(locale: :sv)).to eq nil
243
+ end
244
+ end
245
+
233
246
  context "when the translation was defined with fallback: false" do
234
247
  let(:post) {
235
248
  Post.new(title_sv: "Hej", title_en: "Halloa")
@@ -310,7 +323,7 @@ RSpec.describe Post, "#title?" do
310
323
  I18n.default_locale = :en
311
324
  end
312
325
 
313
- it "is true if the title is present" do
326
+ it "is true if the title is present, with fallback" do
314
327
  post = Post.new(title_sv: "", title_en: " ", title_pt_br: nil)
315
328
  expect(post.title?).to be false
316
329
 
@@ -318,6 +331,19 @@ RSpec.describe Post, "#title?" do
318
331
 
319
332
  expect(post.title?).to be true
320
333
  end
334
+
335
+ context "when given a 'locale' argument" do
336
+ it "is true if the title if present in that locale, with no fallback" do
337
+ post = Post.new(title_sv: "Hej", title_en: "Halloa")
338
+ I18n.default_locale = :en
339
+ I18n.locale = :en
340
+
341
+ expect(post.title?(locale: :sv)).to be true
342
+
343
+ post.title_sv = nil
344
+ expect(post.title?(locale: :sv)).to be false
345
+ end
346
+ end
321
347
  end
322
348
 
323
349
  RSpec.describe Post, ".human_attribute_name" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: traco
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.2.0
4
+ version: 5.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henrik Nyh
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-17 00:00:00.000000000 Z
11
+ date: 2021-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -80,29 +80,14 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
- description:
83
+ description:
84
84
  email:
85
85
  - henrik@barsoom.se
86
86
  executables: []
87
87
  extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
- - ".gitignore"
91
- - ".rspec"
92
- - ".travis.yml"
93
- - Appraisals
94
- - CHANGELOG.md
95
- - Gemfile
96
90
  - LICENSE.txt
97
- - README.md
98
- - Rakefile
99
- - benchmarks/overhead.rb
100
- - gemfiles/rails_4.2.gemfile
101
- - gemfiles/rails_5.0.gemfile
102
- - gemfiles/rails_5.1.gemfile
103
- - gemfiles/rails_5.2.gemfile
104
- - gemfiles/rails_6.0.gemfile
105
- - gemfiles/rails_6.1.gemfile
106
91
  - lib/traco.rb
107
92
  - lib/traco/attributes.rb
108
93
  - lib/traco/class_methods.rb
@@ -115,12 +100,11 @@ files:
115
100
  - spec/spec_helper.rb
116
101
  - spec/spec_helper_models.rb
117
102
  - spec/traco_spec.rb
118
- - traco.gemspec
119
103
  homepage: ''
120
104
  licenses:
121
105
  - MIT
122
106
  metadata: {}
123
- post_install_message:
107
+ post_install_message:
124
108
  rdoc_options: []
125
109
  require_paths:
126
110
  - lib
@@ -136,13 +120,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
120
  version: '0'
137
121
  requirements: []
138
122
  rubygems_version: 3.1.4
139
- signing_key:
123
+ signing_key:
140
124
  specification_version: 4
141
125
  summary: Translatable columns for Rails 4.2 or better, stored in the model table itself.
142
126
  test_files:
143
- - spec/app/post.rb
144
- - spec/app/sv.yml
145
- - spec/locale_fallbacks_spec.rb
146
127
  - spec/spec_helper.rb
147
- - spec/spec_helper_models.rb
128
+ - spec/app/sv.yml
129
+ - spec/app/post.rb
148
130
  - spec/traco_spec.rb
131
+ - spec/spec_helper_models.rb
132
+ - spec/locale_fallbacks_spec.rb
data/.gitignore DELETED
@@ -1,7 +0,0 @@
1
- .bundle/
2
- Gemfile.lock
3
- pkg/
4
- tmp
5
- *.gem
6
- # Appraisal generated lockfiles
7
- *.gemfile.lock
data/.rspec DELETED
@@ -1 +0,0 @@
1
- -r spec_helper
data/.travis.yml DELETED
@@ -1,24 +0,0 @@
1
- language: ruby
2
-
3
- rvm:
4
- - 2.6.3
5
- - 2.5.5
6
- - 2.4.6
7
- - 2.3.8
8
- gemfile:
9
- - gemfiles/rails_4.2.gemfile
10
- - gemfiles/rails_5.0.gemfile
11
- - gemfiles/rails_5.1.gemfile
12
- - gemfiles/rails_5.2.gemfile
13
- - gemfiles/rails_6.0.gemfile
14
- - gemfiles/rails_6.1.gemfile
15
- matrix:
16
- exclude:
17
- - rvm: 2.3.8
18
- gemfile: gemfiles/rails_6.0.gemfile
19
- - rvm: 2.3.8
20
- gemfile: gemfiles/rails_6.1.gemfile
21
- - rvm: 2.4.6
22
- gemfile: gemfiles/rails_6.0.gemfile
23
- - rvm: 2.4.6
24
- gemfile: gemfiles/rails_6.1.gemfile
data/Appraisals DELETED
@@ -1,26 +0,0 @@
1
- appraise "rails-4.2" do
2
- gem "activerecord", "~> 4.2.0"
3
- gem "sqlite3", "~> 1.3.13"
4
- end
5
-
6
- appraise "rails-5.0" do
7
- gem "activerecord", "~> 5.0.0"
8
- gem "sqlite3", "~> 1.3.13"
9
- end
10
-
11
- appraise "rails-5.1" do
12
- gem "activerecord", "~> 5.1.0"
13
- gem "sqlite3", "~> 1.3.13"
14
- end
15
-
16
- appraise "rails-5.2" do
17
- gem "activerecord", "~> 5.2.0"
18
- end
19
-
20
- appraise "rails-6.0" do
21
- gem "activerecord", "~> 6.0.3.1"
22
- end
23
-
24
- appraise "rails-6.1" do
25
- gem "activerecord", "~> 6.1.0"
26
- end
data/CHANGELOG.md DELETED
@@ -1,83 +0,0 @@
1
- # Changelog
2
-
3
- ## 5.2.0
4
-
5
- * Feature: `locale_columns` without a passed column name returns all locale columns. Thanks to [manuelmeurer](https://github.com/manuelmeurer)!
6
-
7
- ## 5.1.0
8
-
9
- * Feature: Add `fallback: :i18n` to use the fallbacks from `I18n.fallbacks`. Thanks to [sunny](https://github.com/sunny)!
10
-
11
- ## 5.0.0
12
-
13
- * Change `locale_columns` and `locales_for_attribute` to sort current locale first, then default locale (previously, it was default locale first). This makes more sense for our own apps, and hopefully other apps as well.
14
-
15
- ## 4.0.0
16
-
17
- * Drop support for end-of-lifed Ruby 2.1 and 2.2.
18
-
19
- ## 3.3.0
20
-
21
- * Traco now automatically adds query methods, e.g. `Item#title?` when `title` is translated.
22
-
23
- ## 3.2.2
24
-
25
- * Internal cleanup.
26
-
27
- ## 3.2.1
28
-
29
- * Bugfix: with `fallback: [:sv]`, always look at current locale before any fallbacks.
30
-
31
- ## 3.2.0
32
-
33
- * Introduce e.g. `fallback: [:sv]` to explicitly specify fallbacks.
34
-
35
- ## 3.1.6
36
-
37
- Make [license (MIT)](LICENSE.txt) easier to autodetect.
38
-
39
- ## 3.1.5
40
-
41
- * Bugfix: don't raise error loading models before the DB is created. Thanks to PikachuEXE and Andrii Malyshko.
42
-
43
- ## 3.1.4
44
-
45
- * Bugfix: restore sorting of `locale_columns` and `locales_for_attribute` to put default locale first, not current locale. Thanks to PikachuEXE.
46
-
47
- ## 3.1.3
48
-
49
- * ~20 time speedup thanks to optimizations by Andrii Malyshko.
50
-
51
- Reading a Traco translated attribute used to be ~250x slower than an untranslated attribute; now it's down to ~10x slower.
52
-
53
- ## 3.1.2
54
-
55
- * Bugfix: `.current_locale_column` handles dashed locales like "pt-BR" correctly. Thanks to PikachuEXE.
56
-
57
- ## 3.1.1
58
-
59
- * Bugfix around fallbacks and memoization. Thanks to PikachuEXE.
60
-
61
- ## 3.1.0
62
-
63
- * Introduce `.current_locale_column`, e.g. `Post.current_locale_column(:title) # => :title_sv`.
64
-
65
- ## 3.0.0
66
-
67
- * Backwards incompatible: `fallback: true` is now `fallback: :default`. Since this was the implicit default value, you shouldn't have a problem unless you explicitly declared this value.
68
-
69
- ## 2.2.0
70
-
71
- * `fallback: :any` to fall back to any other locale if the text is blank in the current and default locales.
72
-
73
- ## 2.1.0
74
-
75
- * Attribute readers can override the attribute's `fallback` setting, e.g. `item.title(fallback: false)`.
76
-
77
- ## 2.0.0
78
-
79
- * Backwards incompatible: for dashed locales like "pt-BR", the column names are now expected to end in e.g. `_pt_br`, not `_pt-BR`.
80
-
81
- ## 1.3.0
82
-
83
- Whatever we had before introducing this changelog.
data/Gemfile DELETED
@@ -1,8 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in the .gemspec.
4
- gemspec
5
-
6
- group :benchmark do
7
- gem "benchmark-ips"
8
- end
data/README.md DELETED
@@ -1,178 +0,0 @@
1
- # Traco
2
-
3
- [![Build Status](https://secure.travis-ci.org/barsoom/traco.svg)](http://travis-ci.org/barsoom/traco)
4
-
5
- Translatable attributes for Ruby on Rails 4.2+, stored in the model table itself.
6
-
7
- Inspired by Iain Hecker's [translatable_columns](https://github.com/iain/translatable_columns/).
8
-
9
- To store translations outside the model, see Sven Fuchs' [Globalize](https://github.com/globalize/globalize).
10
-
11
-
12
- ## Usage
13
-
14
- Say you want `Post#title` and `Post#body` to support both English and Swedish values.
15
-
16
- Write a migration to get database columns with locale suffixes, e.g. `title_sv` and `title_en`, like:
17
-
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
24
-
25
- t.timestamps
26
- end
27
- end
28
- end
29
- ```
30
-
31
- Don't create a database column named `title` without a suffix, since Traco will define a method with that name.
32
-
33
- If you use a locale format like `pt-BR`, the column name would be `title_pt_br`.
34
-
35
- Declare the attributes in the model:
36
-
37
- ```ruby
38
- class Post < ActiveRecord::Base
39
- translates :title, :body
40
- end
41
- ```
42
-
43
- You can still use your accessors like `title_sv` and `title_sv=` in forms, validations and other code, but you also get:
44
-
45
- `#title`: Shows the title in the current locale. If blank, falls back to default locale. Otherwise nil.
46
-
47
- `#title=`: Assigns the title to the column for the current locale, if present. Raises if the column doesn't exist.
48
-
49
- `#title?`: Is the title present? Respects the Traco [fallback](#fallbacks) setting.
50
-
51
- `.human_attribute_name(:title_sv)`: Extends this standard method to return "Title (Swedish)" if you have a translation key `i18n.languages.sv = "Swedish"` and "Title (SV)" otherwise. Rails uses this method to build validation error messages and form labels.
52
-
53
- `.translatable_attributes`: Returns an array like `[:title, :body]`.
54
-
55
- `.locale_columns(:title)`: Returns an array like `[:title_sv, :title_en]` sorted with current locale first, then default locale, and then alphabetically. Suitable for looping in forms:
56
-
57
- ```erb
58
- <% Post.locale_columns(:title).each do |column| %>
59
- <p>
60
- <%= form.label column %>
61
- <%= form.text_field column %>
62
- </p>
63
- <% end %>
64
- ```
65
-
66
- Or perhaps for things like:
67
-
68
- ```ruby
69
- attr_accessible *locale_columns(:title)
70
-
71
- validates *locale_columns(:title), :uniqueness => true
72
- ```
73
-
74
- You can also pass multiple attributes if you like:
75
-
76
- ```ruby
77
- attr_accessible *locale_columns(:title, :body)
78
- ```
79
-
80
- The return value will be sorted like `[:title_sv, :title_en, :body_sv, :body_en]`.
81
-
82
- `.current_locale_column(:title)`: Returns `:title_sv` if `:sv` is the current locale. Suitable for some SQL queries, such as sorting.
83
-
84
- `.locales_for_attribute(:title)`: Returns an array like `[:sv, :en]` sorted with current locale first, then default locale, and then alphabetically.
85
-
86
- And the equivalent methods for `body`, of course.
87
-
88
- Please note that your `translates :title, :body` declaration must be called before you call `locale_columns`. Otherwise you will get an error like "NoMethodError: undefined method `locale\_columns' for #\<Class:0x00000003f69188\>".
89
-
90
-
91
- ### Fallbacks
92
-
93
- By default, Traco will fall back to the default locale if there is no translation in the current locale.
94
-
95
- You can specify e.g. `translates :title, fallback: false` to never fall back and instead return `nil`.
96
-
97
- You can specify e.g. `translates :title, fallback: :any` to fall back first to the default locale, then to any other locale.
98
-
99
- You can specify e.g. `translates :title, fallback: [:sv]` to explicitly declare fallbacks as an array of any length.
100
-
101
- You can specify e.g. `translates :title, fallback: :i18n` to use the fallbacks from `I18n.fallbacks`.
102
-
103
- You can override the default fallback strategy with a parameter passed to the reader: `post.title(fallback: :any)`.
104
-
105
- If you need to declare the default locale fallback, do `post.title(fallback: :default)`.
106
-
107
-
108
- ### Overriding methods
109
-
110
- Methods are defined in an included module, so you can just override them and call Traco's implementation with `super`:
111
-
112
- ```ruby
113
- class Post < ActiveRecord::Base
114
- translates :title
115
-
116
- def title
117
- super.reverse
118
- end
119
- end
120
- ```
121
-
122
- ## Installation
123
-
124
- Add this to your `Gemfile`:
125
-
126
- ```ruby
127
- gem "traco"
128
- ```
129
-
130
- Then run
131
-
132
- bundle
133
-
134
- to install it.
135
-
136
-
137
- ## Running the tests
138
-
139
- bundle
140
- rake
141
-
142
-
143
- ## Benchmark
144
-
145
- ruby benchmarks/overhead.rb
146
-
147
-
148
- <!-- Keeping this a hidden brain dump for now.
149
-
150
- ## TODO
151
-
152
- We've intentionally kept this simple with no features we do not need.
153
- We'd be happy to merge additional features that others contribute.
154
-
155
- Possible improvements to make:
156
-
157
- * Validation that checks that at least one translation for a column exists.
158
- * Validation that checks that every translation for a column exists.
159
- * Scopes like `translated`, `translated_to(locale)`.
160
- * Support for region locales, like `en-US` and `en-GB`.
161
-
162
- -->
163
-
164
- ## Contributors
165
-
166
- * [Henrik Nyh](http://henrik.nyh.se)
167
- * Andrii Malyshko
168
- * Tobias Bohwalli
169
- * Mario Alberto Chavez
170
- * Philip Arndt
171
- * [PikachuEXE](https://github.com/PikachuEXE)
172
- * Fernando Morgenstern
173
- * Tomáš Horáček
174
- * Joakim Kolsjö
175
-
176
- ## License
177
-
178
- [MIT](LICENSE.txt)
data/Rakefile DELETED
@@ -1,6 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
-
4
- RSpec::Core::RakeTask.new(:spec)
5
-
6
- task :default => :spec
@@ -1,41 +0,0 @@
1
- # This benchmark tests how fast a Traco-wrapped attribute is
2
- # compared to the plain Active Record attribute.
3
-
4
- require "bundler/setup"
5
- require "benchmark/ips"
6
- require "active_record"
7
- require "traco"
8
-
9
- ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
10
-
11
- I18n.enforce_available_locales = false
12
- I18n.available_locales = [ :en, :de, :sv ]
13
- I18n.default_locale = :en
14
- I18n.locale = :sv
15
-
16
- COLUMNS = %w(title body long_title seo_title)
17
-
18
- silence_stream(STDOUT) do
19
- ActiveRecord::Schema.define(version: 0) do
20
- create_table :posts, force: true do |t|
21
- I18n.available_locales.each do |locale|
22
- COLUMNS.each do |column|
23
- t.string "#{column}_#{locale}"
24
- end
25
- end
26
- end
27
- end
28
- end
29
-
30
- class Post < ActiveRecord::Base
31
- translates *COLUMNS
32
- end
33
-
34
- post = Post.new(title_en: "hello", title_sv: "Hej")
35
-
36
- Benchmark.ips do |x|
37
- x.report("activerecord") { post.title_sv }
38
- x.report("traco") { post.title }
39
-
40
- x.compare!
41
- end
@@ -1,12 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "activerecord", "~> 4.2.0"
6
- gem "sqlite3", "~> 1.3.13"
7
-
8
- group :benchmark do
9
- gem "benchmark-ips"
10
- end
11
-
12
- gemspec path: "../"
@@ -1,12 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "activerecord", "~> 5.0.0"
6
- gem "sqlite3", "~> 1.3.13"
7
-
8
- group :benchmark do
9
- gem "benchmark-ips"
10
- end
11
-
12
- gemspec path: "../"
@@ -1,12 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "activerecord", "~> 5.1.0"
6
- gem "sqlite3", "~> 1.3.13"
7
-
8
- group :benchmark do
9
- gem "benchmark-ips"
10
- end
11
-
12
- gemspec path: "../"
@@ -1,11 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "activerecord", "~> 5.2.0"
6
-
7
- group :benchmark do
8
- gem "benchmark-ips"
9
- end
10
-
11
- gemspec path: "../"
@@ -1,11 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "activerecord", "~> 6.0.3.1"
6
-
7
- group :benchmark do
8
- gem "benchmark-ips"
9
- end
10
-
11
- gemspec path: "../"
@@ -1,11 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "activerecord", "~> 6.1.0"
6
-
7
- group :benchmark do
8
- gem "benchmark-ips"
9
- end
10
-
11
- gemspec path: "../"
data/traco.gemspec DELETED
@@ -1,28 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "traco/version"
4
-
5
- Gem::Specification.new do |s|
6
- s.name = "traco"
7
- s.version = Traco::VERSION
8
- s.authors = ["Henrik Nyh"]
9
- s.email = ["henrik@barsoom.se"]
10
- s.homepage = ""
11
- s.summary = "Translatable columns for Rails 4.2 or better, stored in the model table itself."
12
- s.license = "MIT"
13
-
14
- s.files = `git ls-files`.split("\n")
15
- s.test_files = `git ls-files -- spec/*`.split("\n")
16
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
- s.require_paths = ["lib"]
18
-
19
- s.required_ruby_version = ">= 2.3.0"
20
-
21
- s.add_dependency "activerecord", ">= 4.2"
22
-
23
- s.add_development_dependency "sqlite3"
24
-
25
- s.add_development_dependency "rake"
26
- s.add_development_dependency "rspec"
27
- s.add_development_dependency "appraisal"
28
- end