Class: ApipieDSL::Application
- Inherits:
-
Object
- Object
- ApipieDSL::Application
- Defined in:
- lib/apipie_dsl/application.rb
Defined Under Namespace
Classes: Engine
Instance Attribute Summary collapse
-
#class_descriptions ⇒ Object
readonly
Returns the value of attribute class_descriptions.
-
#refs ⇒ Object
readonly
Returns the value of attribute refs.
Instance Method Summary collapse
- #available_versions ⇒ Object
- #class_versions(klass) ⇒ Object
- #define_class_description(klass, version, dsl_data = {}) ⇒ Object
- #define_method_description(klass, method_name, dsl_data) ⇒ Object
- #define_param_group(klass, name, &block) ⇒ Object
- #define_prop_group(klass, name, &block) ⇒ Object
- #docs(version, class_name, method_name, lang, section = nil) ⇒ Object
- #dsl_classes_paths ⇒ Object
-
#get_class_description(klass, version = nil) ⇒ Object
options: => “io” => “v2#io” => V2::IO.
-
#get_class_descriptions(klass) ⇒ Object
get all versions of class description.
- #get_class_name(klass) ⇒ Object
-
#get_method_description(class_name, method_name = nil) ⇒ Object
get method.
-
#get_method_descriptions(klass, method) ⇒ Object
get all versions of method description.
- #get_param_group(klass, name) ⇒ Object
- #get_prop_group(klass, name) ⇒ Object
- #ignored?(klass, method = nil) ⇒ Boolean
-
#initialize ⇒ Application
constructor
A new instance of Application.
- #load_documentation ⇒ Object
- #locale ⇒ Object
- #reload_documentation ⇒ Object
- #remove_method_description(klass, versions, method_name) ⇒ Object
- #reset_locale(loc) ⇒ Object
- #set_class_versions(klass, versions) ⇒ Object
- #translate(str, locale) ⇒ Object
Constructor Details
#initialize ⇒ Application
Returns a new instance of Application.
16 17 18 |
# File 'lib/apipie_dsl/application.rb', line 16 def initialize initialize_environment end |
Instance Attribute Details
#class_descriptions ⇒ Object (readonly)
Returns the value of attribute class_descriptions.
14 15 16 |
# File 'lib/apipie_dsl/application.rb', line 14 def class_descriptions @class_descriptions end |
#refs ⇒ Object (readonly)
Returns the value of attribute refs.
14 15 16 |
# File 'lib/apipie_dsl/application.rb', line 14 def refs @refs end |
Instance Method Details
#available_versions ⇒ Object
20 21 22 |
# File 'lib/apipie_dsl/application.rb', line 20 def available_versions @class_descriptions.keys.sort end |
#class_versions(klass) ⇒ Object
28 29 30 31 32 33 34 |
# File 'lib/apipie_dsl/application.rb', line 28 def class_versions(klass) ret = @class_versions[klass.to_s] return ret unless ret.empty? return [ApipieDSL.configuration.default_version] if [Class, Module].include?(klass) || klass.nil? class_versions(ApipieDSL.superclass_for(klass)) end |
#define_class_description(klass, version, dsl_data = {}) ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/apipie_dsl/application.rb', line 97 def define_class_description(klass, version, dsl_data = {}) return if ignored?(klass) class_name = dsl_data[:class_name] || get_class_name(klass) class_description = @class_descriptions[version][class_name] if class_description # Already defined the class somewhere (probably in # some method. Updating just meta data from dsl class_description.update_from_dsl_data(dsl_data) unless dsl_data.empty? else class_description = ApipieDSL::ClassDescription.new(klass, class_name, dsl_data, version) ApipieDSL.debug("@class_descriptions[#{version}][#{class_name}] = #{class_description}") @class_descriptions[version][class_description.id] ||= class_description end class_description.refs.each do |ref| if @refs[version][ref] ApipieDSL.debug("Overwriting refs for #{class_name}") end @refs[version][ref] = class_description end class_description end |
#define_method_description(klass, method_name, dsl_data) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/apipie_dsl/application.rb', line 68 def define_method_description(klass, method_name, dsl_data) return if ignored?(klass, method_name) ret_method_description = nil versions = dsl_data[:dsl_versions] || [] versions = class_versions(klass) if versions.empty? versions.each do |version| class_name_with_version = "#{version}##{get_class_name(klass)}" class_description = get_class_description(class_name_with_version) if class_description.nil? class_dsl_data = { sections: [ApipieDSL.configuration.default_section] } class_description = define_class_description(klass, version, class_dsl_data) end method_description = ApipieDSL::MethodDescription.new(method_name, class_description, dsl_data) # Create separate method description for each version in # case the method belongs to more versions. Return just one # because the version doesn't matter for the purpose it's used # (to wrap the original version with validators) ret_method_description ||= method_description class_description.add_method_description(method_description) end ret_method_description end |
#define_param_group(klass, name, &block) ⇒ Object
44 45 46 47 |
# File 'lib/apipie_dsl/application.rb', line 44 def define_param_group(klass, name, &block) key = "#{klass.name}##{name}" @param_groups[key] = block end |
#define_prop_group(klass, name, &block) ⇒ Object
56 57 58 59 |
# File 'lib/apipie_dsl/application.rb', line 56 def define_prop_group(klass, name, &block) key = "#{klass.name}##{name}" @prop_groups[key] = block end |
#docs(version, class_name, method_name, lang, section = nil) ⇒ Object
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 |
# File 'lib/apipie_dsl/application.rb', line 191 def docs(version, class_name, method_name, lang, section = nil) empty_doc = empty_docs(version, lang) return empty_doc unless valid_search_args?(version, class_name, method_name) classes = if class_name.nil? class_descriptions[version].each_with_object({}) do |(name, description), result| result[name] = description.docs(section, nil, lang) result end else [@class_descriptions[version][class_name].docs(section, method_name, lang)] end empty_doc[:docs][:classes] = classes empty_doc end |
#dsl_classes_paths ⇒ Object
208 209 210 211 212 |
# File 'lib/apipie_dsl/application.rb', line 208 def dsl_classes_paths ApipieDSL.configuration.dsl_classes_matchers.map { |m| Dir.glob(m) } .concat(Dir.glob(ApipieDSL.configuration.dsl_classes_matcher)) .flatten.uniq end |
#get_class_description(klass, version = nil) ⇒ Object
options:
> “io”
> “v2#io”
> V2::IO
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/apipie_dsl/application.rb', line 150 def get_class_description(klass, version = nil) return nil if [NilClass, nil].include?(klass) if klass.is_a?(String) crumbs = klass.split('#') version = crumbs.first if crumbs.size == 2 version ||= ApipieDSL.configuration.default_version return @class_descriptions[version][crumbs.last] if @class_descriptions.key?(version) else class_name = get_class_name(klass) class_name = "#{version}##{class_name}" if version return nil if class_name.nil? class_description = get_class_description(class_name) return class_description if class_description && class_description.klass.to_s == klass.to_s end end |
#get_class_descriptions(klass) ⇒ Object
get all versions of class description
169 170 171 172 173 |
# File 'lib/apipie_dsl/application.rb', line 169 def get_class_descriptions(klass) available_versions.map do |version| get_class_description(klass, version) end.compact end |
#get_class_name(klass) ⇒ Object
36 37 38 39 40 41 42 |
# File 'lib/apipie_dsl/application.rb', line 36 def get_class_name(klass) class_name = klass.respond_to?(:name) ? klass.name : klass raise ArgumentError, "ApipieDSL: Can not resolve class #{klass} name." unless class_name.is_a?(String) return class_name if ApipieDSL.configuration.class_full_names? class_name.split('::').last end |
#get_method_description(class_name, method_name = nil) ⇒ Object
get method
There are two ways how this method can be used: 1) Specify both parameters
class_name:
class - IO
string with resource name and version - "v1#io"
method_name: name of the method (string or symbol)
2) Specify only first parameter:
class_name: string containing both class and method name joined
with '#' symbol.
- "io#puts" get default version
- "v2#io#puts" get specific version
135 136 137 138 139 140 141 142 143 144 |
# File 'lib/apipie_dsl/application.rb', line 135 def get_method_description(class_name, method_name = nil) ApipieDSL.debug("Getting #{class_name}##{method_name} documentation") crumbs = class_name.split('#') method_name = crumbs.pop if method_name.nil? class_name = crumbs.join('#') class_description = get_class_description(class_name) raise ArgumentError, "Class #{class_name} does not exists." if class_description.nil? class_description.method_description(method_name.to_sym) end |
#get_method_descriptions(klass, method) ⇒ Object
get all versions of method description
176 177 178 179 180 |
# File 'lib/apipie_dsl/application.rb', line 176 def get_method_descriptions(klass, method) get_class_descriptions(klass).map do |class_description| class_description.method_description(method.to_sym) end.compact end |
#get_param_group(klass, name) ⇒ Object
49 50 51 52 53 54 |
# File 'lib/apipie_dsl/application.rb', line 49 def get_param_group(klass, name) key = "#{klass.name}##{name}" raise StandardError, "Param group #{key} is not defined" unless @param_groups.key?(key) @param_groups[key] end |
#get_prop_group(klass, name) ⇒ Object
61 62 63 64 65 66 |
# File 'lib/apipie_dsl/application.rb', line 61 def get_prop_group(klass, name) key = "#{klass.name}##{name}" raise StandardError, "Prop group #{key} is not defined" unless @prop_groups.key?(key) @prop_groups[key] end |
#ignored?(klass, method = nil) ⇒ Boolean
222 223 224 225 226 227 |
# File 'lib/apipie_dsl/application.rb', line 222 def ignored?(klass, method = nil) ignored = ApipieDSL.configuration.ignored class_name = get_class_name(klass.name) return true if ignored.include?(class_name) return true if ignored.include?("#{class_name}##{method}") end |
#load_documentation ⇒ Object
254 255 256 257 258 259 |
# File 'lib/apipie_dsl/application.rb', line 254 def load_documentation return if @documentation_loaded && !ApipieDSL.configuration.reload_dsl? ApipieDSL.reload_documentation @documentation_loaded = true end |
#locale ⇒ Object
261 262 263 |
# File 'lib/apipie_dsl/application.rb', line 261 def locale ApipieDSL.configuration.locale.call(nil) if ApipieDSL.configuration.locale end |
#reload_documentation ⇒ Object
229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 |
# File 'lib/apipie_dsl/application.rb', line 229 def reload_documentation # don't load translated strings, we'll translate them later old_locale = locale reset_locale(ApipieDSL.configuration.default_locale) rails_mark_classes_for_reload if ApipieDSL.configuration.rails? dsl_classes_paths.each do |file| begin ApipieDSL.debug("Loading #{file}") if ApipieDSL.configuration.rails? load_class_from_file(file) else load(file) end rescue StandardError # Some constant the file uses may not be defined # before it's loaded # TODO: better loading end end reset_locale(old_locale) end |
#remove_method_description(klass, versions, method_name) ⇒ Object
182 183 184 185 186 187 188 189 |
# File 'lib/apipie_dsl/application.rb', line 182 def remove_method_description(klass, versions, method_name) versions.each do |version| klass = get_class_name(klass) if (class_description = class_description("#{version}##{klass}")) class_description.remove_method_description(method_name) end end end |
#reset_locale(loc) ⇒ Object
265 266 267 |
# File 'lib/apipie_dsl/application.rb', line 265 def reset_locale(loc) ApipieDSL.configuration.locale.call(loc) if ApipieDSL.configuration.locale end |
#set_class_versions(klass, versions) ⇒ Object
24 25 26 |
# File 'lib/apipie_dsl/application.rb', line 24 def set_class_versions(klass, versions) @class_versions[klass.to_s] = versions end |
#translate(str, locale) ⇒ Object
214 215 216 217 218 219 220 |
# File 'lib/apipie_dsl/application.rb', line 214 def translate(str, locale) if ApipieDSL.configuration.translate ApipieDSL.configuration.translate.call(str, locale) else str end end |