diff --git a/lib/docs/filters/cakephp/clean_html_39_plus.rb b/lib/docs/filters/cakephp/clean_html_39_plus.rb
new file mode 100755
index 00000000..955ef715
--- /dev/null
+++ b/lib/docs/filters/cakephp/clean_html_39_plus.rb
@@ -0,0 +1,37 @@
+module Docs
+ class Cakephp
+ class CleanHtml39PlusFilter < Filter
+ def call
+ @doc = root_page? ? at_css('#content') : at_css('#right').at_css('div')
+
+ css('a.permalink').remove
+
+ css('.member-summary h3').each do |node|
+ node.name = 'div'
+ node.remove_attribute('class')
+ end
+
+ css('h6').each do |node|
+ node.name = 'h4'
+ end
+
+ css('pre').each do |node|
+ node.content = node.content.strip
+ node['data-language'] = 'php'
+ end
+
+ # Move dummy anchor to method and property name
+
+ css('.method-detail').each do |node|
+ node.at_css('.method-name')['id'] = node.at_css('a')['id']
+ end
+
+ css('.property-detail').each do |node|
+ node.at_css('.property-name')['id'] = node.at_css('a')['id']
+ end
+
+ doc
+ end
+ end
+ end
+end
diff --git a/lib/docs/filters/cakephp/entries_39_plus.rb b/lib/docs/filters/cakephp/entries_39_plus.rb
new file mode 100755
index 00000000..2b628b6f
--- /dev/null
+++ b/lib/docs/filters/cakephp/entries_39_plus.rb
@@ -0,0 +1,52 @@
+module Docs
+ class Cakephp
+ class Entries39PlusFilter < Docs::EntriesFilter
+ def page_type
+ @page_type ||= slug.split('-').first
+ end
+
+ def slug_without_page_type
+ @slug_without_page_type ||= slug.split('-').last
+ end
+
+ def get_name
+ case page_type
+ when 'class', 'trait', 'interface'
+ slug.split('.').last.concat(" (#{self.page_type})")
+ when 'namespace'
+ slug_without_page_type.split('.').tap do |path|
+ path.shift if path.length > 1
+ end.join('\\').concat(" (namespace)")
+ end
+ end
+
+ def get_type
+ case page_type
+ when 'class', 'trait', 'interface'
+ slug_without_page_type.split('.')[1..-2].join('\\')
+ when 'namespace'
+ slug_without_page_type.split('.')[1..-1].join('\\')
+ end
+ end
+
+ def additional_entries
+ return [] unless page_type == 'class'
+ class_name = slug.split('.').last
+ return [] if class_name.end_with?('Exception')
+ entries = []
+
+ css('h3.method-name').each do |node|
+ method_name = node['id'].concat('()')
+ entries << ["#{class_name}::#{method_name}", node['id']]
+ end
+
+ css('h3.property-name').each do |node|
+ property_name = node['id']
+ entries << ["#{class_name}::#{property_name}", node['id']]
+ end
+
+ entries
+ end
+ end
+ end
+end
diff --git a/lib/docs/scrapers/cakephp.rb b/lib/docs/scrapers/cakephp.rb
index d913a214..e240a592 100644
--- a/lib/docs/scrapers/cakephp.rb
+++ b/lib/docs/scrapers/cakephp.rb
@@ -8,10 +8,6 @@ module Docs
code: 'https://github.com/cakephp/cakephp'
}
- html_filters.push 'cakephp/clean_html', 'cakephp/entries'
-
- options[:container] = '#right'
-
options[:skip_patterns] = [/\Asource-/]
options[:attribution] = <<-HTML
@@ -21,64 +17,139 @@ module Docs
We are not endorsed by or affiliated with CakePHP.
HTML
+ version '4.1' do
+ self.release = '4.1.6'
+ self.base_url = "https://api.cakephp.org/#{self.version}/"
+
+ html_filters.push 'cakephp/clean_html_39_plus', 'cakephp/entries_39_plus'
+
+ options[:container] = '.page-container'
+ end
+
+ version '4.0' do
+ self.release = '4.0.8'
+ self.base_url = "https://api.cakephp.org/#{self.version}/"
+
+ html_filters.push 'cakephp/clean_html_39_plus', 'cakephp/entries_39_plus'
+
+ options[:container] = '.page-container'
+ end
+
+ version '3.9' do
+ self.release = '3.9.4'
+ self.base_url = "https://api.cakephp.org/#{self.version}/"
+
+ html_filters.push 'cakephp/clean_html_39_plus', 'cakephp/entries_39_plus'
+
+ options[:container] = '.page-container'
+ end
+
version '3.8' do
self.release = '3.8.3'
self.base_url = "https://api.cakephp.org/#{self.version}/"
+
+ html_filters.push 'cakephp/clean_html', 'cakephp/entries'
+
+ options[:container] = '#right'
end
version '3.7' do
self.release = '3.7.9'
self.base_url = "https://api.cakephp.org/#{self.version}/"
+
+ html_filters.push 'cakephp/clean_html', 'cakephp/entries'
+
+ options[:container] = '#right'
end
version '3.6' do
self.release = '3.6.15'
self.base_url = "https://api.cakephp.org/#{self.version}/"
+
+ html_filters.push 'cakephp/clean_html', 'cakephp/entries'
+
+ options[:container] = '#right'
end
version '3.5' do
self.release = '3.5.15'
self.base_url = "https://api.cakephp.org/#{self.version}/"
+
+ html_filters.push 'cakephp/clean_html', 'cakephp/entries'
+
+ options[:container] = '#right'
end
version '3.4' do
self.release = '3.4.13'
self.base_url = "https://api.cakephp.org/#{self.version}/"
+
+ html_filters.push 'cakephp/clean_html', 'cakephp/entries'
+
+ options[:container] = '#right'
end
version '3.3' do
self.release = '3.3.15'
self.base_url = "https://api.cakephp.org/#{self.version}/"
+
+ html_filters.push 'cakephp/clean_html', 'cakephp/entries'
+
+ options[:container] = '#right'
end
version '3.2' do
self.release = '3.2.14'
self.base_url = "https://api.cakephp.org/#{self.version}/"
+
+ html_filters.push 'cakephp/clean_html', 'cakephp/entries'
+
+ options[:container] = '#right'
end
version '3.1' do
self.release = '3.1.13'
self.base_url = "https://api.cakephp.org/#{self.version}/"
+
+ html_filters.push 'cakephp/clean_html', 'cakephp/entries'
+
+ options[:container] = '#right'
end
version '2.10' do
self.release = '2.10.3'
self.base_url = "https://api.cakephp.org/#{self.version}/"
+
+ html_filters.push 'cakephp/clean_html', 'cakephp/entries'
+
+ options[:container] = '#right'
end
version '2.9' do
self.release = '2.9.4'
self.base_url = "https://api.cakephp.org/#{self.version}/"
+
+ html_filters.push 'cakephp/clean_html', 'cakephp/entries'
+
+ options[:container] = '#right'
end
version '2.8' do
self.release = '2.8.8'
self.base_url = "https://api.cakephp.org/#{self.version}/"
+
+ html_filters.push 'cakephp/clean_html', 'cakephp/entries'
+
+ options[:container] = '#right'
end
version '2.7' do
self.release = '2.7.11'
self.base_url = "https://api.cakephp.org/#{self.version}/"
+
+ html_filters.push 'cakephp/clean_html', 'cakephp/entries'
+
+ options[:container] = '#right'
end
def get_latest_version(opts)