about summary refs log tree commit diff
path: root/app/lib/activitypub/case_transform.rb
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2017-08-12 17:41:03 +0200
committerGitHub <noreply@github.com>2017-08-12 17:41:03 +0200
commitccdd5a9576819cdc95946d98fea0e3c8bbd1d626 (patch)
tree02012fef91425658dae5c5fbfe9a03fb015afc77 /app/lib/activitypub/case_transform.rb
parent40be4ea239d567845ddd0af204141fa2b7e22b15 (diff)
Add serializing/unserializing of "locked" actor attribute (#4585)
Diffstat (limited to 'app/lib/activitypub/case_transform.rb')
-rw-r--r--app/lib/activitypub/case_transform.rb24
1 files changed, 24 insertions, 0 deletions
diff --git a/app/lib/activitypub/case_transform.rb b/app/lib/activitypub/case_transform.rb
new file mode 100644
index 000000000..7f716f862
--- /dev/null
+++ b/app/lib/activitypub/case_transform.rb
@@ -0,0 +1,24 @@
+# frozen_string_literal: true
+
+module ActivityPub::CaseTransform
+  class << self
+    def camel_lower_cache
+      @camel_lower_cache ||= {}
+    end
+
+    def camel_lower(value)
+      case value
+      when Array then value.map { |item| camel_lower(item) }
+      when Hash then value.deep_transform_keys! { |key| camel_lower(key) }
+      when Symbol then camel_lower(value.to_s).to_sym
+      when String
+        camel_lower_cache[value] ||= if value.start_with?('_:')
+                                       '_:' + value.gsub(/\A_:/, '').underscore.camelize(:lower)
+                                     else
+                                       value.underscore.camelize(:lower)
+                                     end
+      else value
+      end
+    end
+  end
+end