futurism 0.3.2 → 0.5.1

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: c5a13955e5c2902320a9eb601cd12058c16782a4002ec2c05ca1dff9eddd3190
4
- data.tar.gz: 636b6c0b298bb686600026d5f065190e2c94edec85a25c0afa715891841c0b38
3
+ metadata.gz: 28d6dcb8e42dba12b2e5064b8734578bffbd9c2ec65418361147ebe381369eab
4
+ data.tar.gz: 4356920e35812c99ead70f5ac3729cd9cb3d7b9e711ab9ee1f0e4b98d6524289
5
5
  SHA512:
6
- metadata.gz: ee386095ed1c02325e6eea34b0f8a85e67709a0a4b17d5705de035cf7bac667487687a99135654f15bc24f202b81af9d6320d70b61c296279e6c8bc437fc9d96
7
- data.tar.gz: 8e73598941f69c36aac9e2b53536369e1cb689a50e76986692c37cc04fca2d253abe7dfb7b3416fa657f0bdbc29f7d34aac4920ec5b9ecff3ce44f4368e672c6
6
+ metadata.gz: 5b67fcc1166aed81f6f791ed1253d2cc506f2dbdab8f0267eac4fce2983d7923284781f272e29e175aff82214eb4874119d2b3a98900195e345aca8b828a0ad1
7
+ data.tar.gz: '009c498af95bef5c56c76e5b026b60979a58bb5edaece53005664f75020254108af0d523ffda646af05118bce1f2251aea0600abf6e554cbcc89245dcdca933c'
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Futurism
2
2
  [![Twitter follow](https://img.shields.io/twitter/follow/julian_rubisch?style=social)](https://twitter.com/julian_rubisch)
3
3
  <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
4
- [![All Contributors](https://img.shields.io/badge/all_contributors-10-orange.svg?style=flat-square)](#contributors-)
4
+ [![All Contributors](https://img.shields.io/badge/all_contributors-12-orange.svg?style=flat-square)](#contributors-)
5
5
  <!-- ALL-CONTRIBUTORS-BADGE:END -->
6
6
  Lazy-load Rails partials via CableReady
7
7
 
@@ -10,6 +10,25 @@ Lazy-load Rails partials via CableReady
10
10
  <img src="https://user-images.githubusercontent.com/4352208/88374198-9e6f3500-cd99-11ea-804b-0216ed320eff.jpg" alt="birmingham-museums-trust-GrvC6MI-z4w-unsplash" width="50%" align="center"/>
11
11
  <span>Photo by <a href="https://unsplash.com/@birminghammuseumstrust?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Birmingham Museums Trust</a> on <a href="https://unsplash.com/s/photos/futurism?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></span>
12
12
 
13
+ ## Table of Contents
14
+
15
+ - [Table of Contents](#table-of-contents)
16
+ - [Facts](#facts)
17
+ - [Browser Support](#browser-support)
18
+ - [Usage](#usage)
19
+ - [API](#api)
20
+ - [Resource](#resource)
21
+ - [Explicit Partial](#explicit-partial)
22
+ - [HTML Options](#html-options)
23
+ - [Events](#events)
24
+ - [Installation](#installation)
25
+ - [Manual Installation](#manual-installation)
26
+ - [Authentication](#authentication)
27
+ - [Gotchas](#gotchas)
28
+ - [Contributing](#contributing)
29
+ - [License](#license)
30
+ - [Contributors](#contributors)
31
+
13
32
  ## Facts
14
33
  - only one dependency: CableReady
15
34
  - bundle size (without CableReady) is around [~1.04kB](https://bundlephobia.com/result?p=@minthesize/futurism@0.1.3)
@@ -155,7 +174,7 @@ $ bin/yarn add @minthesize/futurism
155
174
  In your `app/javascript/channels/index.js`, add the following
156
175
 
157
176
  ```js
158
- import * as Futurism from '@minthesize/futurism''
177
+ import * as Futurism from '@minthesize/futurism'
159
178
 
160
179
  import consumer from './consumer'
161
180
 
@@ -163,6 +182,39 @@ Futurism.initializeElements()
163
182
  Futurism.createSubscription(consumer)
164
183
  ```
165
184
 
185
+ ## Authentication
186
+ For authentication, you can rely on ActionCable identifiers, for example, if you use Devise:
187
+
188
+ ```ruby
189
+ module ApplicationCable
190
+ class Connection < ActionCable::Connection::Base
191
+ identified_by :current_user
192
+
193
+ def connect
194
+ self.current_user = env["warden"].user || reject_unauthorized_connection
195
+ end
196
+ end
197
+ end
198
+ ```
199
+
200
+ The [Stimulus Reflex Docs](https://docs.stimulusreflex.com/authentication) have an excellent section about all sorts of authentication.
201
+
202
+ ## Gotchas
203
+
204
+ ### ActiveStorage URLs aren't correct in development
205
+
206
+ Out of the box, Rails will prefix generated urls with `http://example.org` rather than `http://localhost`, much like ActionMailer. To amend this, add
207
+
208
+ ```ruby
209
+ # config/environments/development.rb
210
+ config.action_controller.default_url_options = {host: "localhost", port: 3000}
211
+
212
+ # config/environments/production.rb
213
+ config.action_controller.default_url_options = {host: "mysite.com"}
214
+ ```
215
+
216
+ to your environments.
217
+
166
218
  ## Contributing
167
219
 
168
220
  ## License
@@ -182,13 +234,15 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
182
234
  <td align="center"><a href="https://ParamagicDev.github.io/portfolio"><img src="https://avatars2.githubusercontent.com/u/26425882?v=4" width="100px;" alt=""/><br /><sub><b>Konnor Rogers</b></sub></a><br /><a href="https://github.com/julianrubisch/futurism/commits?author=ParamagicDev" title="Code">💻</a></td>
183
235
  <td align="center"><a href="https://www.andrewm.codes"><img src="https://avatars1.githubusercontent.com/u/18423853?v=4" width="100px;" alt=""/><br /><sub><b>Andrew Mason</b></sub></a><br /><a href="#maintenance-andrewmcodes" title="Maintenance">🚧</a></td>
184
236
  <td align="center"><a href="http://gorails.com"><img src="https://avatars1.githubusercontent.com/u/67093?v=4" width="100px;" alt=""/><br /><sub><b>Chris Oliver</b></sub></a><br /><a href="https://github.com/julianrubisch/futurism/commits?author=excid3" title="Code">💻</a> <a href="https://github.com/julianrubisch/futurism/pulls?q=is%3Apr+reviewed-by%3Aexcid3" title="Reviewed Pull Requests">👀</a></td>
185
- <td align="center"><a href="https://github.com/leastbad"><img src="https://avatars2.githubusercontent.com/u/38150464?v=4" width="100px;" alt=""/><br /><sub><b>leastbad</b></sub></a><br /><a href="https://github.com/julianrubisch/futurism/commits?author=leastbad" title="Code">💻</a></td>
237
+ <td align="center"><a href="https://github.com/leastbad"><img src="https://avatars2.githubusercontent.com/u/38150464?v=4" width="100px;" alt=""/><br /><sub><b>leastbad</b></sub></a><br /><a href="https://github.com/julianrubisch/futurism/commits?author=leastbad" title="Code">💻</a> <a href="https://github.com/julianrubisch/futurism/pulls?q=is%3Apr+reviewed-by%3Aleastbad" title="Reviewed Pull Requests">👀</a></td>
186
238
  <td align="center"><a href="http://code.digimonkey.com"><img src="https://avatars0.githubusercontent.com/u/74207?v=4" width="100px;" alt=""/><br /><sub><b>M. E. Patterson</b></sub></a><br /><a href="https://github.com/julianrubisch/futurism/issues?q=author%3Amepatterson" title="Bug reports">🐛</a></td>
187
239
  </tr>
188
240
  <tr>
189
241
  <td align="center"><a href="http://fractaledmind.com"><img src="https://avatars3.githubusercontent.com/u/5077225?v=4" width="100px;" alt=""/><br /><sub><b>Stephen Margheim</b></sub></a><br /><a href="https://github.com/julianrubisch/futurism/commits?author=fractaledmind" title="Code">💻</a></td>
190
242
  <td align="center"><a href="http://hass.codes"><img src="https://avatars2.githubusercontent.com/u/1064205?v=4" width="100px;" alt=""/><br /><sub><b>Hassanin Ahmed</b></sub></a><br /><a href="https://github.com/julianrubisch/futurism/commits?author=sas1ni69" title="Code">💻</a></td>
191
243
  <td align="center"><a href="https://marcoroth.dev"><img src="https://avatars2.githubusercontent.com/u/6411752?v=4" width="100px;" alt=""/><br /><sub><b>Marco Roth</b></sub></a><br /><a href="https://github.com/julianrubisch/futurism/commits?author=marcoroth" title="Code">💻</a></td>
244
+ <td align="center"><a href="https://viedit.com"><img src="https://avatars1.githubusercontent.com/u/49990587?v=4" width="100px;" alt=""/><br /><sub><b>Viedit com</b></sub></a><br /><a href="https://github.com/julianrubisch/futurism/commits?author=vieditcom" title="Documentation">📖</a></td>
245
+ <td align="center"><a href="http://scottbarrow.ca"><img src="https://avatars2.githubusercontent.com/u/5571736?v=4" width="100px;" alt=""/><br /><sub><b>Scott Barrow</b></sub></a><br /><a href="https://github.com/julianrubisch/futurism/commits?author=scottbarrow" title="Code">💻</a></td>
192
246
  </tr>
193
247
  </table>
194
248
 
@@ -2,25 +2,46 @@ module Futurism
2
2
  class Channel < ActionCable::Channel::Base
3
3
  include CableReady::Broadcaster
4
4
 
5
+ def stream_name
6
+ ids = connection.identifiers.map { |identifier| send(identifier).try(:id) || send(identifier) }
7
+ [
8
+ params[:channel],
9
+ ids.select(&:present?).join(";")
10
+ ].select(&:present?).join(":")
11
+ end
12
+
5
13
  def subscribed
6
- stream_from "Futurism::Channel"
14
+ stream_from stream_name
7
15
  end
8
16
 
9
17
  def receive(data)
10
- resources = data["signed_params"].map { |signed_params|
11
- [signed_params, Rails.application.message_verifier("futurism").verify(signed_params)]
12
- }
18
+ resources = data.fetch_values("signed_params", "sgids") { |key| [nil] }.transpose
13
19
 
14
- ApplicationController.renderer.instance_variable_set(:@env, connection.env)
20
+ new_env = connection.env.merge(ApplicationController.renderer.instance_variable_get(:@env))
21
+ ApplicationController.renderer.instance_variable_set(:@env, new_env)
15
22
 
16
- resources.each do |signed_params, resource|
17
- cable_ready["Futurism::Channel"].outer_html(
18
- selector: "[data-signed-params='#{signed_params}']",
19
- html: ApplicationController.render(resource)
23
+ resources.each do |signed_params, sgid|
24
+ selector = "[data-signed-params='#{signed_params}']"
25
+ selector << "[data-sgid='#{sgid}']" if sgid.present?
26
+ cable_ready[stream_name].outer_html(
27
+ selector: selector,
28
+ html: ApplicationController.render(resource(signed_params: signed_params, sgid: sgid))
20
29
  )
21
30
  end
22
31
 
23
32
  cable_ready.broadcast
24
33
  end
34
+
35
+ private
36
+
37
+ def resource(signed_params:, sgid:)
38
+ return GlobalID::Locator.locate_signed(sgid) if sgid.present?
39
+
40
+ Rails
41
+ .application
42
+ .message_verifier("futurism")
43
+ .verify(signed_params)
44
+ .deep_transform_values { |value| value.is_a?(String) && value.start_with?("gid://") ? GlobalID::Locator.locate(value) : value }
45
+ end
25
46
  end
26
47
  end
@@ -2,25 +2,46 @@ module Futurism
2
2
  class Channel < ActionCable::Channel::Base
3
3
  include CableReady::Broadcaster
4
4
 
5
+ def stream_name
6
+ ids = connection.identifiers.map { |identifier| send(identifier).try(:id) || send(identifier) }
7
+ [
8
+ params[:channel],
9
+ ids.select(&:present?).join(";")
10
+ ].select(&:present?).join(":")
11
+ end
12
+
5
13
  def subscribed
6
- stream_from "Futurism::Channel"
14
+ stream_from stream_name
7
15
  end
8
16
 
9
17
  def receive(data)
10
- resources = data["signed_params"].map { |signed_params|
11
- [signed_params, Rails.application.message_verifier("futurism").verify(signed_params)]
12
- }
18
+ resources = data.fetch_values("signed_params", "sgids") { |key| [nil] }.transpose
13
19
 
14
- ApplicationController.renderer.instance_variable_set(:@env, connection.env)
20
+ new_env = connection.env.merge(ApplicationController.renderer.instance_variable_get(:@env))
21
+ ApplicationController.renderer.instance_variable_set(:@env, new_env)
15
22
 
16
- resources.each do |signed_params, resource|
17
- cable_ready["Futurism::Channel"].outer_html(
18
- selector: "[data-signed-params='#{signed_params}']",
19
- html: ApplicationController.render(resource)
23
+ resources.each do |signed_params, sgid|
24
+ selector = "[data-signed-params='#{signed_params}']"
25
+ selector << "[data-sgid='#{sgid}']" if sgid.present?
26
+ cable_ready[stream_name].outer_html(
27
+ selector: selector,
28
+ html: ApplicationController.render(resource(signed_params: signed_params, sgid: sgid))
20
29
  )
21
30
  end
22
31
 
23
32
  cable_ready.broadcast
24
33
  end
34
+
35
+ private
36
+
37
+ def resource(signed_params:, sgid:)
38
+ return GlobalID::Locator.locate_signed(sgid) if sgid.present?
39
+
40
+ Rails
41
+ .application
42
+ .message_verifier("futurism")
43
+ .verify(signed_params)
44
+ .deep_transform_values { |value| value.is_a?(String) && value.start_with?("gid://") ? GlobalID::Locator.locate(value) : value }
45
+ end
25
46
  end
26
47
  end
@@ -6,7 +6,8 @@ module Futurism
6
6
  if records_or_string.is_a?(ActiveRecord::Base) || records_or_string.is_a?(ActiveRecord::Relation)
7
7
  futurize_active_record(records_or_string, extends: extends, placeholder: placeholder, **options)
8
8
  elsif records_or_string.is_a?(String)
9
- futurize_with_options(extends: extends, partial: records_or_string, locals: options, placeholder: placeholder)
9
+ html_options = options.delete(:html_options)
10
+ futurize_with_options(extends: extends, placeholder: placeholder, partial: records_or_string, locals: options, html_options: html_options)
10
11
  else
11
12
  futurize_with_options(extends: extends, placeholder: placeholder, **options)
12
13
  end
@@ -15,37 +16,68 @@ module Futurism
15
16
  def futurize_with_options(extends:, placeholder:, **options)
16
17
  collection = options.delete(:collection)
17
18
  if collection.nil?
18
- render_element(extends: extends, placeholder: placeholder, options: options)
19
+ Element.new(extends: extends, placeholder: placeholder, options: options).render
19
20
  else
20
21
  collection_class_name = collection.klass.name
21
22
  as = options.delete(:as) || collection_class_name.downcase
22
23
  collection.map { |record|
23
- render_element(extends: extends, placeholder: placeholder, options: options.deep_merge(locals: {as.to_sym => record}))
24
+ Element.new(extends: extends, placeholder: placeholder, options: options.deep_merge(locals: {as.to_sym => record})).render
24
25
  }.join.html_safe
25
26
  end
26
27
  end
27
28
 
28
29
  def futurize_active_record(records, extends:, placeholder:, **options)
29
30
  Array(records).map { |record|
30
- render_element(extends: extends, placeholder: placeholder, options: options.merge(model: record))
31
+ Element.new(extends: extends, options: options.merge(model: record), placeholder: placeholder).render
31
32
  }.join.html_safe
32
33
  end
33
34
 
34
- def render_element(extends:, options:, placeholder:)
35
- html_options = options.delete(:html_options) || {}
36
- model_or_options = options.delete(:model) || options
37
- case extends
38
- when :li
39
- content_tag :li, placeholder, {data: {signed_params: futurism_signed_params(model_or_options)}, is: "futurism-li"}.merge(html_options)
40
- when :tr
41
- content_tag :tr, placeholder, {data: {signed_params: futurism_signed_params(model_or_options)}, is: "futurism-table-row"}.merge(html_options)
42
- else
43
- content_tag :"futurism-element", placeholder, {data: {signed_params: futurism_signed_params(model_or_options)}}.merge(html_options)
35
+ # wraps functionality for rendering a futurism element
36
+ class Element
37
+ include ActionView::Helpers
38
+
39
+ attr_reader :extends, :placeholder, :html_options, :data_attributes, :model, :options
40
+
41
+ def initialize(extends:, placeholder:, options:)
42
+ @extends = extends
43
+ @placeholder = placeholder
44
+ @html_options = options.delete(:html_options) || {}
45
+ @data_attributes = html_options.fetch(:data, {}).except(:sgid, :signed_params)
46
+ @model = options.delete(:model)
47
+ @options = data_attributes.any? ? options.merge(data: data_attributes) : options
44
48
  end
45
- end
46
49
 
47
- def futurism_signed_params(params)
48
- Rails.application.message_verifier("futurism").generate(params)
50
+ def dataset
51
+ data_attributes.merge({
52
+ signed_params: signed_params,
53
+ sgid: model && model.to_sgid.to_s
54
+ })
55
+ end
56
+
57
+ def render
58
+ case extends
59
+ when :li
60
+ content_tag :li, placeholder, html_options.deep_merge({data: dataset, is: "futurism-li"})
61
+ when :tr
62
+ content_tag :tr, placeholder, html_options.deep_merge({data: dataset, is: "futurism-table-row"})
63
+ else
64
+ content_tag :"futurism-element", placeholder, html_options.deep_merge({data: dataset})
65
+ end
66
+ end
67
+
68
+ def transformed_options
69
+ require_relative "shims/deep_transform_values" unless options.respond_to? :deep_transform_values
70
+
71
+ options.deep_transform_values do |value|
72
+ value.is_a?(ActiveRecord::Base) && !value.new_record? ? value.to_global_id.to_s : value
73
+ end
74
+ end
75
+
76
+ private
77
+
78
+ def signed_params
79
+ Rails.application.message_verifier("futurism").generate(transformed_options)
80
+ end
49
81
  end
50
82
  end
51
83
  end
@@ -1,13 +1,83 @@
1
- module FuturismHelper
2
- def futurize(records, extends: :tr, &block)
3
- placeholder = capture(&block)
4
- Array(records).map { |record|
5
- case extends
6
- when :tr
7
- content_tag :tr, placeholder, data: { sgid: record.to_sgid.to_s }, is: "futurism-table-row"
1
+ module Futurism
2
+ module Helpers
3
+ def futurize(records_or_string = nil, extends:, **options, &block)
4
+ placeholder = capture(&block)
5
+
6
+ if records_or_string.is_a?(ActiveRecord::Base) || records_or_string.is_a?(ActiveRecord::Relation)
7
+ futurize_active_record(records_or_string, extends: extends, placeholder: placeholder, **options)
8
+ elsif records_or_string.is_a?(String)
9
+ html_options = options.delete(:html_options)
10
+ futurize_with_options(extends: extends, placeholder: placeholder, partial: records_or_string, locals: options, html_options: html_options)
8
11
  else
9
- content_tag :"futurism-element", placeholder, data: { sgid: record.to_sgid.to_s }
12
+ futurize_with_options(extends: extends, placeholder: placeholder, **options)
10
13
  end
11
- }.join.html_safe
14
+ end
15
+
16
+ def futurize_with_options(extends:, placeholder:, **options)
17
+ collection = options.delete(:collection)
18
+ if collection.nil?
19
+ Element.new(extends: extends, placeholder: placeholder, options: options).render
20
+ else
21
+ collection_class_name = collection.klass.name
22
+ as = options.delete(:as) || collection_class_name.downcase
23
+ collection.map { |record|
24
+ Element.new(extends: extends, placeholder: placeholder, options: options.deep_merge(locals: {as.to_sym => record})).render
25
+ }.join.html_safe
26
+ end
27
+ end
28
+
29
+ def futurize_active_record(records, extends:, placeholder:, **options)
30
+ Array(records).map { |record|
31
+ Element.new(extends: extends, options: options.merge(model: record), placeholder: placeholder).render
32
+ }.join.html_safe
33
+ end
34
+
35
+ # wraps functionality for rendering a futurism element
36
+ class Element
37
+ include ActionView::Helpers
38
+
39
+ attr_reader :extends, :placeholder, :html_options, :data_attributes, :model, :options
40
+
41
+ def initialize(extends:, placeholder:, options:)
42
+ @extends = extends
43
+ @placeholder = placeholder
44
+ @html_options = options.delete(:html_options) || {}
45
+ @data_attributes = html_options.fetch(:data, {}).except(:sgid, :signed_params)
46
+ @model = options.delete(:model)
47
+ @options = data_attributes.any? ? options.merge(data: data_attributes) : options
48
+ end
49
+
50
+ def dataset
51
+ data_attributes.merge({
52
+ signed_params: signed_params,
53
+ sgid: model && model.to_sgid.to_s
54
+ })
55
+ end
56
+
57
+ def render
58
+ case extends
59
+ when :li
60
+ content_tag :li, placeholder, html_options.deep_merge({data: dataset, is: "futurism-li"})
61
+ when :tr
62
+ content_tag :tr, placeholder, html_options.deep_merge({data: dataset, is: "futurism-table-row"})
63
+ else
64
+ content_tag :"futurism-element", placeholder, html_options.deep_merge({data: dataset})
65
+ end
66
+ end
67
+
68
+ def transformed_options
69
+ require_relative "shims/deep_transform_values" unless options.respond_to? :deep_transform_values
70
+
71
+ options.deep_transform_values do |value|
72
+ value.is_a?(ActiveRecord::Base) ? value.to_global_id.to_s : value
73
+ end
74
+ end
75
+
76
+ private
77
+
78
+ def signed_params
79
+ Rails.application.message_verifier("futurism").generate(transformed_options)
80
+ end
81
+ end
12
82
  end
13
83
  end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Hash
4
+ # Returns a new hash with all values converted by the block operation.
5
+ # This includes the values from the root hash and from all
6
+ # nested hashes and arrays.
7
+ #
8
+ # hash = { person: { name: 'Rob', age: '28' } }
9
+ #
10
+ # hash.deep_transform_values{ |value| value.to_s.upcase }
11
+ # # => {person: {name: "ROB", age: "28"}}
12
+ def deep_transform_values(&block)
13
+ _deep_transform_values_in_object(self, &block)
14
+ end
15
+
16
+ # Destructively converts all values by using the block operation.
17
+ # This includes the values from the root hash and from all
18
+ # nested hashes and arrays.
19
+ def deep_transform_values!(&block)
20
+ _deep_transform_values_in_object!(self, &block)
21
+ end
22
+
23
+ private
24
+
25
+ # Support methods for deep transforming nested hashes and arrays.
26
+ def _deep_transform_values_in_object(object, &block)
27
+ case object
28
+ when Hash
29
+ object.transform_values { |value| _deep_transform_values_in_object(value, &block) }
30
+ when Array
31
+ object.map { |e| _deep_transform_values_in_object(e, &block) }
32
+ else
33
+ yield(object)
34
+ end
35
+ end
36
+
37
+ def _deep_transform_values_in_object!(object, &block)
38
+ case object
39
+ when Hash
40
+ object.transform_values! { |value| _deep_transform_values_in_object!(value, &block) }
41
+ when Array
42
+ object.map! { |e| _deep_transform_values_in_object!(e, &block) }
43
+ else
44
+ yield(object)
45
+ end
46
+ end
47
+ end
@@ -1,3 +1,3 @@
1
1
  module Futurism
2
- VERSION = "0.3.2"
2
+ VERSION = "0.5.1"
3
3
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: futurism
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julian Rubisch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-27 00:00:00.000000000 Z
11
+ date: 2020-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: appraisal
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -128,14 +142,14 @@ dependencies:
128
142
  requirements:
129
143
  - - ">="
130
144
  - !ruby/object:Gem::Version
131
- version: '6'
145
+ version: '5.2'
132
146
  type: :runtime
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
150
  - - ">="
137
151
  - !ruby/object:Gem::Version
138
- version: '6'
152
+ version: '5.2'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: cable_ready
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -170,6 +184,7 @@ files:
170
184
  - lib/futurism/engine.rb
171
185
  - lib/futurism/helpers.rb
172
186
  - lib/futurism/helpers.rb~
187
+ - lib/futurism/shims/deep_transform_values.rb
173
188
  - lib/futurism/version.rb
174
189
  - lib/tasks/futurism_tasks.rake
175
190
  - lib/tasks/futurism_tasks.rake~