Class: Stitches::ApiGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Includes:
Rails::Generators::Migration
Defined in:
lib/stitches/api_generator.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.next_migration_number(path) ⇒ Object


9
10
11
# File 'lib/stitches/api_generator.rb', line 9

def self.next_migration_number(path)
  Time.now.utc.strftime("%Y%m%d%H%M%S")
end

Instance Method Details

#bootstrap_apiObject


14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/stitches/api_generator.rb', line 14

def bootstrap_api
  gem "apitome"
  gem_group :development, :test do
    gem "rspec"
    gem "rspec-rails"
    gem "rspec_api_documentation"
  end

  Bundler.with_clean_env do
    run "bundle install"
  end
  generate "apitome:install"
  generate "rspec:install"

  gsub_file 'config/initializers/apitome.rb', /config.mount_at = .*$/, "config.mount_at = nil"
  gsub_file 'config/initializers/apitome.rb', /config.title = .*$/, "config.title = 'Service Documentation'"

  inject_into_file "config/routes.rb", before: /^end/ do<<-ROUTES
namespace :api do
  scope module: :v1, constraints: Stitches::ApiVersionConstraint.new(1) do
resource 'ping', only: [ :create ]
# Add your V1 resources here
  end
  scope module: :v2, constraints: Stitches::ApiVersionConstraint.new(2) do
resource 'ping', only: [ :create ]
# This is here simply to validate that versioning is working
# as well as for your client to be able to validate this as well.
  end
end

api_docs = Rack::Auth::Basic.new(Apitome::Engine) do |_, password|
  password == ENV['HTTP_AUTH_PASSWORD']
end
mount api_docs, at: "docs"
  ROUTES
  end

  copy_file "app/controllers/api.rb"
  copy_file "app/controllers/api/api_controller.rb"
  copy_file "app/controllers/api/v1.rb"
  copy_file "app/controllers/api/v2.rb"
  copy_file "app/controllers/api/v1/pings_controller.rb"
  copy_file "app/controllers/api/v2/pings_controller.rb"
  copy_file "app/models/api_client.rb"
  copy_file "config/initializers/stitches.rb"
  copy_file "lib/tasks/generate_api_key.rake"
  template "spec/features/api_spec.rb.erb", "spec/features/api_spec.rb"
  copy_file "spec/acceptance/ping_v1_spec.rb", "spec/acceptance/ping_v1_spec.rb"

  migration_template "db/migrate/enable_uuid_ossp_extension.rb", "db/migrate/enable_uuid_ossp_extension.rb"
  sleep 1 # allow clock to tick so we get different numbers
  migration_template "db/migrate/create_api_clients.rb", "db/migrate/create_api_clients.rb"

  inject_into_file 'spec/rails_helper.rb', %q{
config.include RSpec::Rails::RequestExampleGroup, type: :feature
}, before: /^end/

  inject_into_file 'spec/rails_helper.rb', before: /^RSpec.configure/ do<<-REQUIRE
require 'stitches/spec'
  REQUIRE
  end

  append_to_file 'spec/rails_helper.rb' do<<-RSPEC_API
require 'rspec_api_documentation'

RspecApiDocumentation.configure do |config|
  config.format = :json
  config.request_headers_to_include = %w(
Accept
Content-Type
Authorization
If-Modified-Since
  )
  config.response_headers_to_include = %w(
Last-Modified
ETag
  )
  config.api_name = "YOUR SERVICE NAME HERE"
end
RSPEC_API
  end
end