Module: Workarea::Api::Admin::Swagger
Instance Method Summary collapse
- #add_fields(klass, dsl) ⇒ Object
- #add_relations(klass, dsl) ⇒ Object
- #add_validators(klass, dsl) ⇒ Object
- #generate! ⇒ Object
- #klasses ⇒ Object
- #models ⇒ Object
Instance Method Details
#add_fields(klass, dsl) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/workarea/api/admin/swagger.rb', line 25 def add_fields(klass, dsl) klass.fields.each do |name, | next if name == '_type' default_value = if .default_val.is_a?(Proc) nil else .default_val end dsl.property name do case .type.to_s when 'BSON::ObjectId' key :type, :string when 'Date' key :type, :string key :format, :date key :default, default_value.as_json if default_value.present? when 'Time' key :type, :string key :format, 'date-time' key :default, default_value.as_json if default_value.present? when 'Array' key :type, :array key :default, default_value.to_a if default_value.present? items { key :type, :string } when 'Hash' key :type, :object key :additionalProperties, true key :default, default_value.to_h if default_value.present? when 'Boolean', 'Mongoid::Boolean' key :type, :boolean key :default, !!default_value if default_value.present? when 'Integer' key :type, :integer key :default, default_value.to_i if default_value.present? else key :type, :string key :default, default_value.to_s if default_value.present? end end end end |
#add_relations(klass, dsl) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/workarea/api/admin/swagger.rb', line 68 def add_relations(klass, dsl) klass.relations.values.select(&:embedded?).each do || dsl.property .name do if .many? key :type, :array items { key :'$ref', .klass.name } else key :'$ref', .klass.name end end end end |
#add_validators(klass, dsl) ⇒ Object
81 82 83 84 85 86 87 88 89 |
# File 'lib/workarea/api/admin/swagger.rb', line 81 def add_validators(klass, dsl) required_attributes = klass .validators .select { |v| v.is_a?(Mongoid::Validatable::PresenceValidator) } .flat_map(&:attributes) .select { |a| klass.fields.key?(a) } dsl.key :required, required_attributes if required_attributes.any? end |
#generate! ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/workarea/api/admin/swagger.rb', line 91 def generate! models.each do |klass| klass.include(::Swagger::Blocks) klass.instance_eval do swagger_schema klass.name do Swagger.add_validators(klass, self) Swagger.add_fields(klass, self) Swagger.add_relations(klass, self) end end end end |
#klasses ⇒ Object
21 22 23 |
# File 'lib/workarea/api/admin/swagger.rb', line 21 def klasses models + Workarea::Api::Admin::ApplicationController.subclasses end |
#models ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/workarea/api/admin/swagger.rb', line 7 def models @models ||= begin result = Mongoid.models.select { |k| k.name.starts_with?('Workarea') } result.reject! do |klass| Workarea.config.api_admin_ignore_definitions.any? { |d| klass.name =~ d } end result += result.flat_map(&:subclasses) result += [Mongoid::DocumentPath::Node] result end end |