Class: Sequencescape::Api
- Inherits:
-
Object
- Object
- Sequencescape::Api
- Extended by:
- ConnectionFactory::Helpers
- Includes:
- BasicErrorHandling
- Defined in:
- lib/sequencescape-api/core.rb,
lib/sequencescape-api/errors.rb,
lib/sequencescape-api/version.rb
Defined Under Namespace
Modules: Actions, Associations, BasicErrorHandling, Composition, ErrorHandling, FinderMethods, GeneralError, Rails Classes: ConnectionFactory, JsonError, ModifyingHandler, PageOfResults, Resource, ResourceInvalid, ResourceModelProxy, Version1, Version2
Constant Summary collapse
- Error =
Class.new(StandardError)
- VERSION =
"0.3.7"
Instance Attribute Summary collapse
-
#capabilities ⇒ Object
readonly
Returns the value of attribute capabilities.
Instance Method Summary collapse
-
#initialize(options = {}) ⇒ Api
constructor
A new instance of Api.
- #inspect ⇒ Object
- #model(name) ⇒ Object
- #read_uuid(uuid, handler) ⇒ Object
- #respond_to?(name, include_private = false) ⇒ Boolean
- #success(json) ⇒ Object
Methods included from ConnectionFactory::Helpers
connection_factory, connection_factory=
Methods included from BasicErrorHandling
#missing, #redirection, #unauthenticated
Constructor Details
#initialize(options = {}) ⇒ Api
Returns a new instance of Api.
12 13 14 15 16 17 18 |
# File 'lib/sequencescape-api/core.rb', line 12 def initialize( = {}) @models, @model_namespace = {}, .delete(:namespace) || Sequencescape @model_namespace = @model_namespace.constantize if @model_namespace.is_a?(String) @connection = self.class.connection_factory.create().tap do |connection| connection.root(self) end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object (protected)
31 32 33 34 |
# File 'lib/sequencescape-api/core.rb', line 31 def method_missing(name, *args, &block) return super unless @models.keys.include?(name.to_s) ResourceModelProxy.new(self, model(name), @models[name.to_s]) end |
Instance Attribute Details
#capabilities ⇒ Object (readonly)
Returns the value of attribute capabilities.
20 21 22 |
# File 'lib/sequencescape-api/core.rb', line 20 def capabilities @capabilities end |
Instance Method Details
#inspect ⇒ Object
60 61 62 |
# File 'lib/sequencescape-api/core.rb', line 60 def inspect "#<Sequencescape::Api @connection=#{@connection.inspect}>" end |
#model(name) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/sequencescape-api/core.rb', line 37 def model(name) parts = name.to_s.split('::').map(&:classify) raise StandardError, "#{name.inspect} is rooted and that is not supported" if parts.first.blank? parts.inject(@model_namespace) { |context, part| context.const_get(part) } rescue NameError => missing_constant_in_user_specified_namespace_fallback raise if @model_namespace == ::Sequencescape parts.inject([ ::Sequencescape, @model_namespace ]) do |(source, dest), part| const_from_source = source.const_get(part) if dest.const_defined?(part) [ const_from_source, dest.const_get(part) ] else [ const_from_source, dest.const_set(part, const_from_source) ] end end.last end |
#read_uuid(uuid, handler) ⇒ Object
23 24 25 |
# File 'lib/sequencescape-api/core.rb', line 23 def read_uuid(uuid, handler) read(@connection.url_for_uuid(uuid), handler) end |
#respond_to?(name, include_private = false) ⇒ Boolean
27 28 29 |
# File 'lib/sequencescape-api/core.rb', line 27 def respond_to?(name, include_private = false) super || @models.keys.include?(name.to_s) end |
#success(json) ⇒ Object
55 56 57 58 |
# File 'lib/sequencescape-api/core.rb', line 55 def success(json) @capabilities = Sequencescape::Api.const_get("Version#{json.delete('revision') || 1}").new @models = json.each_with_object({}) { |(k, v), models| models[k.to_s.singularize] = v['actions'] } end |