grape-starter 0.3.0 → 0.3.1

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: 6ca163007e1cc40a05ddb7d54bcedb07e092d6ae
4
- data.tar.gz: 4bdd0c412bbe5f0830e7171f007e41249a518060
3
+ metadata.gz: 2ca5b09c3e3577d7a93143d6fff88b91aecfd926
4
+ data.tar.gz: 8cd9948d9aa98b6c12cd118cca08d3d1858ad62f
5
5
  SHA512:
6
- metadata.gz: 0f62704c5d7e8ed9bdc1a1fc1bdff82358467013dd6ddcf8ceda4d8582adeaab37b6e70198c4cbcdd63378f9f90abce55724e5d35ee403208526407a3f7c2a86
7
- data.tar.gz: 2bf01d9d49175e5175736775c626b1239913a25b6c54585740ad247c8dbf059a784d2f334e50fb0a573ce4fc11b7761fe01f7d9a1faecae15b596c74550cbe92
6
+ metadata.gz: 22665163096ced52badfbdd0b99e2373108f18c0a6ae68002bad33d525b75b408d807fd9cca10c91dd49631fbef466d85c69bd9a72f39fddabd32b022ad00490
7
+ data.tar.gz: 83e99286b0d75e30ea70b80f7430918179178982c5dd4ea1958ce9632cd20c13ee6262f908ab742cea05b9d3778344c6723e84d69560164bf9761f2f8ce7c9d8
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- [![Codeship Status for LeFnord/grape-starter](https://app.codeship.com/projects/91e08e60-9600-0134-5571-4a8607aa1ae3/status?branch=master)](https://app.codeship.com/projects/186901)
1
+ [![Build Status](https://travis-ci.org/LeFnord/grape-starter.svg?branch=master)](https://travis-ci.org/LeFnord/grape-starter)
2
2
  [![Gem Version](https://badge.fury.io/rb/grape-starter.svg)](https://badge.fury.io/rb/grape-starter)
3
3
  [![Inline docs](http://inch-ci.org/github/LeFnord/grape-starter.svg?branch=master)](http://inch-ci.org/github/LeFnord/grape-starter)
4
4
 
@@ -8,6 +8,7 @@
8
8
  Is a tool to help you to build up a skeleton for a [Grape](http://github.com/ruby-grape/grape) API mounted on [Rack](https://github.com/rack/rack) ready to run.
9
9
  [grape-swagger](http://github.com/ruby-grape/grape-swagger) would be used to generate a [OAPI](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md) compatible documentation, which could be shown with [ReDoc](https://github.com/Rebilly/ReDoc).
10
10
 
11
+ ![ReDoc demo](doc/re-doc.png)
11
12
 
12
13
  ## Why the next one?
13
14
 
@@ -56,9 +57,10 @@ This command creates a folder named `awesome_api` containing the skeleton. With
56
57
  To run it, go into awesome_api folder, start the server
57
58
  ```
58
59
  $ cd awesome_api
59
- $ ./script/server
60
+ $ ./script/server *port
60
61
  ```
61
- the API is now accessible under: [http://localhost:9292/api/v1/root](http://localhost:9292/api/v1/root)
62
+ the API is now accessible under: [http://localhost:9292/api/v1/root](http://localhost:9292/api/v1/root)
63
+ the documentation of it under: [http://localhost:9292/](http://localhost:9292/)
62
64
 
63
65
  More could be found in [README](template/README.md).
64
66
 
@@ -87,3 +89,8 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/LeFnor
87
89
  ## License
88
90
 
89
91
  The gem is available as open source under the terms of the [MIT License](LICENSE).
92
+
93
+ ### ToDos
94
+
95
+ - [x] make scripts more configurable
96
+ - [ ] add logging
data/bin/grape-starter CHANGED
@@ -25,25 +25,26 @@ arg_name 'project name'
25
25
  command :new do |c|
26
26
 
27
27
  c.action do |global_options, _, args|
28
- dir = args.empty? ? nil : File.join(Dir.getwd, args.first)
28
+ dest = args.empty? ? nil : File.join(Dir.getwd, args.first)
29
29
 
30
30
  case
31
- when args.empty? || dir.nil?
32
- exit_now! 'no name given: starter new project'
33
- when Dir.exist?(dir) && !global_options[:force]
31
+ when args.empty? || dest.nil?
32
+ exit_now! 'no name given: grape-starter new project'
33
+ when Dir.exist?(dest) && !global_options[:force]
34
34
  exit_now! 'project exist: -f to overwrite'
35
- end
36
-
37
- $stdout.puts "created: #{args.first}"
38
- starter_gem = Gem::Specification.find_by_name('grape-starter').gem_dir
39
-
40
- src = File.join(starter_gem, 'template', '.')
41
- FileUtils.copy_entry src, dir
42
-
43
- FileUtils.cd(dir) do
44
- $stdout.puts `bundle install`
45
- $stdout.puts `bundle exec rubocop -a`
46
- $stdout.puts `git init`
35
+ else
36
+ starter_gem = Gem::Specification.find_by_name('grape-starter').gem_dir
37
+ src = File.join(starter_gem, 'template', '.')
38
+
39
+ Starter::Builder.new!(args.first, src, dest)
40
+ $stdout.puts "created: #{args.first}"
41
+
42
+ # after creating tasks
43
+ FileUtils.cd(dest) do
44
+ $stdout.puts `bundle install`
45
+ $stdout.puts `bundle exec rubocop -a`
46
+ $stdout.puts `git init`
47
+ end
47
48
  end
48
49
  end
49
50
  end
data/doc/re-doc.png ADDED
Binary file
@@ -12,15 +12,34 @@ module Starter
12
12
  extend Template::Endpoints
13
13
 
14
14
  class << self
15
- attr_reader :resource, :set, :force, :entity
15
+ attr_reader :resource, :set, :force, :entity, :destination
16
+
17
+ # would be called on new command
18
+ # it should do following
19
+ # 1. copying the template to the new destination
20
+ # 2. replace names in …
21
+ # - script/server
22
+ #
23
+ # name - A String as project name
24
+ # source - A String which provides the template path
25
+ # destination - A String which provides the new project path
26
+ def new!(name, source, destination)
27
+ @resource = name
28
+ @destination = destination
29
+
30
+ FileUtils.copy_entry source, destination
31
+
32
+ replace_static(File.join('script','server'))
33
+ end
34
+
16
35
  # would be called on add command
17
36
  #
18
37
  # resource - A String as name
19
38
  # options - A Hash to provide some optional arguments (default: {})
20
39
  # :set – whitespace separated list of http verbs
21
- # (default: nil, possible: post, get, put, patch, delete)
22
- # :force - A Boolean, if given existent files should be overwriten (default: nil -> false)
23
- # :entity - A Boolean, if given an entity file would be created (default: nil -> false)
40
+ # (default: nil, possible: post get put patch delete)
41
+ # :force - A Boolean, if given existent files should be overwriten (default: false)
42
+ # :entity - A Boolean, if given an entity file would be created (default: false)
24
43
  def add!(resource, options = {})
25
44
  @resource = resource
26
45
  @set = options[:set]
@@ -30,7 +49,6 @@ module Starter
30
49
  self
31
50
  end
32
51
 
33
- # would also be called on add command,
34
52
  # it saves the files
35
53
  def save
36
54
  created_files = file_list.each_with_object([]) do |new_file, memo|
@@ -63,7 +81,7 @@ module Starter
63
81
  remove_mount_point
64
82
  end
65
83
 
66
- # provides the endpoints for he given resource
84
+ # provides the endpoints for the given resource
67
85
  def endpoints
68
86
  content(endpoint_set).join("\n\n")
69
87
  end
@@ -75,26 +93,45 @@ module Starter
75
93
 
76
94
  private
77
95
 
96
+ # provides an array of endpoints to for the new resource
97
+ def endpoint_set
98
+ crud_set = singular? ? singular_one : crud
99
+ return crud_set if set.blank?
100
+
101
+ crud_set.each_with_object([]) { |x, memo| set.map { |y| memo << x if x.to_s.start_with?(y) } }
102
+ end
103
+
104
+ # provides a file list for the new resource
78
105
  def file_list
79
106
  standards = %w(api_file lib_file api_spec lib_spec)
80
107
 
81
108
  entity ? standards + ['entity_file'] : standards
82
109
  end
83
110
 
111
+ # raises if resource exist and force == false
84
112
  def should_raise?(file)
85
113
  raise StandardError, '… resource exists' if File.exist?(file) && !force
86
114
  end
87
115
 
116
+ # add project name to static files
117
+ def replace_static(file)
118
+ server_file = File.join(destination, file)
119
+
120
+ file_foo(server_file) { |content| content.gsub!('{{{grape-starter}}}', "API-#{resource}") }
121
+ end
122
+
88
123
  def add_mount_point
89
- file = read_file(api_base_file_name)
90
- add_to_base(file)
91
- write_file(api_base_file_name, file)
124
+ file_foo(api_base_file_name) { |content| add_to_base(content) }
92
125
  end
93
126
 
94
127
  def remove_mount_point
95
- file = read_file(api_base_file_name)
96
- remove_from_base(file)
97
- write_file(api_base_file_name, file)
128
+ file_foo(api_base_file_name) { |content| remove_from_base(content) }
129
+ end
130
+
131
+ def file_foo(file)
132
+ content = read_file(file)
133
+ yield content
134
+ write_file(file, content)
98
135
  end
99
136
 
100
137
  def save_file(new_file)
@@ -103,13 +140,6 @@ module Starter
103
140
  write_file(send(new_file_name), send(new_file.strip_heredoc))
104
141
  end
105
142
 
106
- def endpoint_set
107
- crud_set = singular? ? singular_one : crud
108
- return crud_set if set.blank?
109
-
110
- crud_set.each_with_object([]) { |x, memo| set.map { |y| memo << x if x.to_s.start_with?(y) } }
111
- end
112
-
113
143
  # manipulating API Base file
114
144
  # … adding
115
145
  def add_to_base(file)
@@ -123,17 +153,22 @@ module Starter
123
153
  file.sub!(mount_point, '')
124
154
  end
125
155
 
156
+ # content of the given set of files,
157
+ # returns an array of string
158
+ def content(set)
159
+ set.map { |x| send(x) }
160
+ end
161
+
162
+ # general file
163
+ # … read
126
164
  def read_file(file)
127
165
  File.read(file)
128
166
  end
129
167
 
168
+ # … write
130
169
  def write_file(file, content)
131
170
  File.open(file, 'w') { |f| f.write(content) }
132
171
  end
133
-
134
- def content(set)
135
- set.map { |x| send(x) }
136
- end
137
172
  end
138
173
  end
139
174
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Starter
3
- VERSION = '0.3.0'
3
+ VERSION = '0.3.1'
4
4
  end
@@ -7,8 +7,14 @@ cd "$(dirname "$0")/.."
7
7
  test -z "$RACK_ENV" &&
8
8
  RACK_ENV='development'
9
9
 
10
+ if [ $1 ]; then
11
+ port=$1
12
+ else
13
+ port=9292
14
+ fi
15
+
10
16
  if [ "$RACK_ENV" = 'production' ]; then
11
- bundle exec thin start -p 9292 -e $RACK_ENV --tag api-starter -d --threaded
17
+ bundle exec thin start -p $port -e $RACK_ENV --tag {{{grape-starter}}} -d --threaded
12
18
  else
13
- bundle exec thin start -p 9292 -e $RACK_ENV --tag api-starter -V -D
19
+ bundle exec thin start -p $port -e $RACK_ENV --tag {{{grape-starter}}} -V -D
14
20
  fi
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grape-starter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - LeFnord
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-19 00:00:00.000000000 Z
11
+ date: 2016-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gli
@@ -156,6 +156,7 @@ files:
156
156
  - README.md
157
157
  - Rakefile
158
158
  - bin/grape-starter
159
+ - doc/re-doc.png
159
160
  - grape-starter.gemspec
160
161
  - lib/starter.rb
161
162
  - lib/starter/builder.rb