cathode 0.0.1

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.
Files changed (70) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +20 -0
  3. data/README.md +236 -0
  4. data/Rakefile +26 -0
  5. data/app/assets/javascripts/cathode/application.js +13 -0
  6. data/app/assets/stylesheets/cathode/application.css +13 -0
  7. data/app/controllers/cathode/base_controller.rb +47 -0
  8. data/app/helpers/cathode/application_helper.rb +4 -0
  9. data/app/views/layouts/cathode/application.html.erb +14 -0
  10. data/config/routes.rb +2 -0
  11. data/lib/cathode.rb +14 -0
  12. data/lib/cathode/_version.rb +3 -0
  13. data/lib/cathode/action.rb +82 -0
  14. data/lib/cathode/base.rb +28 -0
  15. data/lib/cathode/engine.rb +5 -0
  16. data/lib/cathode/exceptions.rb +3 -0
  17. data/lib/cathode/request.rb +15 -0
  18. data/lib/cathode/resource.rb +40 -0
  19. data/lib/cathode/version.rb +49 -0
  20. data/lib/tasks/cathode_tasks.rake +4 -0
  21. data/spec/dummy/README.rdoc +28 -0
  22. data/spec/dummy/Rakefile +6 -0
  23. data/spec/dummy/app/api/dummy_api.rb +4 -0
  24. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  25. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  26. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  27. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  28. data/spec/dummy/app/models/product.rb +2 -0
  29. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  30. data/spec/dummy/bin/bundle +3 -0
  31. data/spec/dummy/bin/rails +4 -0
  32. data/spec/dummy/bin/rake +4 -0
  33. data/spec/dummy/config.ru +4 -0
  34. data/spec/dummy/config/application.rb +28 -0
  35. data/spec/dummy/config/boot.rb +5 -0
  36. data/spec/dummy/config/database.yml +25 -0
  37. data/spec/dummy/config/environment.rb +5 -0
  38. data/spec/dummy/config/environments/development.rb +29 -0
  39. data/spec/dummy/config/environments/production.rb +80 -0
  40. data/spec/dummy/config/environments/test.rb +36 -0
  41. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  42. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  43. data/spec/dummy/config/initializers/inflections.rb +16 -0
  44. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  45. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  46. data/spec/dummy/config/initializers/session_store.rb +3 -0
  47. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  48. data/spec/dummy/config/locales/en.yml +23 -0
  49. data/spec/dummy/config/routes.rb +3 -0
  50. data/spec/dummy/db/development.sqlite3 +0 -0
  51. data/spec/dummy/db/migrate/20140404222551_create_products.rb +10 -0
  52. data/spec/dummy/db/schema.rb +23 -0
  53. data/spec/dummy/db/test.sqlite3 +0 -0
  54. data/spec/dummy/log/development.log +312 -0
  55. data/spec/dummy/log/test.log +12708 -0
  56. data/spec/dummy/public/404.html +58 -0
  57. data/spec/dummy/public/422.html +58 -0
  58. data/spec/dummy/public/500.html +57 -0
  59. data/spec/dummy/public/favicon.ico +0 -0
  60. data/spec/dummy/spec/factories/products.rb +8 -0
  61. data/spec/integration/api_spec.rb +88 -0
  62. data/spec/lib/action_spec.rb +140 -0
  63. data/spec/lib/base_spec.rb +28 -0
  64. data/spec/lib/request_spec.rb +5 -0
  65. data/spec/lib/resources_spec.rb +78 -0
  66. data/spec/lib/versioning_spec.rb +104 -0
  67. data/spec/spec_helper.rb +30 -0
  68. data/spec/support/factories/products.rb +3 -0
  69. data/spec/support/helpers.rb +9 -0
  70. metadata +259 -0
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe Cathode::Request do
4
+
5
+ end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ describe Cathode::Resource do
4
+ describe '.new' do
5
+ context 'with a nonexistent resource' do
6
+ subject { Cathode::Resource.new(:boxes, [:all]) }
7
+
8
+ it 'raises an error' do
9
+ expect { subject }.to raise_error(Cathode::UnknownResourceError)
10
+ end
11
+ end
12
+
13
+ context 'with an existing resource' do
14
+ context 'with all methods' do
15
+ subject { Cathode::Resource.new(:products, actions: [:all]) }
16
+
17
+ it 'creates a controller' do
18
+ subject
19
+ expect(Cathode::ProductsController).to_not be_nil
20
+ end
21
+
22
+ it 'adds index, create, update, show, delete routes' do
23
+ subject
24
+ expect(Cathode::Engine.routes.recognize_path('products', method: :get)).to be_true
25
+ expect(Cathode::Engine.routes.recognize_path('products/1', method: :get)).to be_true
26
+ expect(Cathode::Engine.routes.recognize_path('products', method: :post)).to be_true
27
+ expect(Cathode::Engine.routes.recognize_path('products/1', method: :put)).to be_true
28
+ expect(Cathode::Engine.routes.recognize_path('products/1', method: :delete)).to be_true
29
+ end
30
+
31
+ it 'does not add the edit route' do
32
+ expect { Cathode::Engine.routes.recognize_path('products/1/edit', method: :get) }.to raise_error
33
+ end
34
+ end
35
+
36
+ context 'with subset of methods' do
37
+ subject { Cathode::Resource.new(:products, actions: [:index, :show]) }
38
+
39
+ it 'creates a controller' do
40
+ subject
41
+ expect(Cathode::ProductsController).to_not be_nil
42
+ end
43
+
44
+ it 'adds routes only for the defined actions' do
45
+ subject
46
+ expect(Cathode::Engine.routes.recognize_path('products', method: :get)).to be_true
47
+ expect(Cathode::Engine.routes.recognize_path('products/1', method: :get)).to be_true
48
+ end
49
+
50
+ it 'does not add the other routes' do
51
+ subject
52
+ expect { Cathode::Engine.routes.recognize_path('products/1/edit', method: :get) }.to raise_error
53
+ expect { Cathode::Engine.routes.recognize_path('products', method: :post) }.to raise_error
54
+ expect { Cathode::Engine.routes.recognize_path('products/1', method: :put) }.to raise_error
55
+ expect { Cathode::Engine.routes.recognize_path('products/1', method: :delete) }.to raise_error
56
+ end
57
+ end
58
+
59
+ context 'with a block action' do
60
+ subject { Cathode::Resource.new(:products, &block) }
61
+
62
+ context 'and plain actions' do
63
+ let(:block) { proc { action :index } }
64
+
65
+ it 'adds the route' do
66
+ subject
67
+ expect(Cathode::Engine.routes.recognize_path('products', method: :get)).to be_true
68
+ end
69
+
70
+ it 'does not add other actions' do
71
+ subject
72
+ expect { Cathode::Engine.routes.recognize_path('products', method: :post) }.to raise_error
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,104 @@
1
+ require 'spec_helper'
2
+
3
+ describe Cathode::Version do
4
+ describe '.new' do
5
+ subject { Cathode::Version.new(version, &block) }
6
+
7
+ describe 'creation of semvers with flexible version input' do
8
+ let(:block) { nil }
9
+
10
+ context 'with bad version number' do
11
+ let(:version) { 'a' }
12
+
13
+ it 'raises an error' do
14
+ expect { subject }.to raise_error(ArgumentError)
15
+ end
16
+ end
17
+
18
+ context 'with good version' do
19
+ context 'with integer' do
20
+ let(:version) { 1 }
21
+
22
+ it 'sets the semantic version' do
23
+ expect(subject.version).to eq('1.0.0')
24
+ end
25
+ end
26
+
27
+ context 'with float' do
28
+ let(:version) { 1.5 }
29
+
30
+ it 'sets the semantic version' do
31
+ expect(subject.version).to eq('1.5.0')
32
+ end
33
+ end
34
+
35
+ context 'with string' do
36
+ let(:version) { '1.5.1' }
37
+
38
+ it 'sets the semantic version' do
39
+ expect(subject.version).to eq('1.5.1')
40
+ end
41
+ end
42
+
43
+ context 'with prerelease' do
44
+ let(:version) { '1.6.0-pre' }
45
+
46
+ it 'sets the semantic version' do
47
+ expect(subject.version).to eq('1.6.0-pre')
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ describe 'creation of resources' do
54
+ let(:version) { 1 }
55
+
56
+ context 'with no params or block' do
57
+ let(:block) { proc do
58
+ resource :products
59
+ end }
60
+
61
+ it 'creates the resource' do
62
+ expect(Cathode::Resource).to receive(:new) do |resource, params, &block|
63
+ expect(resource).to eq(:products)
64
+ expect(params).to be_nil
65
+ expect(block).to be_nil
66
+ end
67
+ subject
68
+ end
69
+ end
70
+
71
+ context 'with params' do
72
+ let(:block) { proc do
73
+ resource :sales, actions: [:index, :create]
74
+ end }
75
+
76
+ it 'creates the resource' do
77
+ expect(Cathode::Resource).to receive(:new) do |resource, params, &block|
78
+ expect(resource).to eq(:sales)
79
+ expect(params).to eq(actions: [:index, :create])
80
+ expect(block).to be_nil
81
+ end
82
+ subject
83
+ end
84
+ end
85
+
86
+ context 'with params and block' do
87
+ let(:block) { proc do
88
+ resource :salespeople, actions: [:index] do
89
+ action :create
90
+ end
91
+ end }
92
+
93
+ it 'creates the resource' do
94
+ expect(Cathode::Resource).to receive(:new) do |resource, params, &block|
95
+ expect(resource).to eq(:salespeople)
96
+ expect(params).to eq(actions: [:index])
97
+ expect(block).to_not be_nil
98
+ end
99
+ subject
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,30 @@
1
+ ENV['RAILS_ENV'] ||= 'test'
2
+
3
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
4
+ require 'rspec/rails'
5
+ require 'rspec/autorun'
6
+ require 'factory_girl_rails'
7
+
8
+ Rails.backtrace_cleaner.remove_silencers!
9
+
10
+ # Load support files
11
+
12
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
13
+
14
+ RSpec.configure do |config|
15
+ config.mock_with :rspec
16
+ config.use_transactional_fixtures = true
17
+ config.infer_base_class_for_anonymous_controllers = false
18
+ config.order = "random"
19
+ config.include FactoryGirl::Syntax::Methods
20
+ config.include SpecHelpers
21
+
22
+ config.after(:each) do
23
+ Cathode::BaseController.subclasses.each do |controller|
24
+ name = controller.name.try(:demodulize)
25
+ if name.present? && Cathode.const_defined?(name)
26
+ Cathode.send(:remove_const, name.to_sym)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,3 @@
1
+ FactoryGirl.define do
2
+ factory :product
3
+ end
@@ -0,0 +1,9 @@
1
+ module SpecHelpers
2
+ def initialize_resource(resource)
3
+ Rails::Application.class_eval %Q{class #{resource.to_s.camelize} < ActiveRecord::Base; end}
4
+ end
5
+
6
+ def use_api(&block)
7
+ Class.new(Cathode::Base).class_eval &block
8
+ end
9
+ end
metadata ADDED
@@ -0,0 +1,259 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cathode
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Moby, Inc.
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-04-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 4.0.4
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 4.0.4
27
+ - !ruby/object:Gem::Dependency
28
+ name: semantic
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 1.3.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 1.3.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec-rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: capybara
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: factory_girl_rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: sqlite3
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry-debugger
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Provides API boilerplate (routes + controllers) for REST actions, with
112
+ robust support for versioning
113
+ email:
114
+ - contact@builtbymoby.com
115
+ executables: []
116
+ extensions: []
117
+ extra_rdoc_files: []
118
+ files:
119
+ - app/assets/javascripts/cathode/application.js
120
+ - app/assets/stylesheets/cathode/application.css
121
+ - app/controllers/cathode/base_controller.rb
122
+ - app/helpers/cathode/application_helper.rb
123
+ - app/views/layouts/cathode/application.html.erb
124
+ - config/routes.rb
125
+ - lib/cathode/_version.rb
126
+ - lib/cathode/action.rb
127
+ - lib/cathode/base.rb
128
+ - lib/cathode/engine.rb
129
+ - lib/cathode/exceptions.rb
130
+ - lib/cathode/request.rb
131
+ - lib/cathode/resource.rb
132
+ - lib/cathode/version.rb
133
+ - lib/cathode.rb
134
+ - lib/tasks/cathode_tasks.rake
135
+ - LICENSE
136
+ - Rakefile
137
+ - README.md
138
+ - spec/dummy/app/api/dummy_api.rb
139
+ - spec/dummy/app/assets/javascripts/application.js
140
+ - spec/dummy/app/assets/stylesheets/application.css
141
+ - spec/dummy/app/controllers/application_controller.rb
142
+ - spec/dummy/app/helpers/application_helper.rb
143
+ - spec/dummy/app/models/product.rb
144
+ - spec/dummy/app/views/layouts/application.html.erb
145
+ - spec/dummy/bin/bundle
146
+ - spec/dummy/bin/rails
147
+ - spec/dummy/bin/rake
148
+ - spec/dummy/config/application.rb
149
+ - spec/dummy/config/boot.rb
150
+ - spec/dummy/config/database.yml
151
+ - spec/dummy/config/environment.rb
152
+ - spec/dummy/config/environments/development.rb
153
+ - spec/dummy/config/environments/production.rb
154
+ - spec/dummy/config/environments/test.rb
155
+ - spec/dummy/config/initializers/backtrace_silencers.rb
156
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
157
+ - spec/dummy/config/initializers/inflections.rb
158
+ - spec/dummy/config/initializers/mime_types.rb
159
+ - spec/dummy/config/initializers/secret_token.rb
160
+ - spec/dummy/config/initializers/session_store.rb
161
+ - spec/dummy/config/initializers/wrap_parameters.rb
162
+ - spec/dummy/config/locales/en.yml
163
+ - spec/dummy/config/routes.rb
164
+ - spec/dummy/config.ru
165
+ - spec/dummy/db/development.sqlite3
166
+ - spec/dummy/db/migrate/20140404222551_create_products.rb
167
+ - spec/dummy/db/schema.rb
168
+ - spec/dummy/db/test.sqlite3
169
+ - spec/dummy/log/development.log
170
+ - spec/dummy/log/test.log
171
+ - spec/dummy/public/404.html
172
+ - spec/dummy/public/422.html
173
+ - spec/dummy/public/500.html
174
+ - spec/dummy/public/favicon.ico
175
+ - spec/dummy/Rakefile
176
+ - spec/dummy/README.rdoc
177
+ - spec/dummy/spec/factories/products.rb
178
+ - spec/integration/api_spec.rb
179
+ - spec/lib/action_spec.rb
180
+ - spec/lib/base_spec.rb
181
+ - spec/lib/request_spec.rb
182
+ - spec/lib/resources_spec.rb
183
+ - spec/lib/versioning_spec.rb
184
+ - spec/spec_helper.rb
185
+ - spec/support/factories/products.rb
186
+ - spec/support/helpers.rb
187
+ homepage: https://github.com/mobyinc/Cathode
188
+ licenses: []
189
+ metadata: {}
190
+ post_install_message:
191
+ rdoc_options: []
192
+ require_paths:
193
+ - lib
194
+ required_ruby_version: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - '>='
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
199
+ required_rubygems_version: !ruby/object:Gem::Requirement
200
+ requirements:
201
+ - - '>='
202
+ - !ruby/object:Gem::Version
203
+ version: '0'
204
+ requirements: []
205
+ rubyforge_project:
206
+ rubygems_version: 2.1.10
207
+ signing_key:
208
+ specification_version: 4
209
+ summary: API boilerplate for RESTful applications
210
+ test_files:
211
+ - spec/dummy/app/api/dummy_api.rb
212
+ - spec/dummy/app/assets/javascripts/application.js
213
+ - spec/dummy/app/assets/stylesheets/application.css
214
+ - spec/dummy/app/controllers/application_controller.rb
215
+ - spec/dummy/app/helpers/application_helper.rb
216
+ - spec/dummy/app/models/product.rb
217
+ - spec/dummy/app/views/layouts/application.html.erb
218
+ - spec/dummy/bin/bundle
219
+ - spec/dummy/bin/rails
220
+ - spec/dummy/bin/rake
221
+ - spec/dummy/config/application.rb
222
+ - spec/dummy/config/boot.rb
223
+ - spec/dummy/config/database.yml
224
+ - spec/dummy/config/environment.rb
225
+ - spec/dummy/config/environments/development.rb
226
+ - spec/dummy/config/environments/production.rb
227
+ - spec/dummy/config/environments/test.rb
228
+ - spec/dummy/config/initializers/backtrace_silencers.rb
229
+ - spec/dummy/config/initializers/filter_parameter_logging.rb
230
+ - spec/dummy/config/initializers/inflections.rb
231
+ - spec/dummy/config/initializers/mime_types.rb
232
+ - spec/dummy/config/initializers/secret_token.rb
233
+ - spec/dummy/config/initializers/session_store.rb
234
+ - spec/dummy/config/initializers/wrap_parameters.rb
235
+ - spec/dummy/config/locales/en.yml
236
+ - spec/dummy/config/routes.rb
237
+ - spec/dummy/config.ru
238
+ - spec/dummy/db/development.sqlite3
239
+ - spec/dummy/db/migrate/20140404222551_create_products.rb
240
+ - spec/dummy/db/schema.rb
241
+ - spec/dummy/db/test.sqlite3
242
+ - spec/dummy/log/development.log
243
+ - spec/dummy/log/test.log
244
+ - spec/dummy/public/404.html
245
+ - spec/dummy/public/422.html
246
+ - spec/dummy/public/500.html
247
+ - spec/dummy/public/favicon.ico
248
+ - spec/dummy/Rakefile
249
+ - spec/dummy/README.rdoc
250
+ - spec/dummy/spec/factories/products.rb
251
+ - spec/integration/api_spec.rb
252
+ - spec/lib/action_spec.rb
253
+ - spec/lib/base_spec.rb
254
+ - spec/lib/request_spec.rb
255
+ - spec/lib/resources_spec.rb
256
+ - spec/lib/versioning_spec.rb
257
+ - spec/spec_helper.rb
258
+ - spec/support/factories/products.rb
259
+ - spec/support/helpers.rb