Class: FactoryBurgers::Middleware::Build
- Inherits:
-
Object
- Object
- FactoryBurgers::Middleware::Build
- Defined in:
- lib/factory_burgers/middleware/build.rb
Overview
Build a requested resource and return data for follow-up actions TODO: extract controller methods into controller-like classes
Instance Method Summary collapse
- #attribute_overrides(attribute_items) ⇒ Object
- #build(env) ⇒ Object
- #call(env) ⇒ Object
- #get_resource_owner(owner_type, owner_id) ⇒ Object
- #log_error(error) ⇒ Object
- #logger ⇒ Object
- #paramters(env) ⇒ Object
- #request(env) ⇒ Object
Instance Method Details
#attribute_overrides(attribute_items) ⇒ Object
39 40 41 42 43 44 |
# File 'lib/factory_burgers/middleware/build.rb', line 39 def attribute_overrides(attribute_items) return [] if attribute_items.nil? attribute_items = attribute_items.select { |attr| attr["name"].present? } return attribute_items.to_h { |attr| [attr["name"], attr["value"]] } end |
#build(env) ⇒ Object
22 23 24 25 26 27 28 29 |
# File 'lib/factory_burgers/middleware/build.rb', line 22 def build(env) params = paramters(env) factory = params.fetch("factory") traits = params["traits"]&.keys attributes = attribute_overrides(params["attributes"]) owner = get_resource_owner(params["owner_type"], params["owner_id"]) return FactoryBurgers::Builder.new(owner).build(factory, traits, attributes, as: params["owner_association"]) end |
#call(env) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/factory_burgers/middleware/build.rb', line 9 def call(env) resource = build(env) object_data = FactoryBurgers::Models::FactoryOutput.new(resource).data response_data = {ok: true, data: object_data} return [200, {"Content-Type" => "application/json"}, [JSON.dump(response_data)]] rescue ActiveRecord::RecordInvalid => err log_error(err) return [422, {"Content-Type" => "application/json"}, [JSON.dump({ok: false, error: err.})]] rescue StandardError => err log_error(err) return [500, {"Content-Type" => "application/json"}, [JSON.dump({ok: false, error: err.})]] end |
#get_resource_owner(owner_type, owner_id) ⇒ Object
46 47 48 49 50 51 52 53 |
# File 'lib/factory_burgers/middleware/build.rb', line 46 def get_resource_owner(owner_type, owner_id) return nil if owner_type.blank? || owner_id.blank? klass = owner_type.constantize invalid_resource(klass) if !valid_resource?(klass) return klass.find(owner_id) end |
#log_error(error) ⇒ Object
55 56 57 |
# File 'lib/factory_burgers/middleware/build.rb', line 55 def log_error(error) logger.error("#{error.class}: #{error.}\n" + error.backtrace&.join("\n").to_s) end |
#logger ⇒ Object
59 60 61 |
# File 'lib/factory_burgers/middleware/build.rb', line 59 def logger @logger ||= Logger.new($stdout) end |
#paramters(env) ⇒ Object
35 36 37 |
# File 'lib/factory_burgers/middleware/build.rb', line 35 def paramters(env) request(env).params end |
#request(env) ⇒ Object
31 32 33 |
# File 'lib/factory_burgers/middleware/build.rb', line 31 def request(env) Rack::Request.new(env) end |