configuration_service 2.0.4 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,24 +14,24 @@ module ConfigurationService
14
14
  # It keeps no domain state, because that would couple it to the
15
15
  # service implementation. By making no assumptions at all about the API
16
16
  # or data, it allows implementors to produce service implementations
17
- # that do not adhere to the anticipated ConfigurationService::Base API,
18
- # by writing their own OrchestrationProvider from scratch.
17
+ # that do not adhere to the anticipated {ConfigurationService::Base} API,
18
+ # by writing their own test orchestration provider from scratch
19
+ # instead of extending {ConfigurationService::Test::OrchestrationProvider}.
19
20
  #
20
- # However, implementors who are trying to produce ConfigurationService::Base
21
- # providers should extend OrchestrationProvider, which anticipates a
22
- # compatible provider API.
21
+ # However, implementors who are trying to produce {ConfigurationService::Base}
22
+ # providers should extend {ConfigurationService::Test::OrchestrationProvider},
23
+ # which anticipates a compatible provider API.
23
24
  #
24
- # Note that the +response+ instance variable is not domain state; it is
25
- # a test artifact (Response or similar) that orchestration providers use
26
- # to wrap responses from the service provider.
25
+ # Note that the +@response+ instance variable is not domain state; it is
26
+ # a test artifact ({ConfigurationService::Test::Response} or similar)
27
+ # that orchestration providers use to wrap responses from the configuration service.
27
28
  #
28
29
  class Orchestrator
29
30
 
30
31
  ##
31
- # Return a new orchestrator initialized with a new instance of +provider_class+.
32
32
  #
33
- # The provider is expected to use a consistent configuration +identifier+ for
34
- # all publishing and consuming operations.
33
+ # @param [Class] provider_class
34
+ # the test orchestration provider class, which should have a default/nullary constructor
35
35
  #
36
36
  def initialize(provider_class)
37
37
  @provider = provider_class.new
@@ -68,9 +68,9 @@ module ConfigurationService
68
68
  ##
69
69
  # Return a published configuration fixture
70
70
  #
71
- # E.g. as arranged by #given_existing_configuration.
71
+ # E.g. as arranged by {#given_existing_configuration}.
72
72
  #
73
- # TODO remove; step definitions expect this to be Comparable
73
+ # @todo replace with predicate: this exposes domain state
74
74
  #
75
75
  def existing_configuration
76
76
  @provider.existing_configuration
@@ -79,24 +79,25 @@ module ConfigurationService
79
79
  ##
80
80
  # Return the revision of a published configuration fixture
81
81
  #
82
- # E.g. as arranged by #given_existing_configuration.
82
+ # E.g. as arranged by {#given_existing_configuration}.
83
83
  #
84
- # TODO remove; step definitions expect this to be Comparable
84
+ # @todo replace with predicate: this exposes domain state
85
85
  #
86
86
  def existing_revision
87
87
  @provider.existing_revision
88
88
  end
89
89
 
90
90
  ##
91
- # Authorize the next consuming or publishing operation for +activity+
91
+ # Authorize the next publish or request activity
92
92
  #
93
- # Valid activities (as per ACTIVITY_ROLE_MAP in ConfigurationService::Test::OrchestrationProvider) are:
93
+ # @param [Symbol] activity
94
+ # Valid activities (as per {ConfigurationService::Test::OrchestrationProvider::ACTIVITY_ROLE_MAP}) are:
94
95
  #
95
- # * +:requesting_configurations+
96
- # * +:publishing_configurations+
97
- # * +:nothing+
96
+ # * +:requesting_configurations+
97
+ # * +:publishing_configurations+
98
+ # * +:nothing+
98
99
  #
99
- # Where possible, the orchestration provider should authorize +:nothing+
100
+ # Where possible, the test orchestration provider should authorize +:nothing+
100
101
  # by providing valid credentials that don't allow operations on the
101
102
  # configuration +identifier+ that it tests against.
102
103
  #
@@ -108,60 +109,69 @@ module ConfigurationService
108
109
  ##
109
110
  # Remove any previous authorization
110
111
  #
111
- # E.g. as arranged by #authorize.
112
+ # E.g. as arranged by {#authorize}.
112
113
  #
113
114
  def deauthorize
114
115
  @provider.deauthorize
115
116
  end
116
117
 
117
118
  ##
118
- # Perform a consuming operation against the service under test
119
+ # Request configuration from the service under test
119
120
  #
120
- # The provider is expected to wrap the response in a Response (or
121
- # simimlar) and return that.
121
+ # The test orchestration provider is expected to wrap the response in a {ConfigurationService::Test::Response}
122
+ # (or simimlar) and return that.
122
123
  #
123
124
  def request_configuration
124
125
  @response = @provider.request_configuration
125
126
  end
126
127
 
127
128
  ##
128
- # Perform a publishing operation against the service under test
129
+ # Publish configuration through the service under test
129
130
  #
130
- # The provider is expected to wrap the response in a Response (or
131
- # simimlar) and return that.
131
+ # The test orchestration provider is expected to wrap the response in a {ConfigurationService::Test::Response}
132
+ # (or simimlar) and return that.
132
133
  #
133
134
  def publish_configuration
134
135
  @response = @provider.publish_configuration
135
136
  end
136
137
 
137
138
  ##
138
- # True if the last consuming or publishing operation was allowed
139
+ # Whether the last publish or request was allowed
140
+ #
141
+ # @see ConfigurationService::Test::Response::Success#allowed?
142
+ # @see ConfigurationService::Test::Response::Failure#allowed?
139
143
  #
140
144
  def request_allowed?
141
145
  @response.allowed?
142
146
  end
143
147
 
144
148
  ##
145
- # True if the last consuming or publishing operation failed
149
+ # Whether the last publish or request was allowed but failed
146
150
  #
147
- # Operations that were not allowed (as per #request_allowed?) or
148
- # considered failed.
151
+ # @see ConfigurationService::Test::Response::Success#failed?
152
+ # @see ConfigurationService::Test::Response::Failure#failed?
149
153
  #
150
154
  def request_failed?
151
155
  @response.failed?
152
156
  end
153
157
 
154
158
  ##
155
- # True if the last consuming operation did not return data
159
+ # True if the last request not return configuration data
160
+ #
161
+ # @see ConfigurationService::Test::Response::Success#found?
162
+ # @see ConfigurationService::Test::Response::Failure#found?
156
163
  #
157
164
  def request_not_found?
158
165
  not @response.found?
159
166
  end
160
167
 
161
168
  ##
162
- # True if the last consuming operation did not return data
169
+ # True if the last request did consuming operation did not return data
163
170
  #
164
- # TODO: distinguish #request_not_matched? to mean "found data, but filtered out by metadata filter"
171
+ # @see ConfigurationService::Test::Response::Success#found?
172
+ # @see ConfigurationService::Test::Response::Failure#found?
173
+ #
174
+ # @todo distinguish {#request_not_matched?} to mean "found data, but filtered out by metadata filter"
165
175
  #
166
176
  def request_not_matched?
167
177
  not @response.found?
@@ -170,7 +180,9 @@ module ConfigurationService
170
180
  ##
171
181
  # The last published or consumed configuration data
172
182
  #
173
- # Note that this is the data itself, not a Configuration object.
183
+ # @return [Hash] configuration data (not a {ConfigurationService::Configuration} object)
184
+ #
185
+ # @todo replace with predicate: this exposes domain state
174
186
  #
175
187
  def published_configuration
176
188
  @response.data
@@ -178,7 +190,11 @@ module ConfigurationService
178
190
  alias :requested_configuration :published_configuration
179
191
 
180
192
  ##
181
- # The revision of the last published or consumed configuration
193
+ # The revision of the last published or consumed configuration metadata
194
+ #
195
+ # @return [String] metadata revision
196
+ #
197
+ # @todo replace with predicate: this exposes domain state
182
198
  #
183
199
  def published_revision
184
200
  @response.revision
@@ -187,6 +203,10 @@ module ConfigurationService
187
203
  ##
188
204
  # The last published metadata
189
205
  #
206
+ # @return [Hash] configuration metadata
207
+ #
208
+ # @todo replace with predicate: this exposes domain state
209
+ #
190
210
  def published_metadata
191
211
  @response.metadata
192
212
  end
@@ -211,7 +231,7 @@ module ConfigurationService
211
231
  # Environmental service configuration is configuration for bootstrapping
212
232
  # a configuration service and provider.
213
233
  #
214
- # TODO This method is imperative
234
+ # @todo replace with declarative test that delegates to orchestration provider
215
235
  #
216
236
  def given_environmental_service_configuration
217
237
  sp_env = @provider.service_provider_configuration.inject({}) do |m, (k, v)|
@@ -228,11 +248,10 @@ module ConfigurationService
228
248
  ##
229
249
  # Bootstrap a configuration service environmentally
230
250
  #
231
- # Environmental service configuration (as arranged by
232
- # #given_environmental_service_configuration) is given to an
233
- # EnvironmentContext factory to create a service configuration instance.
251
+ # Environmental service configuration (as arranged by {#given_environmental_service_configuration})
252
+ # is given to an {ConfigurationService::Factory::EnvironmentContext} factory to create a service configuration instance.
234
253
  #
235
- # TODO This method is imperative
254
+ # @todo replace with declarative test that delegates to orchestration provider
236
255
  #
237
256
  def bootstrap_configuration_service_environmentally
238
257
  factory = ConfigurationService::Factory::EnvironmentContext.new(@env, "CFGSRV")
@@ -242,7 +261,7 @@ module ConfigurationService
242
261
  ##
243
262
  # Tests that a bootstrapped configuration service is functional
244
263
  #
245
- # TODO This method is imperative
264
+ # @todo replace with declarative test that delegates to orchestration provider
246
265
  #
247
266
  def bootstrapped_configuration_service_functional?
248
267
  response = begin
@@ -256,7 +275,7 @@ module ConfigurationService
256
275
  ##
257
276
  # Tests that environmental service configuration is scrubbed
258
277
  #
259
- # TODO This method is imperative
278
+ # @todo replace with declarative test that delegates to orchestration provider
260
279
  #
261
280
  def environmental_service_configuration_scrubbed?
262
281
  !@env.include?("CFGSRV_TOKEN")
@@ -3,25 +3,38 @@ module ConfigurationService
3
3
  module Test
4
4
 
5
5
  ##
6
- # Builds an Orchestrator using a provider selected from the environment
6
+ # A factory for building a test orchestrator using an orchestration provider selected from the environment
7
+ #
8
+ # @example cucumber features/support/env.rb
9
+ # require 'configuration_service/test'
10
+ #
11
+ # Before do
12
+ # begin
13
+ # @test = ConfigurationService::Test::OrchestratorEnvironmentFactory.build
14
+ # rescue
15
+ # Cucumber.wants_to_quit = true
16
+ # raise
17
+ # end
18
+ # end
7
19
  #
8
20
  module OrchestratorEnvironmentFactory
9
21
 
10
22
  ##
11
- # Looks up the provider registered to the OrchestrationProviderRegistry
12
- # with the name provided in the +TEST_ORCHESTRATION_PROVIDER+ environment
13
- # variable, and returns a new Orchestrator initialized with that
14
- # provider.
23
+ # Build a test orchestrator
24
+ #
25
+ # Looks up the test orchestration provider class registered to the {ConfigurationService::Test::OrchestrationProviderRegistry}
26
+ # with the name provided in the +TEST_ORCHESTRATION_PROVIDER+ environment variable,
27
+ # and returns a new {ConfigurationService::Test::Orchestrator} initialized with an instance of that provider class.
15
28
  #
16
- # Returns a new Orchestrator, or raises a +RuntimeError+ if the
17
- # +TEST_ORCHESTRATION_PROVIDER+ environment variable does not name a
18
- # provider known to the OrchestrationProviderRegistry.
29
+ # @return [ConfigurationService::Test::Orchestrator] the test orchestrator
30
+ # @raise [RuntimeError] if the +TEST_ORCHESTRATION_PROVIDER+ environment variable
31
+ # does not name a provider known to the {ConfigurationService::Test::OrchestrationProviderRegistry}
19
32
  #
20
33
  def self.build
21
34
  identifier = ENV["TEST_ORCHESTRATION_PROVIDER"] or raise "missing environment variable: TEST_ORCHESTRATION_PROVIDER"
22
35
  registry = ConfigurationService::Test::OrchestrationProviderRegistry.instance
23
36
  provider = registry.lookup(identifier) or raise "unknown test orchestration provider: #{identifier}"
24
- @test = ConfigurationService::Test::Orchestrator.new(provider)
37
+ ConfigurationService::Test::Orchestrator.new(provider)
25
38
  end
26
39
 
27
40
  end
@@ -5,68 +5,81 @@ module ConfigurationService
5
5
  module Test
6
6
 
7
7
  ##
8
- # Encapsulation of ConfigurationService::Base responses
8
+ # Encapsulation of configuration service responses
9
9
  #
10
- # See Success and Failure.
10
+ # Used by test orchestration providers to decouple the test orchestrator from the semantics of API responses.
11
11
  #
12
12
  module Response
13
13
 
14
14
  ##
15
- # Encapsulates a non-error ConfigurationService::Base response
15
+ # Encapsulates a non-error configuration service response
16
16
  #
17
- # This allows an OrchestrationProvider to decouple the Orchestrator
18
- # from the implementation details of the service provider's responses.
17
+ # This allows an {ConfigurationService::Test::OrchestrationProvider}
18
+ # to decouple the {ConfigurationService::Test::Orchestrator} from the semantics of the configuration service's responses.
19
19
  #
20
20
  class Success
21
21
 
22
22
  ##
23
- # Initialize a new Success with a response
24
- #
25
- # The response should be a Configuration object or +nil+ (because
26
- # the ConfigurationService::Base API communicates +not found+ as
27
- # +nil+).
23
+ # @param [ConfigurationService::Configuration, nil] response
24
+ # a configuration service response, or +nil+ if a {ConfigurationService::ConfigurationNotFoundError} was raised
28
25
  #
29
26
  def initialize(response)
30
27
  @response = response
31
28
  end
32
29
 
33
30
  ##
34
- # Always true
31
+ # Whether the request was allowed
32
+ #
33
+ # @return [true] always
35
34
  #
36
35
  def allowed?
37
36
  true
38
37
  end
39
38
 
40
39
  ##
41
- # Always false
40
+ # Whether the request was authorized but failed
41
+ #
42
+ # @return [false] always
42
43
  #
43
44
  def failed?
44
45
  false
45
46
  end
46
47
 
47
48
  ##
48
- # True if the +response+ was not +nil+
49
+ # Whether the identified configuration was found
50
+ #
51
+ # @return [true] if the +response+ was not +nil+
52
+ # @return [false] if the +response+ was +nil+
49
53
  #
50
54
  def found?
51
55
  not @response.nil?
52
56
  end
53
57
 
54
58
  ##
55
- # The configuration data dictionary of the response, or +nil+ if not #found?
59
+ # The configuration data dictionary of the response
60
+ #
61
+ # @return [Hash] if {#found?}
62
+ # @return [nil] if not {#found?}
56
63
  #
57
64
  def data
58
65
  @response and @response.data
59
66
  end
60
67
 
61
68
  ##
62
- # The revision from the response's metadata, or +nil+ if not #found?
69
+ # The configuration metadata's revision
70
+ #
71
+ # @return [String] if {#found?}
72
+ # @return [nil] if not {#found?}
63
73
  #
64
74
  def revision
65
75
  @response and @response.metadata["revision"]
66
76
  end
67
77
 
68
78
  ##
69
- # The metadata dictionary of the response, or +nil+ if not #found?
79
+ # The configuration metadata
80
+ #
81
+ # @return [Hash] if {#found?}
82
+ # @return [nil] if not {#found?}
70
83
  #
71
84
  def metadata
72
85
  @response and @response.metadata
@@ -75,58 +88,73 @@ module ConfigurationService
75
88
  end
76
89
 
77
90
  ##
78
- # Encapsulates an error ConfigurationService::Base response
91
+ # Encapsulates a configuration service error
79
92
  #
80
- # This allows an OrchestrationProvider to decouple the Orchestrator
81
- # from the implementation details of the service provider's error
82
- # handling.
93
+ # This allows a {ConfigurationService::Test::OrchestrationProvider}
94
+ # to decouple the {ConfigurationService::Test::Orchestrator}
95
+ # from the semantics of the configuration service's error handling.
83
96
  #
84
97
  class Failure
85
98
 
86
99
  ##
87
- # Initialize a new Failure with an exception
100
+ # @param [ConfigurationService::Error] exception
101
+ # a configuration service error
88
102
  #
89
103
  def initialize(exception)
90
104
  @exception = exception
91
105
  end
92
106
 
93
107
  ##
94
- # True unless the exception was an AuthorizationError
108
+ # Whether the request was allowed
109
+ #
110
+ # @return [true] if the request was allowed
111
+ # @return [false] if the request was a not allowed
95
112
  #
96
113
  def allowed?
97
114
  !@exception.is_a?(ConfigurationService::AuthorizationError)
98
115
  end
99
116
 
100
117
  ##
101
- # True if the exception was an Error but not an AuthorizationError
118
+ # Whether the request was authorized but failed
119
+ #
120
+ # @return [true] if the request was allowed but raised a {ConfigurationService::Error}
121
+ # @return [false] if the request was not allowed or raised an unexpected error
102
122
  #
103
123
  def failed?
104
124
  allowed? and @exception.is_a?(ConfigurationService::Error)
105
125
  end
106
126
 
107
127
  ##
108
- # Always false
128
+ # Whether the identified configuration was found
129
+ #
130
+ # @return [false] always
109
131
  #
110
132
  def found?
111
133
  false
112
134
  end
113
135
 
114
136
  ##
115
- # Raises +NotImplementedError+
137
+ # The configuration data dictionary of the response
138
+ #
139
+ # @raise [NotImplementedError] always
116
140
  #
117
141
  def data
118
142
  raise NotImplementedError, "configuration not available after #{@exception.inspect}"
119
143
  end
120
144
 
121
145
  ##
122
- # Raises +NotImplementedError+
146
+ # The configuration metadata's revision
147
+ #
148
+ # @raise [NotImplementedError] always
123
149
  #
124
150
  def revision
125
151
  raise NotImplementedError, "revision not available after #{@exception.inspect}"
126
152
  end
127
153
 
128
154
  ##
129
- # Raises +NotImplementedError+
155
+ # The configuration metadata's revision
156
+ #
157
+ # @raise [NotImplementedError] always
130
158
  #
131
159
  def metadata
132
160
  raise NotImplementedError, "metadata not available after #{@exception.inspect}"
@@ -8,59 +8,67 @@ module ConfigurationService
8
8
  module Test
9
9
 
10
10
  ##
11
- # Test Orchestrator provider for testing the Stub service provider
11
+ # Test orchestration provider for testing the {ConfigurationService::Provider::Stub} service provider
12
12
  #
13
- # Registered to the OrchestrationProviderRegistry as +stub+.
13
+ # Registered to the {ConfigurationService::Test::OrchestrationProviderRegistry} as "stub".
14
14
  #
15
15
  class StubOrchestrationProvider < OrchestrationProvider
16
16
 
17
+ ##
18
+ # The registered identifier of the service provider under test
19
+ #
20
+ # @see ConfigurationService::Test::OrchestrationProvider#service_provider_id
21
+ #
17
22
  def service_provider_id
18
23
  "stub"
19
24
  end
20
25
 
21
26
  ##
22
- # Return configuration for a Stub
27
+ # The configuration for the service provider under test
23
28
  #
24
- def service_provider_configuration # :doc:
29
+ # @see ConfigurationService::Test::OrchestrationProvider#service_provider_configuration
30
+ #
31
+ def service_provider_configuration
25
32
  {name: "Stub configuration service provider"}
26
33
  end
27
34
 
28
- private
29
-
30
- ##
31
- # Returns a new Stub
32
- #
33
- def service_provider # :doc:
34
- ConfigurationService::Provider::Stub.new(service_provider_configuration)
35
- end
35
+ ##
36
+ # The service provider under test
37
+ #
38
+ # @see ConfigurationService::Test::OrchestrationProvider#service_provider
39
+ #
40
+ def service_provider
41
+ ConfigurationService::Provider::Stub.new(service_provider_configuration)
42
+ end
36
43
 
37
- ##
38
- # Returns a new Broken
39
- #
40
- def broken_service_provider # :doc:
41
- ConfigurationService::Provider::Broken.new
42
- end
44
+ ##
45
+ # A broken service provider
46
+ #
47
+ # @see ConfigurationService::Test::OrchestrationProvider#broken_service_provider
48
+ #
49
+ def broken_service_provider
50
+ ConfigurationService::Provider::Broken.new
51
+ end
43
52
 
44
- ##
45
- # Returns a token for +role+
46
- #
47
- # The token is taken from +BUILTIN_TOKENS+ in Stub
48
- #
49
- def token_for(role) # :doc:
50
- ConfigurationService::Provider::Stub::BUILTIN_TOKENS[role]
51
- end
53
+ ##
54
+ # Provide a token that authorizes a role
55
+ #
56
+ # The token is taken from {ConfigurationService::Provider::Stub::BUILTIN_TOKENS}
57
+ #
58
+ # @see ConfigurationService::Test::OrchestrationProvider#token_for
59
+ #
60
+ def token_for(role)
61
+ ConfigurationService::Provider::Stub::BUILTIN_TOKENS[role]
62
+ end
52
63
 
53
- ##
54
- # Delete configuration from the StubStore
55
- #
56
- # The consistently used configuration +identifier+ is used to identify
57
- # the configuration to be deleted.
58
- #
59
- # Deleting non-existent configuration is not an error.
60
- #
61
- def delete_configuration # :doc:
62
- ConfigurationService::Provider::StubStore.instance.delete(@identifier)
63
- end
64
+ ##
65
+ # Delete configuration data
66
+ #
67
+ # @see ConfigurationService::Test::OrchestrationProvider#delete_configuration
68
+ #
69
+ def delete_configuration
70
+ ConfigurationService::Provider::StubStore.instance.delete(@identifier)
71
+ end
64
72
 
65
73
  end
66
74
 
@@ -8,15 +8,16 @@ module ConfigurationService
8
8
  # The following are used directly by the cucumber test suite, and
9
9
  # should not be of immediate interest to implementors:
10
10
  #
11
- # * Orchestrator
12
- # * OrchestratorEnvironmentFactory
13
- # * StubOrchestrationProvider
11
+ # * {ConfigurationService::Test::Orchestrator} the declarative test orchestration API
12
+ # * {ConfigurationService::Test::OrchestratorEnvironmentFactory} test orchestrator factory
13
+ # * {ConfigurationService::Test::StubOrchestrationProvider} imperative test orchestration provider
14
+ # for the {ConfigurationService::Provider::Stub Stub} configuration service provider
14
15
  #
15
16
  # The following are of interest to implementors:
16
17
  #
17
- # * OrchestrationProviderRegistry
18
- # * Response
19
- # * OrchestrationProvider
18
+ # * {ConfigurationService::Test::OrchestrationProviderRegistry} registry of imperative test orchestration providers
19
+ # * {ConfigurationService::Test::Response} configuration service response wrappers
20
+ # * {ConfigurationService::Test::OrchestrationProvider} abstract imperative test orchestration provider
20
21
  #
21
22
  module Test
22
23
 
@@ -1,5 +1,5 @@
1
1
  module ConfigurationService
2
2
 
3
- VERSION = "2.0.4"
3
+ VERSION = "2.0.5"
4
4
 
5
5
  end
@@ -6,14 +6,14 @@ require "configuration_service/provider_registry"
6
6
  require "configuration_service/version"
7
7
 
8
8
  ##
9
- # See ConfigurationService::Base.
9
+ # See {ConfigurationService::Base}.
10
10
  #
11
11
  module ConfigurationService
12
12
 
13
13
  ##
14
- # Creates a new ConfigurationService::Base for the +provider+
14
+ # Creates a new {ConfigurationService::Base}
15
15
  #
16
- # See Base.new.
16
+ # @see ConfigurationService::Base#initialize
17
17
  #
18
18
  def self.new(identifier, token, provider)
19
19
  ConfigurationService::Base.new(identifier, token, provider)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: configuration_service
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sheldon Hearn
@@ -91,8 +91,8 @@ files:
91
91
  - .gitignore
92
92
  - .rspec
93
93
  - .travis.yml
94
+ - .yardopts
94
95
  - Gemfile
95
- - README.md
96
96
  - README.rdoc
97
97
  - Rakefile
98
98
  - features/authorization.feature
@@ -148,3 +148,4 @@ signing_key:
148
148
  specification_version: 4
149
149
  summary: Configuration service
150
150
  test_files: []
151
+ has_rdoc: