cells 4.0.2 → 4.0.3

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
  SHA1:
3
- metadata.gz: b76f7af6aa82b7bb25811d8ee4f9234c4dab4e00
4
- data.tar.gz: df30cb687c526aeaf05f0569bb977c600d881bd1
3
+ metadata.gz: 4bee10d6791664dd2d5b07e42007b4f037d977ce
4
+ data.tar.gz: badeb19dd989fcb7e04ff0ba194392858ad654ed
5
5
  SHA512:
6
- metadata.gz: efe44290055279cd22f795672004e21764c9b20b6c79634ff6cb4524b4349da0037cc9a5b9b911e9f781f34b194cf7ccbecaaf5deb1c20344363ee958ceb7a05
7
- data.tar.gz: 641bb7d1f002bee65738623df08c331506a0fc511ca9b6bb66648b00463ca73ca7b6b99123be04082544b86c76188ef848bc76b9ef5b6c2d089baf6121dfbc08
6
+ metadata.gz: 455f05a45cf95840609675ed94044f541d0111c0b1d5c0dd2d2cf13516405d8dd666df7d7fa3280fd927fd59711395bf09a7e8b829f515519caa5fef3968f2a5
7
+ data.tar.gz: 40e74042491c83aefb0ac2a929ca5ed2c0037b489eb27beef1329415730dcd2815ae4dba413c3c74086f56872a952c410f178f995816c767d5d84e4146325a1c
@@ -1,6 +1,7 @@
1
1
  language: ruby
2
2
  rvm:
3
- # - 2.2
3
+ - ruby-head
4
+ - 2.2
4
5
  - 2.1
5
6
  - 2.0.0
6
7
  - 1.9.3
@@ -8,14 +9,22 @@ rvm:
8
9
 
9
10
  sudo: false
10
11
 
12
+ cache: bundler
13
+
11
14
  bundler_args: '--without local_development --jobs 3 --retry 3'
12
15
 
13
16
  script: bundle exec rake
14
17
 
15
- notifications:
16
- irc: "irc.freenode.org#cells"
17
18
  gemfile:
18
19
  - gemfiles/rails4.2.gemfile
19
20
  - gemfiles/rails4.1.gemfile
20
21
  - gemfiles/rails4.0.gemfile
21
22
  - gemfiles/rails3.2.gemfile
23
+
24
+ matrix:
25
+ fast_finish: true
26
+ allow_failures:
27
+ - rvm: ruby-head
28
+
29
+ before_install:
30
+ - gem update bundler
data/CHANGES.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## 4.0.3
2
+
3
+ * `Cell::Partial` now does _append_ the global partial path to its `view_paths` instead of using `unshift` and thereby removing possible custom paths.
4
+ * Adding `Cell::Translation` which allows using the `#t` helper. Thanks to @johnlane.
5
+ * Performance improvement: when inflecting the view name (90% likely to be done) the `caller` is now limited to the data we need, saving memory. Thanks @timoschilling for implementing this.
6
+ * In the `concept` helper, we no longer use `classify`, which means you can say `concept("comment/data")` and it will instantiate `Comment::Data` and not `Comment::Datum`. Thanks @firedev!
7
+
1
8
  ## 4.0.2
2
9
 
3
10
  * In Rails, include `ActionView::Helpers::FormHelper` into `ViewModel` so we already have (and pollute our cell with) `UrlHelper` and `FormTagHelper`. Helpers, so much fun.
data/Gemfile CHANGED
@@ -3,6 +3,6 @@ source "https://rubygems.org"
3
3
  gem "railties", "~> 4.2.0"
4
4
  gem "activemodel", "~> 4.2.0"
5
5
  gem "minitest", "~> 5.2"
6
- gem "cells-erb", path: "../cells-erb"
6
+ gem "cells-erb"#, path: "../cells-erb"
7
7
 
8
8
  gemspec
data/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  Cells allow you to encapsulate parts of your UI into components into _view models_. View models, or cells, are simple ruby classes that can render templates.
8
8
 
9
- Nevertheless, a cell gives you more than just a template renderer. They allow proper OOP, polymorphic builders, [nesting](#nested-cells), view inheritance, using Rails helpers, [asset packaging](http://trailblazerb.org/gems/cells/rails.html#asset-pipeline) to bundle JS, CSS or images, simple distribution via gems or Rails engines, encapsulated testing, [caching](#caching), and [integrate with Trailblazer](#concept-cells).
9
+ Nevertheless, a cell gives you more than just a template renderer. They allow proper OOP, polymorphic builders, [nesting](#nested-cells), view inheritance, using Rails helpers, [asset packaging](http://trailblazer.to/gems/cells/rails.html#asset-pipeline) to bundle JS, CSS or images, simple distribution via gems or Rails engines, encapsulated testing, [caching](#caching), and [integrate with Trailblazer](#concept-cells).
10
10
 
11
11
  ## This is not Cells 3.x!
12
12
 
@@ -32,7 +32,7 @@ CommentCell.(@comment).()
32
32
  In Rails you have the same helper API for views and controllers.
33
33
 
34
34
  ```ruby
35
- class DasboardController < ApplicationController
35
+ class DashboardController < ApplicationController
36
36
  def dashboard
37
37
  @comments = cell(:comment, collection: Comment.recent)
38
38
  @traffic = cell(:report, TrafficReport.find(1)).()
@@ -97,7 +97,7 @@ The discussed `show` view would reside in `app/cells/comment/show.haml`. However
97
97
 
98
98
  ## Invocation Styles
99
99
 
100
- In order to make a cell render, you have to call the rendering methods. While you could call the method directly, the prefered way is the _call style_.
100
+ In order to make a cell render, you have to call the rendering methods. While you could call the method directly, the preferred way is the _call style_.
101
101
 
102
102
  ```ruby
103
103
  cell(:comment, @song).() # calls CommentCell#show.
@@ -138,7 +138,7 @@ Capybara.string(html).must_have_css "h3"
138
138
 
139
139
  It is completely up to you how you test, whether it's RSpec, MiniTest or whatever. All the cell does is return HTML.
140
140
 
141
- [In Rails, there's support](http://trailblazerb.org/gems/cells/testing.html) for TestUnit, MiniTest and RSpec available, along with Capybara integration.
141
+ [In Rails, there's support](http://trailblazer.to/gems/cells/testing.html) for TestUnit, MiniTest and RSpec available, along with Capybara integration.
142
142
 
143
143
  ## Properties
144
144
 
@@ -169,7 +169,7 @@ song.title #=> "<script>Dangerous</script>"
169
169
  Comment::Cell.(song).title #=> &lt;script&gt;Dangerous&lt;/script&gt;
170
170
  ```
171
171
 
172
- Properties and escaping are [documented here](http://trailblazerb.org/gems/cells/api.html#html-escaping).
172
+ Properties and escaping are [documented here](http://trailblazer.to/gems/cells/api.html#html-escaping).
173
173
 
174
174
  ## Installation
175
175
 
@@ -296,7 +296,7 @@ end
296
296
 
297
297
  ## Asset Packaging
298
298
 
299
- Cells can easily ship with their own JavaScript, CSS and more and be part of Rails' asset pipeline. Bundling assets into a cell allows you to implement super encapsulated widgets that are stand-alone. Asset pipeline is [documented here](http://trailblazerb.org/gems/cells/rails.html#asset-pipeline).
299
+ Cells can easily ship with their own JavaScript, CSS and more and be part of Rails' asset pipeline. Bundling assets into a cell allows you to implement super encapsulated widgets that are stand-alone. Asset pipeline is [documented here](http://trailblazer.to/gems/cells/rails.html#asset-pipeline).
300
300
 
301
301
  ## Render API
302
302
 
@@ -476,7 +476,7 @@ cache :show, :if => lambda { |*| has_changed? }
476
476
  cache :show, :tags: lambda { |model, options| "comment-#{model.id}" }
477
477
  ```
478
478
 
479
- Caching is documented [here](http://trailblazerb.org/gems/cells/caching.html) and in chapter 8 of the [Trailblazer book](http://leanpub.com/trailblazer).
479
+ Caching is documented [here](http://trailblazer.to/gems/cells/caching.html) and in chapter 8 of the [Trailblazer book](http://leanpub.com/trailblazer).
480
480
 
481
481
 
482
482
  ## The Book
@@ -7,3 +7,10 @@ gem "tzinfo"
7
7
  gem "minitest", "4.7.5"
8
8
 
9
9
  gemspec :path => "../"
10
+
11
+ gem "rack-cache", "< 1.3.0", platform: :ruby_19
12
+ gem "rack-cache", "< 1.3.0", platform: :jruby
13
+ gem "test-unit", "~> 3.0", platform: :ruby_22
14
+ gem "mime-types", "< 3.0", platform: :ruby_19
15
+ gem "mime-types", "< 3.0", platform: :jruby
16
+
@@ -7,3 +7,6 @@ gem "activemodel"
7
7
  gem "minitest", "4.7.5"
8
8
 
9
9
  gemspec :path => "../"
10
+
11
+ gem "mime-types", "< 3.0", platform: :ruby_19
12
+ gem "mime-types", "< 3.0", platform: :jruby
@@ -7,3 +7,6 @@ gem "activemodel", "~> 4.1.0" #, :github => "rails/rails", :branch => "4-1-stabl
7
7
  gem "minitest", "~> 5.2"
8
8
 
9
9
  gemspec :path => "../"
10
+
11
+ gem "mime-types", "< 3.0", platform: :ruby_19
12
+ gem "mime-types", "< 3.0", platform: :jruby
@@ -4,4 +4,7 @@ gem "railties", "~> 4.2.0"
4
4
  gem "activemodel", "~> 4.2.0"
5
5
  gem "minitest", "~> 5.2"
6
6
 
7
- gemspec :path => "../"
7
+ gemspec :path => "../"
8
+
9
+ gem "mime-types", "< 3.0", platform: :ruby_19
10
+ gem "mime-types", "< 3.0", platform: :jruby
@@ -6,7 +6,7 @@ module Cell
6
6
  # TODO: this should be in Helper or something. this should be the only entry point from controller/view.
7
7
  class << self
8
8
  def class_from_cell_name(name)
9
- name.classify.constantize
9
+ name.camelize.constantize
10
10
  end
11
11
 
12
12
  def controller_path
@@ -10,8 +10,8 @@ module Cell::ViewModel::Partial
10
10
  view = parts.pop
11
11
  view = "_#{view}"
12
12
  view += ".#{options[:formats].first}" if options[:formats]
13
- prefixes = self.class.view_paths.collect { |path| parts.unshift(path).join("/") }
13
+ prefixes = self.class.view_paths.collect { |path| ([path] + parts).join("/") }
14
14
 
15
15
  options.merge!(view: view, prefixes: prefixes)
16
16
  end
17
- end
17
+ end
@@ -15,7 +15,7 @@ module Cell
15
15
  # Returns the cell instance for +name+. You may pass arbitrary options to your
16
16
  # cell.
17
17
  #
18
- # = cell(:song, title: "Creeping Out Sara").render(:show)
18
+ # = cell(:song, title: "Creeping Out Sara").(:show)
19
19
  def cell(name, *args, &block)
20
20
  controller.cell(name, *args, &block)
21
21
  end
@@ -27,7 +27,7 @@ module Cell
27
27
  template_class.new("#{prefix}/#{view}", options) # Tilt.new()
28
28
  end
29
29
 
30
- # {["comment/row/views", comment/views"][show.haml] => "Tpl:comment/view/show.haml"}
30
+ # {["comment/row/views", comment/views"]["show.haml"] => "Tpl:comment/view/show.haml"}
31
31
  class Cache
32
32
  def initialize
33
33
  @store = {}
@@ -55,4 +55,4 @@ module Cell
55
55
  end
56
56
  end
57
57
  end
58
- end
58
+ end
@@ -0,0 +1,19 @@
1
+ # NOTE: this will soon be moved to cells-rails.
2
+ module Cell::Translation
3
+ def self.included(includer)
4
+ super
5
+ includer.inheritable_attr :translation_path
6
+ end
7
+
8
+ def initialize(*)
9
+ super
10
+ @virtual_path = translation_path
11
+ end
12
+
13
+ private
14
+ # If you override this to change this path, please report it on the trailblazer/chat gitter channel,
15
+ # so we can find out best practices.
16
+ def translation_path
17
+ self.class.translation_path or controller_path.gsub("/", ".")
18
+ end
19
+ end
@@ -1,3 +1,3 @@
1
1
  module Cell
2
- VERSION = "4.0.2"
2
+ VERSION = "4.0.3"
3
3
  end
@@ -1,4 +1,3 @@
1
- # TODO: warn when using ::property but not passing in model in constructor.
2
1
  module Cell
3
2
  class ViewModel
4
3
  extend Abstract
@@ -21,7 +20,6 @@ module Cell
21
20
  end
22
21
  end
23
22
 
24
-
25
23
  include Prefixes
26
24
  extend SelfContained
27
25
  extend Util
@@ -32,7 +30,6 @@ module Cell
32
30
 
33
31
  attr_reader :model
34
32
 
35
-
36
33
  module Helpers
37
34
  # Constantizes name, call builders and returns instance.
38
35
  def cell(name, *args, &block) # classic Rails fuzzy API.
@@ -44,12 +41,11 @@ module Cell
44
41
  def render_collection(array, options) # private.
45
42
  method = options.delete(:method) || :show
46
43
  join = options.delete(:collection_join)
47
- array.collect { |model| build(*[model, options]).call(method) }.join(join).html_safe
44
+ array.collect { |model| build(model, options).call(method) }.join(join).html_safe
48
45
  end
49
46
  end
50
47
  extend Helpers
51
48
 
52
-
53
49
  class << self
54
50
  def property(*names)
55
51
  delegates :model, *names # Uber::Delegates.
@@ -75,7 +71,7 @@ module Cell
75
71
 
76
72
  private
77
73
  def class_from_cell_name(name)
78
- "#{name}_cell".classify.constantize
74
+ "#{name}_cell".camelize.constantize
79
75
  end
80
76
  end
81
77
 
@@ -84,7 +80,6 @@ module Cell
84
80
  self.class.cell(name, model, options.merge(controller: parent_controller))
85
81
  end
86
82
 
87
-
88
83
  def initialize(model=nil, options={}) # in Ruby 2: def m(model: nil, controller:nil, **options) that'll make the controller optional.
89
84
  # options = options.clone # DISCUSS: this could be time consuming when rendering many of em.
90
85
  @parent_controller = options[:controller] # TODO: filter out controller in a performant way.
@@ -108,13 +103,13 @@ module Cell
108
103
 
109
104
  # render :show
110
105
  def render(options={})
111
- options = normalize_options(options, caller) # TODO: call render methods with call(:show), call(:comments) instead of directly #comments?
106
+ options = normalize_options(options)
112
107
  render_to_string(options)
113
108
  end
114
109
 
115
110
  private
116
111
  def render_to_string(options)
117
- template = find_template(options) # TODO: cache template with path/lookup keys.
112
+ template = find_template(options)
118
113
 
119
114
  content = render_template(template, options)
120
115
 
@@ -123,7 +118,7 @@ module Cell
123
118
  end
124
119
 
125
120
  def render_state(*args)
126
- send(*args)
121
+ __send__(*args)
127
122
  end
128
123
 
129
124
  def with_layout(options, content)
@@ -140,7 +135,7 @@ module Cell
140
135
  end
141
136
 
142
137
  include Rendering
143
- # alias_method :to_s, :call # FIXME: why doesn't this work?
138
+
144
139
  def to_s
145
140
  call
146
141
  end
@@ -174,7 +169,6 @@ module Cell
174
169
  OutputBuffer.new # don't cache output_buffer, for every #render call we get a fresh one.
175
170
  end
176
171
 
177
-
178
172
  module TemplateFor
179
173
  def find_template(options)
180
174
  template_options = template_options_for(options) # imported by Erb, Haml, etc.
@@ -196,11 +190,10 @@ module Cell
196
190
  end
197
191
  include TemplateFor
198
192
 
199
-
200
- def normalize_options(options, caller) # TODO: rename to #setup_options! to be inline with Trb.
193
+ def normalize_options(options)
201
194
  options = if options.is_a?(Hash)
202
- # TODO: speedup by not doing state_for_implicit_render.
203
- {view: state_for_implicit_render(caller)}.merge(options)
195
+ options[:view] ||= state_for_implicit_render(options)
196
+ options
204
197
  else
205
198
  {view: options.to_s}
206
199
  end
@@ -218,9 +211,10 @@ module Cell
218
211
  end
219
212
  include ProcessOptions
220
213
 
221
-
222
- def state_for_implicit_render(caller)
223
- caller[0].match(/`(\w+)/)[1]
214
+ # Computes the view name from the call stack in which `render` was invoked.
215
+ def state_for_implicit_render(options)
216
+ _caller = RUBY_VERSION < "2.0" ? caller(3) : caller(3, 1) # TODO: remove case in 5.0 when dropping 1.9.
217
+ _caller[0].match(/`(\w+)/)[1]
224
218
  end
225
219
 
226
220
  include Layout
@@ -21,7 +21,15 @@ class PartialTest < MiniTest::Spec
21
21
  end
22
22
  end
23
23
 
24
+ class WithPartialAndManyViewPaths < WithPartial
25
+ self.view_paths << ['app/views']
26
+ end
27
+
24
28
  it { WithPartial.new(nil).show.must_equal "I Am Wrong And I Am Right" }
25
29
  it { WithPartial.new(nil).show_with_format.must_equal "<xml>I Am Wrong And I Am Right</xml>" }
26
30
  it { WithPartial.new(nil).show_without_partial.must_equal "Adenosine Breakdown" }
27
- end
31
+
32
+ it { WithPartialAndManyViewPaths.new(nil).show.must_equal "I Am Wrong And I Am Right" }
33
+ it { WithPartialAndManyViewPaths.new(nil).show_with_format.must_equal "<xml>I Am Wrong And I Am Right</xml>" }
34
+ it { WithPartialAndManyViewPaths.new(nil).show_without_partial.must_equal "Adenosine Breakdown" }
35
+ end
@@ -16,9 +16,15 @@ class PublicTest < MiniTest::Spec
16
16
  end
17
17
  end
18
18
 
19
+ class Songs < Cell::Concept
20
+ end
21
+
19
22
  # ViewModel.cell returns the cell instance.
20
23
  it { Cell::ViewModel.cell("public_test/song").must_be_instance_of SongCell }
21
24
 
25
+ # Concept.cell simply camelizes the string before constantizing.
26
+ it { Cell::Concept.cell("public_test/songs").must_be_instance_of Songs }
27
+
22
28
  # ViewModel.cell passes options to cell.
23
29
  it { Cell::ViewModel.cell("public_test/song", Object, genre: "Metal").initialize_args.must_equal [Object, {genre:"Metal"}] }
24
30
 
@@ -0,0 +1,45 @@
1
+ require "test_helper"
2
+ require "cells/translation"
3
+
4
+ class TranslationTest < MiniTest::Spec
5
+ class I18nCell < Cell::ViewModel
6
+ include ActionView::Helpers::TranslationHelper
7
+ include Translation
8
+
9
+ def greet_relative
10
+ t(".greeting") # gets appended to translation_test.i18n.
11
+ end
12
+
13
+ def greet_absolute
14
+ t("translation_test.i18n.greeting")
15
+ end
16
+ end
17
+
18
+ I18n.backend = I18n::Backend::KeyValue.new({})
19
+ I18n.backend.store_translations(:en,
20
+ { "translation_test.i18n.greeting" => "Translated!",
21
+ "cell.friendly.greeting" => "Hello you!" },
22
+ escape: false)
23
+
24
+ # Translate text specified by an absolute path
25
+ it { I18nCell.new.greet_absolute.must_equal "Translated!" }
26
+
27
+ # Translate text specified by an relative path
28
+ it { I18nCell.new.greet_relative.must_equal "Translated!" }
29
+
30
+
31
+ describe "::translation_path" do
32
+ class ExplicitI18NCell < Cell::ViewModel
33
+ include ActionView::Helpers::TranslationHelper
34
+ include Translation
35
+
36
+ self.translation_path = "cell.friendly"
37
+
38
+ def show
39
+ t(".greeting")
40
+ end
41
+ end
42
+
43
+ it { ExplicitI18NCell.new.().must_equal "Hello you!" }
44
+ end
45
+ end
@@ -1,6 +1,7 @@
1
1
  class FormtasticCell < Cell::ViewModel
2
2
  include ActionView::RecordIdentifier
3
3
  include Formtastic::Helpers::FormHelper
4
+ include ActionView::Helpers::FormOptionsHelper
4
5
 
5
6
  def show
6
7
  render
@@ -19,33 +19,33 @@ class ViewExtensionsTest < ActionController::TestCase
19
19
  # #concept is available in controller views.
20
20
  test "concept(..).show" do
21
21
  get :view_with_concept_with_show
22
- @response.body.must_equal "&lt;b&gt;Up For Breakfast&lt;/b&gt;" # TODO: test options/with twin.
22
+ assert_equal "&lt;b&gt;Up For Breakfast&lt;/b&gt;", @response.body # TODO: test options/with twin.
23
23
  end
24
24
 
25
25
  test "concept(..).call" do
26
26
  get :view_with_concept_with_call
27
- @response.body.must_equal "<b>A Tale That Wasn't Right</b>" # TODO: test options/with twin.
27
+ assert_equal "<b>A Tale That Wasn't Right</b>", @response.body # TODO: test options/with twin.
28
28
  end
29
29
 
30
30
  test "concept(..) without #call" do
31
31
  get :view_with_concept_without_call
32
- @response.body.must_equal "<b>A Tale That Wasn't Right</b>"
32
+ assert_equal "<b>A Tale That Wasn't Right</b>", @response.body
33
33
  end
34
34
 
35
35
  test "cell(..) with #call" do
36
36
  get :view_with_cell_with_call
37
- @response.body.must_equal "<b>A Tale That Wasn't Right</b>"
37
+ assert_equal "<b>A Tale That Wasn't Right</b>", @response.body
38
38
  end
39
39
 
40
40
  # Controller#concept
41
41
  test "Controller#concept(..).call" do
42
42
  get :action_with_concept_with_call
43
- @response.body.must_equal "<b>A Tale That Wasn't Right</b>" # TODO: test options/with twin.
43
+ assert_equal "<b>A Tale That Wasn't Right</b>", @response.body # TODO: test options/with twin.
44
44
  end
45
45
 
46
46
  # Controller#cell
47
47
  test "Controller#cell(..).call" do
48
48
  get :action_with_cell_with_call
49
- @response.body.must_equal "<b>A Tale That Wasn't Right</b>" # TODO: test options/with twin.
49
+ assert_equal "<b>A Tale That Wasn't Right</b>", @response.body # TODO: test options/with twin.
50
50
  end
51
- end
51
+ end
@@ -43,6 +43,10 @@ class SongCell < Cell::ViewModel
43
43
  render
44
44
  end
45
45
 
46
+ def send
47
+ "send"
48
+ end
49
+
46
50
  private
47
51
  def title
48
52
  "Papertiger"
@@ -65,6 +69,9 @@ class RenderTest < MiniTest::Spec
65
69
  # call(:form) renders :form
66
70
  it { SongCell.new(nil).call(:with_view_name).must_equal "Man Of Steel\n" }
67
71
 
72
+ # works with state called `send`
73
+ it { SongCell.new(nil).call(:send).must_equal "send" }
74
+
68
75
  # #call returns html_safe.
69
76
  it { SongCell.new(nil).call.must_be_instance_of ActiveSupport::SafeBuffer }
70
77
 
@@ -95,4 +102,10 @@ class RenderTest < MiniTest::Spec
95
102
  end
96
103
 
97
104
  # test inheritance
98
- # with layout and locals.
105
+
106
+ # test view: :bla and :bla
107
+ # with layout and locals.
108
+ # with layout and :text
109
+
110
+ # render with format (e.g. when using ERB for one view)
111
+ # should we allow changing the format "per run", so a cell can do .js and .haml? or should that be configurable on class level?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cells
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.2
4
+ version: 4.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-28 00:00:00.000000000 Z
11
+ date: 2015-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: uber
@@ -136,6 +136,7 @@ files:
136
136
  - lib/cell/templates.rb
137
137
  - lib/cell/test_case.rb
138
138
  - lib/cell/testing.rb
139
+ - lib/cell/translation.rb
139
140
  - lib/cell/twin.rb
140
141
  - lib/cell/util.rb
141
142
  - lib/cell/version.rb
@@ -212,6 +213,7 @@ files:
212
213
  - test/prefixes_test.rb
213
214
  - test/property_test.rb
214
215
  - test/public_test.rb
216
+ - test/rails/translation_test.rb
215
217
  - test/rails4.2/.gitignore
216
218
  - test/rails4.2/Gemfile
217
219
  - test/rails4.2/README.rdoc
@@ -330,7 +332,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
330
332
  version: '0'
331
333
  requirements: []
332
334
  rubyforge_project:
333
- rubygems_version: 2.2.2
335
+ rubygems_version: 2.4.8
334
336
  signing_key:
335
337
  specification_version: 4
336
338
  summary: View Models for Ruby and Rails.