Comments (4)
Btw this could be more of an ActiveJob problem, just tell me if this belongs to the Rails repository.
from globalid.
I don't know if it is a good idea to include this behavior by default. Right now I think you can implement your own to_global_id
implementation.
from globalid.
Yeah, I don't see this in Global ID directly. I'd probably create some sort of wrapper model that takes a method or class and implements find. Good luck ❤️
from globalid.
Just for the record, and if anybody else needs something similar:
Solved it for now using this dirty (overwriting private methods 👎) module:
# class_and_method_arguments.rb
require 'active_job/arguments'
module ActiveJob
module ClassAndMethodArguments
def serialize_argument(argument)
case argument
when Class, Module
URI::GID.build(app: GlobalID.app, model_name: argument.name, model_id: :itself).to_s
when Method
URI::GID.build(app: GlobalID.app, model_name: argument.receiver.name, model_id: argument.name).to_s
else
super
end
end
def deserialize_argument(argument)
case argument
when String
gid = URI::GID.parse(argument)
# GID probably references an Model instance,
# when model_id starts with numeric characters.
case gid.model_id
when /^\d+/
super
when 'itself'
gid.model_name.constantize
else
gid.model_name.constantize.method(gid.model_id)
end
else
super
end
rescue URI::BadURIError
super
end
end
Arguments.send :extend, ClassAndMethodArguments
end
# class_and_method_arguments_test.rb
require_relative '../../test_helper'
module ActiveJob
class ClassAndMethodArgumentsTest < Minitest::Test
def test_classes
argument = [ActiveJob::Base]
assert_equal argument, Arguments.deserialize(Arguments.serialize(argument))
end
def test_modules
argument = [ActiveJob]
assert_equal argument, Arguments.deserialize(Arguments.serialize(argument))
end
def test_methods
argument = [ActiveJob::Base.method(:new)]
assert_equal argument, Arguments.deserialize(Arguments.serialize(argument))
end
end
end
from globalid.
Related Issues (20)
- Error while trying to deserialize arguments: uninitialized constant GlobalID::Locator HOT 10
- expires_in does not work in initializer properly
- Test failed with rails 5.2 HOT 1
- New release please? HOT 2
- Test failures HOT 1
- expires_in does not work HOT 1
- Cannot globally default to non-expiring ids by setting config.global_id.expires_in to nil
- What are some potential ways to misuse signed Global IDs? HOT 1
- [Suggestion] Allow different primary_ids such as UUID HOT 5
- [Suggestion] Add support for eager loading optionally HOT 4
- Preferred way to check if a Signed GlobalID is expired? HOT 4
- Raise error on unknown options HOT 7
- Is there a way to limit how many times a sgid can be used? HOT 1
- Bug or breaking change? Model class must now implement `.primary_key` HOT 9
- SignedGlobalID: Consider re-adding the ability to use the old serialization format HOT 1
- Consider adding a request-specific expires_at HOT 1
- Idea: Locating embedded resources
- Efficient Object Parsing: Redis-Based Global Object Management for Model ID-Independent Operations
- ActionText::Richtext attachments are broken after upgrading to 1.2.0 HOT 1
- Custom locator raises NameError when class name not defined HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from globalid.