brainstem 1.0.0.pre.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/Gemfile.lock +1 -1
  4. data/README.md +383 -32
  5. data/bin/brainstem +6 -0
  6. data/brainstem.gemspec +2 -0
  7. data/docs/api_doc_generator.markdown +175 -0
  8. data/docs/brainstem_executable.markdown +32 -0
  9. data/docs/docgen.png +0 -0
  10. data/docs/docgen_ascii.txt +63 -0
  11. data/docs/executable.png +0 -0
  12. data/docs/executable_ascii.txt +10 -0
  13. data/lib/brainstem/api_docs.rb +146 -0
  14. data/lib/brainstem/api_docs/abstract_collection.rb +116 -0
  15. data/lib/brainstem/api_docs/atlas.rb +158 -0
  16. data/lib/brainstem/api_docs/builder.rb +167 -0
  17. data/lib/brainstem/api_docs/controller.rb +122 -0
  18. data/lib/brainstem/api_docs/controller_collection.rb +40 -0
  19. data/lib/brainstem/api_docs/endpoint.rb +234 -0
  20. data/lib/brainstem/api_docs/endpoint_collection.rb +58 -0
  21. data/lib/brainstem/api_docs/exceptions.rb +8 -0
  22. data/lib/brainstem/api_docs/formatters/abstract_formatter.rb +64 -0
  23. data/lib/brainstem/api_docs/formatters/markdown/controller_formatter.rb +76 -0
  24. data/lib/brainstem/api_docs/formatters/markdown/endpoint_collection_formatter.rb +73 -0
  25. data/lib/brainstem/api_docs/formatters/markdown/endpoint_formatter.rb +169 -0
  26. data/lib/brainstem/api_docs/formatters/markdown/helper.rb +76 -0
  27. data/lib/brainstem/api_docs/formatters/markdown/presenter_formatter.rb +200 -0
  28. data/lib/brainstem/api_docs/introspectors/abstract_introspector.rb +100 -0
  29. data/lib/brainstem/api_docs/introspectors/rails_introspector.rb +232 -0
  30. data/lib/brainstem/api_docs/presenter.rb +225 -0
  31. data/lib/brainstem/api_docs/presenter_collection.rb +97 -0
  32. data/lib/brainstem/api_docs/resolver.rb +73 -0
  33. data/lib/brainstem/api_docs/sinks/abstract_sink.rb +37 -0
  34. data/lib/brainstem/api_docs/sinks/controller_presenter_multifile_sink.rb +93 -0
  35. data/lib/brainstem/api_docs/sinks/stdout_sink.rb +44 -0
  36. data/lib/brainstem/cli.rb +146 -0
  37. data/lib/brainstem/cli/abstract_command.rb +97 -0
  38. data/lib/brainstem/cli/generate_api_docs_command.rb +169 -0
  39. data/lib/brainstem/concerns/controller_dsl.rb +300 -0
  40. data/lib/brainstem/concerns/controller_param_management.rb +30 -9
  41. data/lib/brainstem/concerns/formattable.rb +38 -0
  42. data/lib/brainstem/concerns/inheritable_configuration.rb +3 -2
  43. data/lib/brainstem/concerns/optional.rb +43 -0
  44. data/lib/brainstem/concerns/presenter_dsl.rb +76 -15
  45. data/lib/brainstem/controller_methods.rb +6 -3
  46. data/lib/brainstem/dsl/association.rb +6 -3
  47. data/lib/brainstem/dsl/associations_block.rb +6 -3
  48. data/lib/brainstem/dsl/base_block.rb +2 -4
  49. data/lib/brainstem/dsl/conditional.rb +7 -3
  50. data/lib/brainstem/dsl/conditionals_block.rb +4 -4
  51. data/lib/brainstem/dsl/configuration.rb +184 -8
  52. data/lib/brainstem/dsl/field.rb +6 -3
  53. data/lib/brainstem/dsl/fields_block.rb +2 -3
  54. data/lib/brainstem/help_text.txt +8 -0
  55. data/lib/brainstem/presenter.rb +27 -6
  56. data/lib/brainstem/presenter_validator.rb +5 -2
  57. data/lib/brainstem/time_classes.rb +1 -1
  58. data/lib/brainstem/version.rb +1 -1
  59. data/spec/brainstem/api_docs/abstract_collection_spec.rb +156 -0
  60. data/spec/brainstem/api_docs/atlas_spec.rb +353 -0
  61. data/spec/brainstem/api_docs/builder_spec.rb +100 -0
  62. data/spec/brainstem/api_docs/controller_collection_spec.rb +92 -0
  63. data/spec/brainstem/api_docs/controller_spec.rb +225 -0
  64. data/spec/brainstem/api_docs/endpoint_collection_spec.rb +144 -0
  65. data/spec/brainstem/api_docs/endpoint_spec.rb +346 -0
  66. data/spec/brainstem/api_docs/formatters/abstract_formatter_spec.rb +30 -0
  67. data/spec/brainstem/api_docs/formatters/markdown/controller_formatter_spec.rb +126 -0
  68. data/spec/brainstem/api_docs/formatters/markdown/endpoint_collection_formatter_spec.rb +85 -0
  69. data/spec/brainstem/api_docs/formatters/markdown/endpoint_formatter_spec.rb +261 -0
  70. data/spec/brainstem/api_docs/formatters/markdown/helper_spec.rb +100 -0
  71. data/spec/brainstem/api_docs/formatters/markdown/presenter_formatter_spec.rb +485 -0
  72. data/spec/brainstem/api_docs/introspectors/abstract_introspector_spec.rb +192 -0
  73. data/spec/brainstem/api_docs/introspectors/rails_introspector_spec.rb +170 -0
  74. data/spec/brainstem/api_docs/presenter_collection_spec.rb +84 -0
  75. data/spec/brainstem/api_docs/presenter_spec.rb +519 -0
  76. data/spec/brainstem/api_docs/resolver_spec.rb +72 -0
  77. data/spec/brainstem/api_docs/sinks/abstract_sink_spec.rb +16 -0
  78. data/spec/brainstem/api_docs/sinks/controller_presenter_multifile_sink_spec.rb +56 -0
  79. data/spec/brainstem/api_docs/sinks/stdout_sink_spec.rb +22 -0
  80. data/spec/brainstem/api_docs_spec.rb +58 -0
  81. data/spec/brainstem/cli/abstract_command_spec.rb +91 -0
  82. data/spec/brainstem/cli/generate_api_docs_command_spec.rb +125 -0
  83. data/spec/brainstem/cli_spec.rb +67 -0
  84. data/spec/brainstem/concerns/controller_dsl_spec.rb +471 -0
  85. data/spec/brainstem/concerns/controller_param_management_spec.rb +36 -16
  86. data/spec/brainstem/concerns/formattable_spec.rb +30 -0
  87. data/spec/brainstem/concerns/inheritable_configuration_spec.rb +104 -4
  88. data/spec/brainstem/concerns/optional_spec.rb +48 -0
  89. data/spec/brainstem/concerns/presenter_dsl_spec.rb +202 -31
  90. data/spec/brainstem/dsl/association_spec.rb +18 -2
  91. data/spec/brainstem/dsl/conditional_spec.rb +25 -2
  92. data/spec/brainstem/dsl/configuration_spec.rb +1 -1
  93. data/spec/brainstem/dsl/field_spec.rb +18 -2
  94. data/spec/brainstem/presenter_collection_spec.rb +10 -2
  95. data/spec/brainstem/presenter_spec.rb +32 -0
  96. data/spec/brainstem/presenter_validator_spec.rb +12 -7
  97. data/spec/dummy/rails.rb +49 -0
  98. data/spec/shared/atlas_taker.rb +18 -0
  99. data/spec/shared/formattable.rb +14 -0
  100. data/spec/spec_helper.rb +2 -0
  101. data/spec/spec_helpers/db.rb +1 -1
  102. data/spec/spec_helpers/presenters.rb +20 -14
  103. metadata +106 -6
@@ -5,8 +5,24 @@ describe Brainstem::DSL::Association do
5
5
  let(:name) { :user }
6
6
  let(:target_class) { User }
7
7
  let(:description) { "This object's user" }
8
- let(:options) { { } }
9
- let(:association) { Brainstem::DSL::Association.new(name, target_class, description, options) }
8
+ let(:options) { { info: description } }
9
+ let(:association) { Brainstem::DSL::Association.new(name, target_class, options) }
10
+
11
+ describe 'description' do
12
+ context 'when `info` is specified in the options' do
13
+ it 'returns the value specified with the info key' do
14
+ expect(association.description).to eq(description)
15
+ end
16
+ end
17
+
18
+ context 'when `info` is not specified in the options' do
19
+ let(:options) { {} }
20
+
21
+ it 'returns nil' do
22
+ expect(association.description).to be_nil
23
+ end
24
+ end
25
+ end
10
26
 
11
27
  describe "#run_on" do
12
28
  let(:context) { { } }
@@ -2,8 +2,31 @@ require 'spec_helper'
2
2
  require 'brainstem/dsl/conditional'
3
3
 
4
4
  describe Brainstem::DSL::Conditional do
5
- let(:conditional) { Brainstem::DSL::Conditional.new(name, type, action, description) }
5
+ let(:conditional) { Brainstem::DSL::Conditional.new(name, type, action, options) }
6
6
  let(:model) { Workspace.first }
7
+ let(:options) { { info: description } }
8
+
9
+ describe 'description' do
10
+ let(:name) { :title_is_hello }
11
+ let(:type) { :model }
12
+ let(:action) { lambda { |model| model.title == 'hello' } }
13
+
14
+ context 'when `info` is specified in the options' do
15
+ let(:description) { 'visible when the title is hello' }
16
+
17
+ it 'returns the value specified with the info key' do
18
+ expect(conditional.description).to eq(description)
19
+ end
20
+ end
21
+
22
+ context 'when `info` is not specified in the options' do
23
+ let(:options) { {} }
24
+
25
+ it 'returns nil' do
26
+ expect(conditional.description).to be_nil
27
+ end
28
+ end
29
+ end
7
30
 
8
31
  describe '.matches?' do
9
32
  context 'as a :model conditional' do
@@ -90,4 +113,4 @@ describe Brainstem::DSL::Conditional do
90
113
  end
91
114
  end
92
115
  end
93
- end
116
+ end
@@ -1 +1 @@
1
- # This is tested in concerns/inheritable_configuration_spec.rb
1
+ # This is tested in concerns/inheritable_configuration_spec.rb
@@ -5,10 +5,26 @@ describe Brainstem::DSL::Field do
5
5
  let(:name) { :title }
6
6
  let(:type) { :string }
7
7
  let(:description) { 'the title of this model' }
8
- let(:options) { { } }
9
- let(:field) { Brainstem::DSL::Field.new(name, type, description, options) }
8
+ let(:options) { { info: description } }
9
+ let(:field) { Brainstem::DSL::Field.new(name, type, options) }
10
10
  let(:model) { Workspace.first }
11
11
 
12
+ describe 'description' do
13
+ context 'when `info` is specified in the options' do
14
+ it 'returns the value specified with the info key' do
15
+ expect(field.description).to eq(description)
16
+ end
17
+ end
18
+
19
+ context 'when `info` is not specified in the options' do
20
+ let(:options) { {} }
21
+
22
+ it 'returns nil' do
23
+ expect(field.description).to be_nil
24
+ end
25
+ end
26
+ end
27
+
12
28
  describe '#method_name' do
13
29
  describe 'by default' do
14
30
  it 'returns the name' do
@@ -615,14 +615,22 @@ describe Brainstem::PresenterCollection do
615
615
  WorkspacePresenter.filter(:other_filter_with_default, default: true) { |scope, opt| scope }
616
616
 
617
617
  provided_params = nil
618
+
618
619
  WorkspacePresenter.filter :filter_with_param, :include_params => true do |scope, option, params|
619
620
  provided_params = params
620
621
  scope
621
622
  end
622
623
 
623
- @presenter_collection.presenting("workspaces", :params => { :filter_with_param => "arg", :other_filter => 'another_arg' }) { Workspace.where(nil) }
624
+ @presenter_collection.presenting("workspaces", :params => {
625
+ :filter_with_param => "arg",
626
+ :other_filter => 'another_arg'
627
+ }) { Workspace.where(nil) }
624
628
 
625
- expect(provided_params).to eq({ "filter_with_param" => "arg", "other_filter" => "another_arg", "other_filter_with_default" => true })
629
+ expect(provided_params).to eq({
630
+ "filter_with_param" => "arg",
631
+ "other_filter" => "another_arg",
632
+ "other_filter_with_default" => true
633
+ })
626
634
  end
627
635
  end
628
636
  end
@@ -68,6 +68,38 @@ describe Brainstem::Presenter do
68
68
  }).to raise_error(/Brainstem Presenter#presents now expects a Class instead of a class name/)
69
69
  end
70
70
  end
71
+
72
+
73
+ describe ".possible_brainstem_keys" do
74
+ let(:presented_class) { Class.new }
75
+ let(:other_presented_class) { Class.new }
76
+ let(:presenter_class) { Class.new(Brainstem::Presenter) }
77
+
78
+ before do
79
+ presenter_class.presents presented_class, other_presented_class
80
+ end
81
+
82
+ context "when has brainstem key" do
83
+ before do
84
+ presenter_class.brainstem_key "presented_class"
85
+ end
86
+
87
+ it "returns the set of only its brainstem key" do
88
+ expect(presenter_class.possible_brainstem_keys.to_a).to eq ["presented_class"]
89
+ end
90
+ end
91
+
92
+ context "when has no brainstem key" do
93
+ before do
94
+ stub(presented_class).table_name { "t1" }
95
+ stub(other_presented_class).table_name { "t2" }
96
+ end
97
+
98
+ it "returns the set of keys of its presented classes" do
99
+ expect(presenter_class.possible_brainstem_keys.to_a.sort).to eq ["t1", "t2"]
100
+ end
101
+ end
102
+ end
71
103
  end
72
104
 
73
105
  describe "#group_present" do
@@ -9,29 +9,34 @@ describe Brainstem::PresenterValidator do
9
9
  preload :lead_user
10
10
 
11
11
  conditionals do
12
- model :title_is_hello, lambda { |model| model.title == 'hello' }, 'visible when the title is hello'
13
- request :user_is_bob, lambda { current_user == 'bob' }, 'visible only to bob'
12
+ model :title_is_hello, lambda { |model| model.title == 'hello' }, info: 'visible when the title is hello'
13
+ request :user_is_bob, lambda { current_user == 'bob' }, info: 'visible only to bob'
14
14
  end
15
15
 
16
16
  fields do
17
17
  field :title, :string
18
18
  field :description, :string
19
19
  field :updated_at, :datetime
20
- field :secret, :string, 'a secret, via secret_info',
20
+ field :secret, :string,
21
+ info: 'a secret, via secret_info',
21
22
  via: :secret_info,
22
23
  if: [:user_is_bob, :title_is_hello]
23
24
 
24
25
  with_options if: :user_is_bob do
25
- field :bob_title, :string, 'another name for the title, only for Bob',
26
+ field :bob_title, :string,
27
+ info: 'another name for the title, only for Bob',
26
28
  via: :title
27
29
  end
28
30
  end
29
31
 
30
32
  associations do
31
- association :tasks, Task, 'The Tasks in this Workspace',
33
+ association :tasks, Task,
34
+ info: 'The Tasks in this Workspace',
32
35
  restrict_to_only: true
33
- association :lead_user, User, 'The user who runs this Workspace'
34
- association :subtasks, Task, 'Only Tasks in this Workspace that are subtasks',
36
+ association :lead_user, User,
37
+ info: 'The user who runs this Workspace'
38
+ association :subtasks, Task,
39
+ info: 'Only Tasks in this Workspace that are subtasks',
35
40
  dynamic: lambda { |workspace| workspace.tasks.where('parent_id IS NOT NULL') }
36
41
  end
37
42
  end
@@ -0,0 +1,49 @@
1
+ # This is a dummy file which is used in the Introspector specs to simulate a
2
+ # loaded rails app.
3
+ silence_warnings do
4
+ FakeRailsApplication = Struct.new(:eager_load!, :routes)
5
+ FakeRailsRoutesObject = Struct.new(:routes)
6
+ FakeRailsRoutePathObject = Struct.new(:spec)
7
+ FakeRailsRoute = Struct.new(:name, :path, :defaults, :constraints)
8
+ end
9
+
10
+
11
+ class Rails
12
+ def self.application
13
+ @application ||= begin
14
+ route_1 = FakeRailsRoute.new(
15
+ "fake_descendant",
16
+ FakeRailsRoutePathObject.new(spec: '/fake_descendant'),
17
+ { controller: "fake_descendant", action: "show" },
18
+ { :request_method => /^GET|POST$/ }
19
+ )
20
+
21
+ route_2 = FakeRailsRoute.new(
22
+ "route_with_no_controller",
23
+ FakeRailsRoutePathObject.new(spec: '/fake_descendant'),
24
+ { },
25
+ { :request_method => /^PATCH$/ }
26
+ )
27
+
28
+ route_3 = FakeRailsRoute.new(
29
+ "route_with_invalid_controller",
30
+ FakeRailsRoutePathObject.new(spec: '/fake_descendant'),
31
+ { controller: "invalid_controller", action: "show" },
32
+ { :request_method => /^GET$/ }
33
+ )
34
+
35
+ routes = FakeRailsRoutesObject.new([ route_1, route_2, route_3 ])
36
+
37
+ FakeRailsApplication.new(true, routes)
38
+ end
39
+ end
40
+ end
41
+
42
+
43
+ class FakeBasePresenter; end
44
+ class FakeDescendantPresenter < FakeBasePresenter; end
45
+
46
+ class FakeBaseController; end
47
+ class FakeDescendantController < FakeBaseController; end
48
+
49
+ class FakeNonDescendantController; end
@@ -0,0 +1,18 @@
1
+ shared_examples "atlas taker" do
2
+ describe "#initialize" do
3
+ it "requires an atlas" do
4
+ expect { described_class.new }.to raise_error ArgumentError
5
+ expect { described_class.new(atlas) }.not_to raise_error
6
+ end
7
+ end
8
+
9
+ describe "#find_by_class" do
10
+ let(:klass) { Class.new }
11
+
12
+ it "delegates to the atlas" do
13
+ mock(atlas).find_by_class(klass)
14
+ subject.find_by_class(klass)
15
+ end
16
+ end
17
+ end
18
+
@@ -0,0 +1,14 @@
1
+ shared_examples "formattable" do
2
+ describe "formatting" do
3
+ let(:formatter) { Object.new }
4
+ let(:formatters) { { markdown: formatter } }
5
+ let(:options) { { formatters: formatters } }
6
+
7
+ describe "#formatted_as" do
8
+ it "looks up the formatter and calls that" do
9
+ mock(formatter).call(subject, { test: true }) { "blah" }
10
+ expect(subject.formatted_as(:markdown, test: true)).to eq "blah"
11
+ end
12
+ end
13
+ end
14
+ end
data/spec/spec_helper.rb CHANGED
@@ -12,6 +12,8 @@ require_relative 'spec_helpers/schema'
12
12
  require_relative 'spec_helpers/db'
13
13
  require_relative 'spec_helpers/rr'
14
14
 
15
+ Dir["./spec/shared/**/*.rb"].each {|f| require f}
16
+
15
17
  DatabaseCleaner.strategy = :transaction
16
18
 
17
19
  RSpec.configure do |config|
@@ -44,4 +44,4 @@ Attachments::TaskAttachment.create!(id: 2, subject: Task.first, filename: 'I am
44
44
  # Show that the base class is always used as the brainstem_key for attachments as polymorphic association targets
45
45
 
46
46
  # Use Group / Workspace as the polymorphic target of an association where we do not
47
- # want the baseclass to be used as the brainstem_key (like line_items0)
47
+ # want the baseclass to be used as the brainstem_key (like line_items0)
@@ -1,4 +1,4 @@
1
- class WorkspacePresenter < Brainstem::Presenter
1
+ class WorkspacePresenter < Brainstem::Presenter
2
2
  presents Workspace
3
3
 
4
4
  helper do
@@ -10,8 +10,8 @@ class WorkspacePresenter < Brainstem::Presenter
10
10
  preload :lead_user
11
11
 
12
12
  conditionals do
13
- model :title_is_hello, lambda { |model| model.title == 'hello' }, 'visible when the title is hello'
14
- request :user_is_bob, lambda { current_user == 'bob' }, 'visible only to bob'
13
+ model :title_is_hello, lambda { |model| model.title == 'hello' }, info: 'visible when the title is hello'
14
+ request :user_is_bob, lambda { current_user == 'bob' }, info: 'visible only to bob'
15
15
  end
16
16
 
17
17
  fields do
@@ -32,23 +32,26 @@ class WorkspacePresenter < Brainstem::Presenter
32
32
  field :access_level, :integer, dynamic: lambda { 2 }
33
33
  end
34
34
 
35
- field :hello_title, :string, 'the title, when hello',
35
+ field :hello_title, :string,
36
+ info: 'the title, when hello',
36
37
  dynamic: lambda { 'title is hello' },
37
38
  if: :title_is_hello
38
39
 
39
- field :secret, :string, 'a secret, via secret_info',
40
+ field :secret, :string,
41
+ info: 'a secret, via secret_info',
40
42
  via: :secret_info,
41
43
  if: [:user_is_bob, :title_is_hello]
42
44
 
43
45
  with_options if: :user_is_bob do
44
- field :bob_title, :string, 'another name for the title, only for Bob',
46
+ field :bob_title, :string,
47
+ info: 'another name for the title, only for Bob',
45
48
  via: :title
46
49
  end
47
50
  end
48
51
 
49
52
  associations do
50
- association :tasks, Task, 'The Tasks in this Workspace'
51
- association :lead_user, User, 'The user who runs this Workspace'
53
+ association :tasks, Task, info: 'The Tasks in this Workspace'
54
+ association :lead_user, User, info: 'The user who runs this Workspace'
52
55
  # association :subtasks, Task, 'Only Tasks in this Workspace that are subtasks',
53
56
  # dynamic: lambda { |workspace| workspace.tasks.where('parent_id IS NOT NULL') },
54
57
  # brainstem_key: 'sub_tasks'
@@ -63,7 +66,7 @@ class CheesePresenter < Brainstem::Presenter
63
66
  end
64
67
 
65
68
  associations do
66
- association :user, User, 'The owner of the cheese'
69
+ association :user, User, info: 'The owner of the cheese'
67
70
  end
68
71
  end
69
72
 
@@ -75,7 +78,7 @@ class GroupPresenter < Brainstem::Presenter
75
78
  end
76
79
 
77
80
  associations do
78
- association :tasks, Task, 'The Tasks in this Group'
81
+ association :tasks, Task, info: 'The Tasks in this Group'
79
82
  end
80
83
  end
81
84
 
@@ -88,10 +91,12 @@ class TaskPresenter < Brainstem::Presenter
88
91
 
89
92
  associations do
90
93
  association :sub_tasks, Task
91
- association :other_tasks, Task, 'another copy of the sub_tasks association',
94
+ association :other_tasks, Task,
95
+ info: 'another copy of the sub_tasks association',
92
96
  via: :sub_tasks
93
97
  association :workspace, Workspace
94
- association :restricted, Task, 'only available on only / show requests',
98
+ association :restricted, Task,
99
+ info: 'only available on only / show requests',
95
100
  dynamic: lambda { |task| Task.last },
96
101
  restrict_to_only: true
97
102
  end
@@ -105,7 +110,8 @@ class UserPresenter < Brainstem::Presenter
105
110
  end
106
111
 
107
112
  associations do
108
- association :odd_workspaces, Workspace, 'only the odd numbered workspaces',
113
+ association :odd_workspaces, Workspace,
114
+ info: 'only the odd numbered workspaces',
109
115
  dynamic: lambda { |user| user.workspaces.select { |workspace| workspace.id % 2 == 1 } }
110
116
  end
111
117
  end
@@ -135,4 +141,4 @@ class AttachmentPresenter < Brainstem::Presenter
135
141
  associations do
136
142
  association :subject, :polymorphic
137
143
  end
138
- end
144
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brainstem
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mavenlink
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-08 00:00:00.000000000 Z
11
+ date: 2017-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -168,7 +168,8 @@ description: Brainstem allows you to create rich API presenters that know how to
168
168
  sort, and include associations.
169
169
  email:
170
170
  - opensource@mavenlink.com
171
- executables: []
171
+ executables:
172
+ - brainstem
172
173
  extensions: []
173
174
  extra_rdoc_files: []
174
175
  files:
@@ -179,12 +180,48 @@ files:
179
180
  - LICENSE
180
181
  - README.md
181
182
  - Rakefile
183
+ - bin/brainstem
182
184
  - brainstem.gemspec
185
+ - docs/api_doc_generator.markdown
186
+ - docs/brainstem_executable.markdown
187
+ - docs/docgen.png
188
+ - docs/docgen_ascii.txt
189
+ - docs/executable.png
190
+ - docs/executable_ascii.txt
183
191
  - lib/brainstem.rb
192
+ - lib/brainstem/api_docs.rb
193
+ - lib/brainstem/api_docs/abstract_collection.rb
194
+ - lib/brainstem/api_docs/atlas.rb
195
+ - lib/brainstem/api_docs/builder.rb
196
+ - lib/brainstem/api_docs/controller.rb
197
+ - lib/brainstem/api_docs/controller_collection.rb
198
+ - lib/brainstem/api_docs/endpoint.rb
199
+ - lib/brainstem/api_docs/endpoint_collection.rb
200
+ - lib/brainstem/api_docs/exceptions.rb
201
+ - lib/brainstem/api_docs/formatters/abstract_formatter.rb
202
+ - lib/brainstem/api_docs/formatters/markdown/controller_formatter.rb
203
+ - lib/brainstem/api_docs/formatters/markdown/endpoint_collection_formatter.rb
204
+ - lib/brainstem/api_docs/formatters/markdown/endpoint_formatter.rb
205
+ - lib/brainstem/api_docs/formatters/markdown/helper.rb
206
+ - lib/brainstem/api_docs/formatters/markdown/presenter_formatter.rb
207
+ - lib/brainstem/api_docs/introspectors/abstract_introspector.rb
208
+ - lib/brainstem/api_docs/introspectors/rails_introspector.rb
209
+ - lib/brainstem/api_docs/presenter.rb
210
+ - lib/brainstem/api_docs/presenter_collection.rb
211
+ - lib/brainstem/api_docs/resolver.rb
212
+ - lib/brainstem/api_docs/sinks/abstract_sink.rb
213
+ - lib/brainstem/api_docs/sinks/controller_presenter_multifile_sink.rb
214
+ - lib/brainstem/api_docs/sinks/stdout_sink.rb
215
+ - lib/brainstem/cli.rb
216
+ - lib/brainstem/cli/abstract_command.rb
217
+ - lib/brainstem/cli/generate_api_docs_command.rb
218
+ - lib/brainstem/concerns/controller_dsl.rb
184
219
  - lib/brainstem/concerns/controller_param_management.rb
185
220
  - lib/brainstem/concerns/error_presentation.rb
221
+ - lib/brainstem/concerns/formattable.rb
186
222
  - lib/brainstem/concerns/inheritable_configuration.rb
187
223
  - lib/brainstem/concerns/lookup.rb
224
+ - lib/brainstem/concerns/optional.rb
188
225
  - lib/brainstem/concerns/presenter_dsl.rb
189
226
  - lib/brainstem/controller_methods.rb
190
227
  - lib/brainstem/dsl/association.rb
@@ -195,6 +232,7 @@ files:
195
232
  - lib/brainstem/dsl/configuration.rb
196
233
  - lib/brainstem/dsl/field.rb
197
234
  - lib/brainstem/dsl/fields_block.rb
235
+ - lib/brainstem/help_text.txt
198
236
  - lib/brainstem/preloader.rb
199
237
  - lib/brainstem/presenter.rb
200
238
  - lib/brainstem/presenter_collection.rb
@@ -207,9 +245,37 @@ files:
207
245
  - lib/brainstem/test_helpers.rb
208
246
  - lib/brainstem/time_classes.rb
209
247
  - lib/brainstem/version.rb
248
+ - spec/brainstem/api_docs/abstract_collection_spec.rb
249
+ - spec/brainstem/api_docs/atlas_spec.rb
250
+ - spec/brainstem/api_docs/builder_spec.rb
251
+ - spec/brainstem/api_docs/controller_collection_spec.rb
252
+ - spec/brainstem/api_docs/controller_spec.rb
253
+ - spec/brainstem/api_docs/endpoint_collection_spec.rb
254
+ - spec/brainstem/api_docs/endpoint_spec.rb
255
+ - spec/brainstem/api_docs/formatters/abstract_formatter_spec.rb
256
+ - spec/brainstem/api_docs/formatters/markdown/controller_formatter_spec.rb
257
+ - spec/brainstem/api_docs/formatters/markdown/endpoint_collection_formatter_spec.rb
258
+ - spec/brainstem/api_docs/formatters/markdown/endpoint_formatter_spec.rb
259
+ - spec/brainstem/api_docs/formatters/markdown/helper_spec.rb
260
+ - spec/brainstem/api_docs/formatters/markdown/presenter_formatter_spec.rb
261
+ - spec/brainstem/api_docs/introspectors/abstract_introspector_spec.rb
262
+ - spec/brainstem/api_docs/introspectors/rails_introspector_spec.rb
263
+ - spec/brainstem/api_docs/presenter_collection_spec.rb
264
+ - spec/brainstem/api_docs/presenter_spec.rb
265
+ - spec/brainstem/api_docs/resolver_spec.rb
266
+ - spec/brainstem/api_docs/sinks/abstract_sink_spec.rb
267
+ - spec/brainstem/api_docs/sinks/controller_presenter_multifile_sink_spec.rb
268
+ - spec/brainstem/api_docs/sinks/stdout_sink_spec.rb
269
+ - spec/brainstem/api_docs_spec.rb
270
+ - spec/brainstem/cli/abstract_command_spec.rb
271
+ - spec/brainstem/cli/generate_api_docs_command_spec.rb
272
+ - spec/brainstem/cli_spec.rb
273
+ - spec/brainstem/concerns/controller_dsl_spec.rb
210
274
  - spec/brainstem/concerns/controller_param_management_spec.rb
211
275
  - spec/brainstem/concerns/error_presentation_spec.rb
276
+ - spec/brainstem/concerns/formattable_spec.rb
212
277
  - spec/brainstem/concerns/inheritable_configuration_spec.rb
278
+ - spec/brainstem/concerns/optional_spec.rb
213
279
  - spec/brainstem/concerns/presenter_dsl_spec.rb
214
280
  - spec/brainstem/controller_methods_spec.rb
215
281
  - spec/brainstem/dsl/association_spec.rb
@@ -223,6 +289,9 @@ files:
223
289
  - spec/brainstem/query_strategies/filter_and_search_spec.rb
224
290
  - spec/brainstem/query_strategies/filter_or_search_spec.rb
225
291
  - spec/brainstem_spec.rb
292
+ - spec/dummy/rails.rb
293
+ - spec/shared/atlas_taker.rb
294
+ - spec/shared/formattable.rb
226
295
  - spec/spec_helper.rb
227
296
  - spec/spec_helpers/db.rb
228
297
  - spec/spec_helpers/presenters.rb
@@ -243,19 +312,47 @@ required_ruby_version: !ruby/object:Gem::Requirement
243
312
  version: '0'
244
313
  required_rubygems_version: !ruby/object:Gem::Requirement
245
314
  requirements:
246
- - - ">"
315
+ - - ">="
247
316
  - !ruby/object:Gem::Version
248
- version: 1.3.1
317
+ version: '0'
249
318
  requirements: []
250
319
  rubyforge_project:
251
- rubygems_version: 2.4.8
320
+ rubygems_version: 2.5.2
252
321
  signing_key:
253
322
  specification_version: 4
254
323
  summary: ActiveRecord presenters with a rich request API
255
324
  test_files:
325
+ - spec/brainstem/api_docs/abstract_collection_spec.rb
326
+ - spec/brainstem/api_docs/atlas_spec.rb
327
+ - spec/brainstem/api_docs/builder_spec.rb
328
+ - spec/brainstem/api_docs/controller_collection_spec.rb
329
+ - spec/brainstem/api_docs/controller_spec.rb
330
+ - spec/brainstem/api_docs/endpoint_collection_spec.rb
331
+ - spec/brainstem/api_docs/endpoint_spec.rb
332
+ - spec/brainstem/api_docs/formatters/abstract_formatter_spec.rb
333
+ - spec/brainstem/api_docs/formatters/markdown/controller_formatter_spec.rb
334
+ - spec/brainstem/api_docs/formatters/markdown/endpoint_collection_formatter_spec.rb
335
+ - spec/brainstem/api_docs/formatters/markdown/endpoint_formatter_spec.rb
336
+ - spec/brainstem/api_docs/formatters/markdown/helper_spec.rb
337
+ - spec/brainstem/api_docs/formatters/markdown/presenter_formatter_spec.rb
338
+ - spec/brainstem/api_docs/introspectors/abstract_introspector_spec.rb
339
+ - spec/brainstem/api_docs/introspectors/rails_introspector_spec.rb
340
+ - spec/brainstem/api_docs/presenter_collection_spec.rb
341
+ - spec/brainstem/api_docs/presenter_spec.rb
342
+ - spec/brainstem/api_docs/resolver_spec.rb
343
+ - spec/brainstem/api_docs/sinks/abstract_sink_spec.rb
344
+ - spec/brainstem/api_docs/sinks/controller_presenter_multifile_sink_spec.rb
345
+ - spec/brainstem/api_docs/sinks/stdout_sink_spec.rb
346
+ - spec/brainstem/api_docs_spec.rb
347
+ - spec/brainstem/cli/abstract_command_spec.rb
348
+ - spec/brainstem/cli/generate_api_docs_command_spec.rb
349
+ - spec/brainstem/cli_spec.rb
350
+ - spec/brainstem/concerns/controller_dsl_spec.rb
256
351
  - spec/brainstem/concerns/controller_param_management_spec.rb
257
352
  - spec/brainstem/concerns/error_presentation_spec.rb
353
+ - spec/brainstem/concerns/formattable_spec.rb
258
354
  - spec/brainstem/concerns/inheritable_configuration_spec.rb
355
+ - spec/brainstem/concerns/optional_spec.rb
259
356
  - spec/brainstem/concerns/presenter_dsl_spec.rb
260
357
  - spec/brainstem/controller_methods_spec.rb
261
358
  - spec/brainstem/dsl/association_spec.rb
@@ -269,6 +366,9 @@ test_files:
269
366
  - spec/brainstem/query_strategies/filter_and_search_spec.rb
270
367
  - spec/brainstem/query_strategies/filter_or_search_spec.rb
271
368
  - spec/brainstem_spec.rb
369
+ - spec/dummy/rails.rb
370
+ - spec/shared/atlas_taker.rb
371
+ - spec/shared/formattable.rb
272
372
  - spec/spec_helper.rb
273
373
  - spec/spec_helpers/db.rb
274
374
  - spec/spec_helpers/presenters.rb