logical_model 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.1
1
+ 0.3.2
@@ -0,0 +1,93 @@
1
+ #
2
+ # Typhoeus encodes arrays as hashes {'0' => v0, '1' => v1, .., 'n' => vN }
3
+ #
4
+ # To fix this in your rails server your should:
5
+ # in Gemfile:
6
+ # gem 'logical_model', '~> 0.3.2'
7
+ #
8
+ # in application_controller.rb:
9
+ #
10
+ # require 'typhoeus_fix/array_decoder'
11
+ # class ApplicationController < ActionController::Base
12
+ # include TyphoeusFix
13
+ # before_filter :decode_typhoeus_arrays
14
+ # end
15
+ #
16
+ module TyphoeusFix
17
+
18
+ def decode_typhoeus_arrays
19
+ deep_decode(params)
20
+ end
21
+
22
+ # Recursively decode Typhoeus encoded arrays
23
+ def deep_decode(hash)
24
+ return hash unless hash.is_a?(Hash)
25
+ hash.each_pair do |key,value|
26
+ if value.is_a?(Hash)
27
+ deep_decode(value)
28
+ hash[key] = value.decode_typhoeus_array
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ # Add Hash#is_typhoeus_array? method
35
+ class Hash
36
+
37
+ # Checks if hash is an Array encoded as a hash.
38
+ # Specifically will check for the hash to have this form: {'0' => v0, '1' => v1, .., 'n' => vN }
39
+ # @return [TrueClass]
40
+ def im_an_array_typhoeus_encoded?
41
+ return false if self.empty?
42
+ self.keys.sort == (0...self.keys.size).map{|i|i.to_s}
43
+ end
44
+
45
+ # If the hash is an array encoded by typhoeus an array is returned
46
+ # else the self is returned
47
+ #
48
+ # @see im_an_array_typhoeus_encoded?
49
+ #
50
+ # @return [Array/Hash]
51
+ def decode_typhoeus_array
52
+ if self.im_an_array_typhoeus_encoded?
53
+ Hash[self.sort].values
54
+ else
55
+ self
56
+ end
57
+ end
58
+ end
59
+
60
+
61
+
62
+ # Rack Middleware to fix Typhoeus arrays encoding
63
+ # TODO this middleware didn't work, when fixed use it and remove filter from ApplicationController
64
+ =begin
65
+ module Typhoeus
66
+ class ArraysDecoder
67
+ def initialize(app)
68
+ @app = app
69
+ end
70
+
71
+ def call(env)
72
+
73
+ params = env["action_dispatch.request.parameters"]
74
+ decode_typho_arrays(params)
75
+ env["action_dispatch.request.parameters"] = params
76
+ @app.call(env)
77
+ end
78
+
79
+ private
80
+
81
+ # Recursively decode Typhoeus encoded arrays
82
+ def decode_typho_arrays(hash)
83
+ return hash unless hash.is_a?(Hash)
84
+ hash.each_pair do |key,value|
85
+ if value.is_a?(Hash)
86
+ decode_typho_arrays(value)
87
+ hash[key] = value.decode_typhoeus_array
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ =end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "logical_model"
8
- s.version = "0.3.1"
8
+ s.version = "0.3.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Dwayne Macgowan"]
@@ -33,6 +33,7 @@ Gem::Specification.new do |s|
33
33
  "db/migrate/001_create_users.rb",
34
34
  "lib/logical_model.rb",
35
35
  "lib/safe_log.rb",
36
+ "lib/typhoeus_fix/array_decoder.rb",
36
37
  "logical_model.gemspec",
37
38
  "models/user.rb",
38
39
  "spec/client_spec.rb",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logical_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -308,6 +308,7 @@ files:
308
308
  - db/migrate/001_create_users.rb
309
309
  - lib/logical_model.rb
310
310
  - lib/safe_log.rb
311
+ - lib/typhoeus_fix/array_decoder.rb
311
312
  - logical_model.gemspec
312
313
  - models/user.rb
313
314
  - spec/client_spec.rb
@@ -329,7 +330,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
329
330
  version: '0'
330
331
  segments:
331
332
  - 0
332
- hash: 649076499
333
+ hash: -154505059
333
334
  required_rubygems_version: !ruby/object:Gem::Requirement
334
335
  none: false
335
336
  requirements: