betterdocs 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 54160f33d0d7395972aa7235c457d10e3dedc53e
4
- data.tar.gz: 5560f62d8d2a19b87e8b7eaabddfc4e5b47b544c
3
+ metadata.gz: 3db95985948a6ea7f7ef6fedb7057c9403c51629
4
+ data.tar.gz: 6a6bb0a36b82481e1e7451e533423ab00d765d95
5
5
  SHA512:
6
- metadata.gz: 18f0b84802e4c773e12ce31055090b64f468d71564b4e32723f58ccab79477f22ff25cbd94860fa840d2dcde2cf7459edee1848eaa7bbee1bac71125a24c74d1
7
- data.tar.gz: 79890844e6373cb8dba6d74caed86c311b69feef4c7b0dd9944a2dc232e94f2c9971f1fcef8afa035cf80b25af3a350706fe81b4d9187c7371fd63ef7bd9ed4a
6
+ metadata.gz: 6515adc1cf8a4faeb58e15acc26dc7129f5658b990cd2bf42506f1fb6508df219dbf87645772cbbd7cb2373c0272d35ba1ba05830a8246f7f9b9ac050f3c7243
7
+ data.tar.gz: 7914bad33f84a4a36aff48cb2173ab89d47b8d1c64dcb72143ee68bc4c776d200590eb9635265232dfc249b566a2930227760bd1b0c7a8b8f60b36d75b56ee59
data/.gitignore CHANGED
@@ -2,10 +2,12 @@
2
2
  .AppleDouble
3
3
  .DS_Store
4
4
  .bundle
5
+ .byebug_history
5
6
  .ruby-version
6
7
  .rvmrc
7
8
  .utilsrc
8
9
  Gemfile.lock
9
10
  coverage
11
+ errors.lst
10
12
  pkg
11
13
  tags
data/.travis.yml CHANGED
@@ -3,7 +3,7 @@ bundler_args: --binstubs
3
3
 
4
4
  # Specify which ruby versions you wish to run your tests on, each version will be used
5
5
  rvm:
6
- - 2.0
7
- - 2.1
8
- - 2.2
6
+ - 2.3.1
9
7
  script: "bundle exec rake"
8
+ before_install:
9
+ - gem update bundler
data/Rakefile CHANGED
@@ -11,13 +11,15 @@ GemHadar do
11
11
  description "This library provides tools to generate API documention for a web site's REST-ful JSON API."
12
12
  test_dir 'spec'
13
13
  ignore '.*.sw[pon]', 'pkg', 'Gemfile.lock', 'coverage', '.rvmrc',
14
- '.ruby-version', '.AppleDouble', 'tags', '.DS_Store', '.utilsrc', '.bundle'
14
+ '.ruby-version', '.AppleDouble', 'tags', '.DS_Store', '.utilsrc',
15
+ '.bundle', '.byebug_history', 'errors.lst'
15
16
  readme 'README.md'
16
17
  title "#{name.camelize} -- "
17
18
 
18
19
  dependency 'tins', '~>1.3', '>=1.3.5'
19
20
  dependency 'rails', '>=3', '<5'
20
21
  dependency 'term-ansicolor', '~>1.3'
22
+ dependency 'complex_config', '~>0.5'
21
23
  development_dependency 'simplecov'
22
24
  development_dependency 'rspec'
23
25
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.3.0
data/betterdocs.gemspec CHANGED
@@ -1,48 +1,51 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: betterdocs 0.2.0 ruby lib
2
+ # stub: betterdocs 0.3.0 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "betterdocs"
6
- s.version = "0.2.0"
6
+ s.version = "0.3.0"
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib"]
10
10
  s.authors = ["betterplace Developers"]
11
- s.date = "2016-03-30"
11
+ s.date = "2016-06-13"
12
12
  s.description = "This library provides tools to generate API documention for a web site's REST-ful JSON API."
13
13
  s.email = "developers@betterplace.org"
14
- s.extra_rdoc_files = ["README.md", "lib/betterdocs.rb", "lib/betterdocs/controller_collector.rb", "lib/betterdocs/dsl.rb", "lib/betterdocs/dsl/common.rb", "lib/betterdocs/dsl/controller.rb", "lib/betterdocs/dsl/controller/action.rb", "lib/betterdocs/dsl/controller/action/param.rb", "lib/betterdocs/dsl/controller/action/response.rb", "lib/betterdocs/dsl/controller/controller.rb", "lib/betterdocs/dsl/controller/controller_base.rb", "lib/betterdocs/dsl/json_params.rb", "lib/betterdocs/dsl/json_params/param.rb", "lib/betterdocs/dsl/json_type_mapper.rb", "lib/betterdocs/dsl/naming.rb", "lib/betterdocs/dsl/representer.rb", "lib/betterdocs/dsl/result.rb", "lib/betterdocs/dsl/result/collection_property.rb", "lib/betterdocs/dsl/result/link.rb", "lib/betterdocs/dsl/result/property.rb", "lib/betterdocs/generator/config_shortcuts.rb", "lib/betterdocs/generator/markdown.rb", "lib/betterdocs/global.rb", "lib/betterdocs/json_params_representer.rb", "lib/betterdocs/json_params_representer_collector.rb", "lib/betterdocs/mix_into_controller.rb", "lib/betterdocs/rake_tasks.rb", "lib/betterdocs/representer.rb", "lib/betterdocs/result_representer.rb", "lib/betterdocs/result_representer_collector.rb", "lib/betterdocs/section.rb", "lib/betterdocs/version.rb"]
15
- s.files = [".codeclimate.yml", ".gitignore", ".rspec", ".travis.yml", "COPYING", "Gemfile", "LICENSE", "README.md", "Rakefile", "VERSION", "betterdocs.gemspec", "lib/betterdocs.rb", "lib/betterdocs/controller_collector.rb", "lib/betterdocs/dsl.rb", "lib/betterdocs/dsl/common.rb", "lib/betterdocs/dsl/controller.rb", "lib/betterdocs/dsl/controller/action.rb", "lib/betterdocs/dsl/controller/action/param.rb", "lib/betterdocs/dsl/controller/action/response.rb", "lib/betterdocs/dsl/controller/controller.rb", "lib/betterdocs/dsl/controller/controller_base.rb", "lib/betterdocs/dsl/json_params.rb", "lib/betterdocs/dsl/json_params/param.rb", "lib/betterdocs/dsl/json_type_mapper.rb", "lib/betterdocs/dsl/naming.rb", "lib/betterdocs/dsl/representer.rb", "lib/betterdocs/dsl/result.rb", "lib/betterdocs/dsl/result/collection_property.rb", "lib/betterdocs/dsl/result/link.rb", "lib/betterdocs/dsl/result/property.rb", "lib/betterdocs/generator/config_shortcuts.rb", "lib/betterdocs/generator/markdown.rb", "lib/betterdocs/generator/markdown/templates/README.md.erb", "lib/betterdocs/generator/markdown/templates/section.md.erb", "lib/betterdocs/global.rb", "lib/betterdocs/json_params_representer.rb", "lib/betterdocs/json_params_representer_collector.rb", "lib/betterdocs/mix_into_controller.rb", "lib/betterdocs/rake_tasks.rb", "lib/betterdocs/representer.rb", "lib/betterdocs/result_representer.rb", "lib/betterdocs/result_representer_collector.rb", "lib/betterdocs/section.rb", "lib/betterdocs/tasks/doc.rake", "lib/betterdocs/version.rb", "spec/controller_dsl_spec.rb", "spec/generator/markdown_spec.rb", "spec/json_params_representer_spec.rb", "spec/json_type_mapper_spec.rb", "spec/result_representer_dsl_spec.rb", "spec/result_representer_spec.rb", "spec/spec_helper.rb"]
14
+ s.extra_rdoc_files = ["README.md", "lib/betterdocs.rb", "lib/betterdocs/controller_collector.rb", "lib/betterdocs/dsl.rb", "lib/betterdocs/dsl/common.rb", "lib/betterdocs/dsl/controller.rb", "lib/betterdocs/dsl/controller/action.rb", "lib/betterdocs/dsl/controller/action/param.rb", "lib/betterdocs/dsl/controller/action/response.rb", "lib/betterdocs/dsl/controller/controller.rb", "lib/betterdocs/dsl/controller/controller_base.rb", "lib/betterdocs/dsl/json_params.rb", "lib/betterdocs/dsl/json_params/param.rb", "lib/betterdocs/dsl/json_type_mapper.rb", "lib/betterdocs/dsl/naming.rb", "lib/betterdocs/dsl/representer.rb", "lib/betterdocs/dsl/result.rb", "lib/betterdocs/dsl/result/collection_property.rb", "lib/betterdocs/dsl/result/link.rb", "lib/betterdocs/dsl/result/property.rb", "lib/betterdocs/generator/config_shortcuts.rb", "lib/betterdocs/generator/markdown.rb", "lib/betterdocs/global.rb", "lib/betterdocs/json_params_representer.rb", "lib/betterdocs/json_params_representer_collector.rb", "lib/betterdocs/json_time_with_zone.rb", "lib/betterdocs/mix_into_controller.rb", "lib/betterdocs/railtie.rb", "lib/betterdocs/rake_tasks.rb", "lib/betterdocs/representer.rb", "lib/betterdocs/result_representer.rb", "lib/betterdocs/result_representer_collector.rb", "lib/betterdocs/section.rb", "lib/betterdocs/version.rb"]
15
+ s.files = [".codeclimate.yml", ".gitignore", ".rspec", ".travis.yml", "COPYING", "Gemfile", "LICENSE", "README.md", "Rakefile", "VERSION", "betterdocs.gemspec", "lib/betterdocs.rb", "lib/betterdocs/controller_collector.rb", "lib/betterdocs/dsl.rb", "lib/betterdocs/dsl/common.rb", "lib/betterdocs/dsl/controller.rb", "lib/betterdocs/dsl/controller/action.rb", "lib/betterdocs/dsl/controller/action/param.rb", "lib/betterdocs/dsl/controller/action/response.rb", "lib/betterdocs/dsl/controller/controller.rb", "lib/betterdocs/dsl/controller/controller_base.rb", "lib/betterdocs/dsl/json_params.rb", "lib/betterdocs/dsl/json_params/param.rb", "lib/betterdocs/dsl/json_type_mapper.rb", "lib/betterdocs/dsl/naming.rb", "lib/betterdocs/dsl/representer.rb", "lib/betterdocs/dsl/result.rb", "lib/betterdocs/dsl/result/collection_property.rb", "lib/betterdocs/dsl/result/link.rb", "lib/betterdocs/dsl/result/property.rb", "lib/betterdocs/generator/config_shortcuts.rb", "lib/betterdocs/generator/markdown.rb", "lib/betterdocs/generator/markdown/templates/README.md.erb", "lib/betterdocs/generator/markdown/templates/section.md.erb", "lib/betterdocs/global.rb", "lib/betterdocs/json_params_representer.rb", "lib/betterdocs/json_params_representer_collector.rb", "lib/betterdocs/json_time_with_zone.rb", "lib/betterdocs/mix_into_controller.rb", "lib/betterdocs/railtie.rb", "lib/betterdocs/rake_tasks.rb", "lib/betterdocs/representer.rb", "lib/betterdocs/result_representer.rb", "lib/betterdocs/result_representer_collector.rb", "lib/betterdocs/section.rb", "lib/betterdocs/tasks/doc.rake", "lib/betterdocs/version.rb", "spec/assets/app/controllers/api/foos_controller.rb", "spec/assets/config/betterdocs.yml", "spec/controller_dsl_spec.rb", "spec/generator/markdown_spec.rb", "spec/global_spec.rb", "spec/json_params_representer_spec.rb", "spec/json_type_mapper_spec.rb", "spec/result_representer_dsl_spec.rb", "spec/result_representer_spec.rb", "spec/spec_helper.rb"]
16
16
  s.homepage = "http://github.com/betterplace/betterdocs"
17
17
  s.rdoc_options = ["--title", "Betterdocs -- ", "--main", "README.md"]
18
18
  s.rubygems_version = "2.5.1"
19
19
  s.summary = "Betterplace API documentation library"
20
- s.test_files = ["spec/controller_dsl_spec.rb", "spec/generator/markdown_spec.rb", "spec/json_params_representer_spec.rb", "spec/json_type_mapper_spec.rb", "spec/result_representer_dsl_spec.rb", "spec/result_representer_spec.rb", "spec/spec_helper.rb"]
20
+ s.test_files = ["spec/assets/app/controllers/api/foos_controller.rb", "spec/controller_dsl_spec.rb", "spec/generator/markdown_spec.rb", "spec/global_spec.rb", "spec/json_params_representer_spec.rb", "spec/json_type_mapper_spec.rb", "spec/result_representer_dsl_spec.rb", "spec/result_representer_spec.rb", "spec/spec_helper.rb"]
21
21
 
22
22
  if s.respond_to? :specification_version then
23
23
  s.specification_version = 4
24
24
 
25
25
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
26
- s.add_development_dependency(%q<gem_hadar>, ["~> 1.6.1"])
26
+ s.add_development_dependency(%q<gem_hadar>, ["~> 1.7.1"])
27
27
  s.add_development_dependency(%q<simplecov>, [">= 0"])
28
28
  s.add_development_dependency(%q<rspec>, [">= 0"])
29
29
  s.add_runtime_dependency(%q<tins>, [">= 1.3.5", "~> 1.3"])
30
30
  s.add_runtime_dependency(%q<rails>, ["< 5", ">= 3"])
31
31
  s.add_runtime_dependency(%q<term-ansicolor>, ["~> 1.3"])
32
+ s.add_runtime_dependency(%q<complex_config>, ["~> 0.5"])
32
33
  else
33
- s.add_dependency(%q<gem_hadar>, ["~> 1.6.1"])
34
+ s.add_dependency(%q<gem_hadar>, ["~> 1.7.1"])
34
35
  s.add_dependency(%q<simplecov>, [">= 0"])
35
36
  s.add_dependency(%q<rspec>, [">= 0"])
36
37
  s.add_dependency(%q<tins>, [">= 1.3.5", "~> 1.3"])
37
38
  s.add_dependency(%q<rails>, ["< 5", ">= 3"])
38
39
  s.add_dependency(%q<term-ansicolor>, ["~> 1.3"])
40
+ s.add_dependency(%q<complex_config>, ["~> 0.5"])
39
41
  end
40
42
  else
41
- s.add_dependency(%q<gem_hadar>, ["~> 1.6.1"])
43
+ s.add_dependency(%q<gem_hadar>, ["~> 1.7.1"])
42
44
  s.add_dependency(%q<simplecov>, [">= 0"])
43
45
  s.add_dependency(%q<rspec>, [">= 0"])
44
46
  s.add_dependency(%q<tins>, [">= 1.3.5", "~> 1.3"])
45
47
  s.add_dependency(%q<rails>, ["< 5", ">= 3"])
46
48
  s.add_dependency(%q<term-ansicolor>, ["~> 1.3"])
49
+ s.add_dependency(%q<complex_config>, ["~> 0.5"])
47
50
  end
48
51
  end
data/lib/betterdocs.rb CHANGED
@@ -25,3 +25,5 @@ require 'betterdocs/mix_into_controller'
25
25
  require 'betterdocs/generator/config_shortcuts'
26
26
  require 'betterdocs/generator/markdown'
27
27
  require 'betterdocs/rake_tasks'
28
+ require 'betterdocs/json_time_with_zone'
29
+ defined? Rails and require 'betterdocs/railtie'
@@ -94,12 +94,13 @@ class Betterdocs::Dsl::Controller::Action < Betterdocs::Dsl::Controller::Control
94
94
 
95
95
  def url
96
96
  url_params = params.select { |_, param| param.use_in_url? }
97
- Betterdocs.rails.application.routes.url_for(
98
- {
99
- controller: controller.name.underscore.sub(/_controller\z/, ''),
100
- action: action,
101
- } | url_params | Betterdocs::Global.config.api_url_options
102
- )
97
+ url_params = {
98
+ controller: controller.name.underscore.sub(/_controller\z/, ''),
99
+ action: action,
100
+ } | url_params | Betterdocs::Global.config.api_url_options
101
+ Betterdocs.rails.application.routes.url_for(url_params)
102
+ rescue ActionController::UrlGenerationError => e
103
+ raise e, "Could not generate URL for parameters #{url_params}. Check your param definitions!"
103
104
  end
104
105
 
105
106
  def request
@@ -22,7 +22,11 @@ class Betterdocs::Dsl::JsonParams::Param < Betterdocs::Dsl::Representer
22
22
  end
23
23
 
24
24
  def compute_value(object)
25
- object.__send__(name)
25
+ value = object.__send__(name)
26
+ if ActiveSupport::TimeWithZone === value
27
+ value.extend Betterdocs::JsonTimeWithZone
28
+ end
29
+ value
26
30
  end
27
31
 
28
32
  def add_to_collector(collector)
@@ -40,8 +40,11 @@ class Betterdocs::Dsl::Result::Property < Betterdocs::Dsl::Representer
40
40
 
41
41
  def compute_value(object)
42
42
  value = object.__send__(name)
43
- if !value.nil? && represent_with
43
+ value.nil? and return
44
+ if represent_with
44
45
  represent_with.hashify(value)
46
+ elsif ActiveSupport::TimeWithZone === value
47
+ value.extend Betterdocs::JsonTimeWithZone
45
48
  else
46
49
  value
47
50
  end
@@ -1,3 +1,5 @@
1
+ require 'complex_config/rude'
2
+
1
3
  module Betterdocs
2
4
  module Global
3
5
  class << self
@@ -7,8 +9,29 @@ module Betterdocs
7
9
 
8
10
  dsl_accessor :api_prefix, 'api' # Prefix that denotes the api namespace in URLs
9
11
 
12
+ dsl_accessor :controllers_dir do
13
+ Betterdocs.rails.root.join('app/controllers')
14
+ end
15
+
10
16
  dsl_accessor :api_controllers do
11
- Dir[Rails.root.join("app/controllers/#{api_prefix}/**/*_controller.rb")]
17
+ Dir[controllers_dir + "#{api_prefix}/**/*_controller.rb"]
18
+ end
19
+
20
+ private def handle_url(prefix, url)
21
+ if url
22
+ uri = URI.parse(url)
23
+ __send__("#{prefix}_protocol", uri.scheme || 'http')
24
+ host = uri.host || 'localhost'
25
+ port = uri.port and host = "#{host}:#{port}"
26
+ platform_host host
27
+ __send__("#{prefix}_host", host)
28
+ else
29
+ [ __send__("#{prefix}_protocol"), __send__("#{prefix}_host") ] * '://'
30
+ end
31
+ end
32
+
33
+ def platform_url(url = nil)
34
+ handle_url(:platform, url)
12
35
  end
13
36
 
14
37
  dsl_accessor :platform_protocol, 'http' # Not used atm
@@ -19,17 +42,25 @@ module Betterdocs
19
42
 
20
43
  dsl_accessor :api_host do platform_host end # Hostname of the API (eventuallly with port number)
21
44
 
45
+ def api_url(url = nil)
46
+ handle_url(:api, url)
47
+ end
48
+
22
49
  dsl_accessor :asset_protocol do platform_protocol end # Reserved
23
50
 
24
51
  dsl_accessor :asset_host do platform_host end # Rails asset host
25
52
 
53
+ def asset_url(url = nil)
54
+ handle_url(:asset, url)
55
+ end
56
+
26
57
  dsl_accessor :api_default_format, 'json'
27
58
 
28
59
  def api_base_url
29
60
  "#{api_protocol}://#{api_host}/#{api_prefix}"
30
61
  end
31
62
 
32
- dsl_accessor :api_url_options do
63
+ def api_url_options
33
64
  { protocol: api_protocol, host: api_host, format: api_default_format }
34
65
  end
35
66
 
@@ -41,20 +72,31 @@ module Betterdocs
41
72
 
42
73
  dsl_accessor :ignore do [] end # All lines of the .gitignore file as an array
43
74
 
44
- def assets
75
+ def assets=(hash)
76
+ @assets&.clear
77
+ assets(hash)
78
+ end
79
+
80
+ def assets(hash = nil)
45
81
  @assets ||= {}
82
+ if hash
83
+ hash.each do |path, to|
84
+ asset path, to: to
85
+ end
86
+ end
87
+ @assets
46
88
  end
47
- private :assets
48
89
 
49
90
  # Defines an asset for the file at +path+. If +to+ was given it will be
50
91
  # copied to this path (it includes the basename) below
51
92
  # +templates_directory+ in the output, otherwise it will be copied
52
93
  # directly to +templates_directory+.
53
94
  def asset(path, to: :root)
95
+ @assets ||= {}
54
96
  if destination = to.ask_and_send(:to_str)
55
- assets[path.to_s] = destination
97
+ @assets[path.to_s] = destination
56
98
  elsif to == :root
57
- assets[path.to_s] = to
99
+ @assets[path.to_s] = to
58
100
  else
59
101
  raise ArgumentError, "keyword argument to needs to be a string or :root"
60
102
  end
@@ -63,20 +105,31 @@ module Betterdocs
63
105
  # Maps the assets original source path to its destination path in the
64
106
  # output by yielding to every asset's source/destination pair.
65
107
  def each_asset
66
- for path in assets.keys
108
+ for (path, destination) in assets
67
109
  path = path.to_s
68
- if destination = assets[path]
69
- if destination == :root && output_directory
70
- yield path, File.join(output_directory.to_s, File.basename(path))
71
- else
72
- yield path, File.join(output_directory.to_s, destination.to_str)
73
- end
110
+ if destination == :root
111
+ yield path, File.join(output_directory.to_s, File.basename(path))
112
+ else
113
+ yield path, File.join(output_directory.to_s, destination.to_str)
74
114
  end
75
115
  end
76
116
  end
77
117
 
78
- def configure(&block)
79
- instance_eval(&block)
118
+ def configuration_file
119
+ complex_config.betterdocs
120
+ rescue ComplexConfig::ConfigurationFileMissing
121
+ end
122
+
123
+ def configure_via_yaml(config)
124
+ config.each do |name, value|
125
+ __send__(name, value.dup)
126
+ end
127
+ end
128
+
129
+ def configure(config = configuration_file, &block)
130
+ Betterdocs.rails.env.development? or return
131
+ config and configure_via_yaml(config)
132
+ block and instance_eval(&block)
80
133
  self
81
134
  end
82
135
 
@@ -89,19 +142,21 @@ module Betterdocs
89
142
  end
90
143
 
91
144
  def all_docs
92
- Dir[api_prefix.to_s + '/**/*_controller.rb'].each_with_object([]) do |cf, all|
93
- controller_name = cf.sub(/\.rb$/, '').camelcase
94
- controller =
95
- begin
96
- controller_name.constantize
97
- rescue NameError => e
98
- STDERR.puts "Skipping #{cf.inspect}, #{e.class}: #{e}"
99
- next
145
+ Dir.chdir controllers_dir do
146
+ Dir["#{api_prefix}/**/*_controller.rb"].each_with_object([]) do |cf, all|
147
+ controller_name = cf.sub(/\.rb$/, '').camelcase
148
+ controller =
149
+ begin
150
+ controller_name.constantize
151
+ rescue NameError => e
152
+ STDERR.puts "Skipping #{cf.inspect}, #{e.class}: #{e}"
153
+ next
154
+ end
155
+ if docs = controller.ask_and_send(:docs)
156
+ all << docs
157
+ else
158
+ STDERR.puts "Skipping #{cf.inspect}, #{controller_name.inspect} doesn't respond to :docs method"
100
159
  end
101
- if docs = controller.ask_and_send(:docs)
102
- all << docs
103
- else
104
- STDERR.puts "Skipping #{cf.inspect}, #{controller_name.inspect} doesn't respond to :docs method"
105
160
  end
106
161
  end
107
162
  end
@@ -112,7 +167,7 @@ module Betterdocs
112
167
 
113
168
  def sections
114
169
  @sections and return @sections
115
- Dir.chdir Rails.root.join('app/controllers') do
170
+ Dir.chdir controllers_dir do
116
171
  actions.each_with_object(@sections = {}) do |action, sections|
117
172
  sections[action.section] ||= Section.new(action.section)
118
173
  sections[action.section] << action
@@ -0,0 +1,7 @@
1
+ module Betterdocs
2
+ module JsonTimeWithZone
3
+ def to_json(*)
4
+ iso8601.inspect
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Betterdocs
2
+ class Railtie < Rails::Railtie
3
+ initializer 'betterdocs.configure_rails_initialization' do
4
+ Betterdocs::Global.configure
5
+ end
6
+ end
7
+ end
@@ -1,6 +1,6 @@
1
1
  module Betterdocs
2
2
  # Betterdocs version
3
- VERSION = '0.2.0'
3
+ VERSION = '0.3.0'
4
4
  VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
@@ -0,0 +1,4 @@
1
+ module Api
2
+ class FoosController
3
+ end
4
+ end
@@ -0,0 +1,16 @@
1
+ ---
2
+ project_name: My Example Project
3
+ api_host: api.example.com:3000
4
+ api_protocol: https
5
+ platform_host: site.example.com
6
+ platform_protocol: http
7
+ asset_host: "https://assets.example.com"
8
+ api_prefix: api
9
+ templates_directory: documentation/templates
10
+ output_directory: api_docs
11
+ assets:
12
+ 'app/views/api_v4/documentation/assets/CHANGELOG.md': :root
13
+ 'app/assets/images/logos/logo.png': images/logo.png
14
+ ignore:
15
+ - .DS_Store
16
+ publish_git: 'git@github.com:foo/bar.git'
@@ -0,0 +1,189 @@
1
+ require 'spec_helper'
2
+ require 'pathname'
3
+
4
+ RSpec.describe Betterdocs::Global do
5
+ let :rails do
6
+ double(
7
+ root: Pathname.pwd + 'spec/assets',
8
+ env: double(development?: true)
9
+ )
10
+ end
11
+
12
+ before do
13
+ allow(Betterdocs).to receive(:rails).and_return rails
14
+ ComplexConfig::Provider.config_dir = 'spec/assets/config'
15
+ Betterdocs::Global.configure
16
+ end
17
+
18
+ it 'has a project name' do
19
+ expect(Betterdocs::Global.project_name).to eq 'My Example Project'
20
+ end
21
+
22
+ it 'uses an api prefix' do
23
+ expect(Betterdocs::Global.api_prefix).to eq 'api'
24
+ end
25
+
26
+ it 'returns all api controllers via wild matching' do
27
+ expect(Betterdocs::Global.api_controllers.size).to eq 1
28
+ expect(Betterdocs::Global.api_controllers.last).to end_with\
29
+ 'spec/assets/app/controllers/api/foos_controller.rb'
30
+ end
31
+
32
+ context 'platform url' do
33
+ before do
34
+ Betterdocs::Global.platform_protocol 'http'
35
+ Betterdocs::Global.platform_host 'localhost:3000'
36
+ end
37
+
38
+ it 'has default platform_url' do
39
+ expect(Betterdocs::Global.platform_url).to eq 'http://localhost:3000'
40
+ end
41
+
42
+ it 'can parse platform_url' do
43
+ Betterdocs::Global.platform_url 'https://foo.bar:1234'
44
+ expect(Betterdocs::Global.platform_url).to eq 'https://foo.bar:1234'
45
+ Betterdocs::Global.platform_url 'https://foo.bar'
46
+ expect(Betterdocs::Global.platform_url).to eq 'https://foo.bar:443'
47
+ Betterdocs::Global.platform_url 'http://foo.bar'
48
+ expect(Betterdocs::Global.platform_url).to eq 'http://foo.bar:80'
49
+ end
50
+
51
+ it 'has platform_protocol' do
52
+ expect(Betterdocs::Global.platform_protocol).to eq 'http'
53
+ end
54
+
55
+ it 'has platform_host' do
56
+ expect(Betterdocs::Global.platform_host).to eq 'localhost:3000'
57
+ end
58
+ end
59
+
60
+ context 'api url' do
61
+ before do
62
+ Betterdocs::Global.api_protocol 'http'
63
+ Betterdocs::Global.api_host 'localhost:3000'
64
+ end
65
+
66
+ it 'has default api_url' do
67
+ expect(Betterdocs::Global.api_url).to eq 'http://localhost:3000'
68
+ end
69
+
70
+ it 'can parse api_url' do
71
+ Betterdocs::Global.api_url 'https://foo.bar:1234'
72
+ expect(Betterdocs::Global.api_url).to eq 'https://foo.bar:1234'
73
+ Betterdocs::Global.api_url 'https://foo.bar'
74
+ expect(Betterdocs::Global.api_url).to eq 'https://foo.bar:443'
75
+ Betterdocs::Global.api_url 'http://foo.bar'
76
+ expect(Betterdocs::Global.api_url).to eq 'http://foo.bar:80'
77
+ end
78
+
79
+ it 'has api_protocol' do
80
+ expect(Betterdocs::Global.api_protocol).to eq 'http'
81
+ end
82
+
83
+ it 'has api_host' do
84
+ expect(Betterdocs::Global.api_host).to eq 'localhost:3000'
85
+ end
86
+
87
+ it 'can return api_base_url' do
88
+ Betterdocs::Global.api_url 'https://foo.bar:1234'
89
+ expect(Betterdocs::Global.api_base_url).to eq 'https://foo.bar:1234/api'
90
+ end
91
+
92
+ end
93
+
94
+ context 'asset url' do
95
+ before do
96
+ Betterdocs::Global.asset_protocol 'http'
97
+ Betterdocs::Global.asset_host 'localhost:3000'
98
+ end
99
+
100
+ it 'has default asset_url' do
101
+ expect(Betterdocs::Global.asset_url).to eq 'http://localhost:3000'
102
+ end
103
+
104
+ it 'can parse asset_url' do
105
+ Betterdocs::Global.asset_url 'https://foo.bar:1234'
106
+ expect(Betterdocs::Global.asset_url).to eq 'https://foo.bar:1234'
107
+ Betterdocs::Global.asset_url 'https://foo.bar'
108
+ expect(Betterdocs::Global.asset_url).to eq 'https://foo.bar:443'
109
+ Betterdocs::Global.asset_url 'http://foo.bar'
110
+ expect(Betterdocs::Global.asset_url).to eq 'http://foo.bar:80'
111
+ end
112
+
113
+ it 'has asset_protocol' do
114
+ expect(Betterdocs::Global.asset_protocol).to eq 'http'
115
+ end
116
+
117
+ it 'has asset_host' do
118
+ expect(Betterdocs::Global.asset_host).to eq 'localhost:3000'
119
+ end
120
+ end
121
+
122
+ it 'has api_default_format' do
123
+ expect(Betterdocs::Global.api_default_format).to eq 'json'
124
+ end
125
+
126
+ it 'can return api_url_options' do
127
+ expect(Betterdocs::Global.api_url_options).to eq(
128
+ protocol: "https",
129
+ host: "api.example.com:3000",
130
+ format: "json"
131
+ )
132
+ end
133
+
134
+ it 'has templates_directory' do
135
+ expect(Betterdocs::Global.templates_directory).to\
136
+ eq 'documentation/templates'
137
+ end
138
+
139
+ it 'has output_directory' do
140
+ expect(Betterdocs::Global.output_directory).to eq 'api_docs'
141
+ end
142
+
143
+ it 'has publish_git' do
144
+ expect(Betterdocs::Global.publish_git).to eq 'git@github.com:foo/bar.git'
145
+ end
146
+
147
+ it 'can ignore in the git repo' do
148
+ expect(Betterdocs::Global.ignore).to eq %w[ .DS_Store ]
149
+ end
150
+
151
+ context 'assets' do
152
+ it 'can have assets' do
153
+ expect(Betterdocs::Global.assets).to be_a Hash
154
+ expect(Betterdocs::Global.assets).not_to be_empty
155
+ end
156
+
157
+ it 'can set assets' do
158
+ begin
159
+ Betterdocs::Global.assets = { foo: 'bar' }
160
+ expect(Betterdocs::Global.assets).to eq({ 'foo' => 'bar' })
161
+ Betterdocs::Global.asset :bar, to: 'baz'
162
+ expect(Betterdocs::Global.assets).to eq({ 'foo' => 'bar', 'bar' => 'baz' })
163
+ Betterdocs::Global.asset 'quux'
164
+ expect(Betterdocs::Global.assets).to eq({ 'foo' => 'bar', 'bar' => 'baz', 'quux' => :root })
165
+ ensure
166
+ Betterdocs::Global.assets.clear
167
+ end
168
+ end
169
+
170
+ it 'can iterate over assets' do
171
+ expect { |b| Betterdocs::Global.each_asset(&b) }.to\
172
+ yield_successive_args(
173
+ ["app/views/api_v4/documentation/assets/CHANGELOG.md", "api_docs/CHANGELOG.md"],
174
+ ["app/assets/images/logos/logo.png", "api_docs/images/logo.png"]
175
+ )
176
+ end
177
+ end
178
+
179
+ it 'has a default configuration_file' do
180
+ expect(Betterdocs::Global.configuration_file).to\
181
+ be_a ComplexConfig::Settings
182
+ end
183
+
184
+ it 'all_docs' do
185
+ load 'spec/assets/app/controllers/api/foos_controller.rb'
186
+ expect(Api::FoosController).to receive(:docs).and_return :foo
187
+ expect(Betterdocs::Global.all_docs).to eq [ :foo ]
188
+ end
189
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: betterdocs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - betterplace Developers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-30 00:00:00.000000000 Z
11
+ date: 2016-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gem_hadar
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.6.1
19
+ version: 1.7.1
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.6.1
26
+ version: 1.7.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: simplecov
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -106,6 +106,20 @@ dependencies:
106
106
  - - "~>"
107
107
  - !ruby/object:Gem::Version
108
108
  version: '1.3'
109
+ - !ruby/object:Gem::Dependency
110
+ name: complex_config
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - "~>"
114
+ - !ruby/object:Gem::Version
115
+ version: '0.5'
116
+ type: :runtime
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - "~>"
121
+ - !ruby/object:Gem::Version
122
+ version: '0.5'
109
123
  description: This library provides tools to generate API documention for a web site's
110
124
  REST-ful JSON API.
111
125
  email: developers@betterplace.org
@@ -137,7 +151,9 @@ extra_rdoc_files:
137
151
  - lib/betterdocs/global.rb
138
152
  - lib/betterdocs/json_params_representer.rb
139
153
  - lib/betterdocs/json_params_representer_collector.rb
154
+ - lib/betterdocs/json_time_with_zone.rb
140
155
  - lib/betterdocs/mix_into_controller.rb
156
+ - lib/betterdocs/railtie.rb
141
157
  - lib/betterdocs/rake_tasks.rb
142
158
  - lib/betterdocs/representer.rb
143
159
  - lib/betterdocs/result_representer.rb
@@ -182,7 +198,9 @@ files:
182
198
  - lib/betterdocs/global.rb
183
199
  - lib/betterdocs/json_params_representer.rb
184
200
  - lib/betterdocs/json_params_representer_collector.rb
201
+ - lib/betterdocs/json_time_with_zone.rb
185
202
  - lib/betterdocs/mix_into_controller.rb
203
+ - lib/betterdocs/railtie.rb
186
204
  - lib/betterdocs/rake_tasks.rb
187
205
  - lib/betterdocs/representer.rb
188
206
  - lib/betterdocs/result_representer.rb
@@ -190,8 +208,11 @@ files:
190
208
  - lib/betterdocs/section.rb
191
209
  - lib/betterdocs/tasks/doc.rake
192
210
  - lib/betterdocs/version.rb
211
+ - spec/assets/app/controllers/api/foos_controller.rb
212
+ - spec/assets/config/betterdocs.yml
193
213
  - spec/controller_dsl_spec.rb
194
214
  - spec/generator/markdown_spec.rb
215
+ - spec/global_spec.rb
195
216
  - spec/json_params_representer_spec.rb
196
217
  - spec/json_type_mapper_spec.rb
197
218
  - spec/result_representer_dsl_spec.rb
@@ -225,8 +246,10 @@ signing_key:
225
246
  specification_version: 4
226
247
  summary: Betterplace API documentation library
227
248
  test_files:
249
+ - spec/assets/app/controllers/api/foos_controller.rb
228
250
  - spec/controller_dsl_spec.rb
229
251
  - spec/generator/markdown_spec.rb
252
+ - spec/global_spec.rb
230
253
  - spec/json_params_representer_spec.rb
231
254
  - spec/json_type_mapper_spec.rb
232
255
  - spec/result_representer_dsl_spec.rb