pliny 0.5.0 → 0.6.0
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.
- checksums.yaml +5 -13
- data/README.md +1 -2
- data/lib/pliny/commands/creator.rb +3 -3
- data/lib/pliny/commands/generator/base.rb +6 -2
- data/lib/pliny/commands/generator/endpoint.rb +3 -3
- data/lib/pliny/commands/generator/mediator.rb +2 -2
- data/lib/pliny/commands/generator/migration.rb +1 -1
- data/lib/pliny/commands/generator/model.rb +3 -3
- data/lib/pliny/commands/generator/serializer.rb +2 -2
- data/lib/pliny/config_helpers.rb +1 -1
- data/lib/pliny/tasks/db.rake +23 -4
- data/lib/pliny/templates/endpoint.erb +4 -4
- data/lib/pliny/templates/endpoint_acceptance_test.erb +5 -5
- data/lib/pliny/templates/endpoint_test.erb +1 -1
- data/lib/pliny/version.rb +1 -1
- data/{template → lib/template}/.env.sample +0 -0
- data/{template → lib/template}/.env.test +0 -0
- data/{template → lib/template}/.gitignore +0 -0
- data/{template → lib/template}/.rspec +0 -0
- data/lib/template/.ruby-version +1 -0
- data/{template → lib/template}/Gemfile +7 -10
- data/{template → lib/template}/LICENSE +0 -0
- data/{template → lib/template}/Procfile +0 -0
- data/{template → lib/template}/README.md +0 -0
- data/lib/template/Rakefile +6 -0
- data/{template → lib/template}/bin/console +2 -10
- data/{template → lib/template}/bin/run +0 -0
- data/{template → lib/template}/bin/setup +1 -1
- data/{template → lib/template}/config.ru +0 -0
- data/{template → lib/template}/config/config.rb +1 -1
- data/{template → lib/template}/config/initializers/database.rb +0 -0
- data/{template → lib/template}/config/initializers/rollbar.rb +0 -0
- data/{template → lib/template}/config/puma.rb +0 -0
- data/{template → lib/template}/db/schema.sql +0 -0
- data/{template → lib/template}/db/seeds.rb +0 -0
- data/{template → lib/template}/docs/schema/meta.json +0 -0
- data/{template → lib/template}/docs/schema/schemata/.gitkeep +0 -0
- data/{template → lib/template}/lib/application.rb +0 -0
- data/{template → lib/template}/lib/endpoints/base.rb +0 -0
- data/{template → lib/template}/lib/endpoints/root.rb +0 -0
- data/{template → lib/template}/lib/initializer.rb +0 -0
- data/{template → lib/template}/lib/mediators/base.rb +0 -0
- data/{template → lib/template}/lib/routes.rb +0 -0
- data/{template → lib/template}/lib/serializers/base.rb +0 -0
- data/lib/template/lib/tasks/spec.rake +10 -0
- data/{template → lib/template}/spec/spec_helper.rb +1 -0
- data/{template → lib/template}/spec/support/auto_define_rack_app.rb +0 -0
- data/{template → lib/template}/spec/support/log.rb +0 -0
- data/spec/commands/generator/endpoint_spec.rb +44 -2
- data/spec/integration_spec.rb +17 -7
- data/spec/spec_helper.rb +14 -1
- data/spec/support/config.rb +8 -0
- data/spec/support/endpoints.rb +8 -0
- metadata +134 -97
- data/template/.ruby-version +0 -1
- data/template/Gemfile.lock +0 -138
- data/template/Rakefile +0 -14
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
MTczNDRhNTY2N2UwMmUyY2I4YWQ5NDFlN2MwYzhlN2JlNTVhOWIwYw==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 062483bed93d424e25354d0f8ea06a181a28430c
|
4
|
+
data.tar.gz: b1c03ea6b109d2f66bd858f35b9ed1b1662a8ade
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
YzM5MGRmZmFlM2YyMzJmMTE3YzM3ZGVmMjYxNTk3YWRjOTdhODA4YTcwY2Ew
|
11
|
-
OWQyNjQ3YTlhZmZmYTBjN2UxMjFlMDEwZGRlMTA5NTI0OTJhYmM=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
OGY5YmExZmE5YTQwMGQ4MWNiNzkyYTMwZDA1NjNmZTI5YmM1ZWY4YTFjYTQx
|
14
|
-
ZDIwZDkxZDdjNmY1ZjlkZDQ2Y2EyM2NlZTNhY2NmNjQ1N2M1MzY4MTViN2Q0
|
15
|
-
ZmIxZmY1MTQ0MjIyNmNiOGE2OTQwZTk3YzJkOTBiMzQwNWM5Mjk=
|
6
|
+
metadata.gz: 1f22ef6e9a03877ea2b9e41451579c708fc54553e2b6cc979262859bccc204a2f9e10ea43111aacb3bd033945a315337996288abd7b419f4c835952181e7c406
|
7
|
+
data.tar.gz: 94fac3320131a3cc7fe13bdb52752dcedc6aadd17e832ef4e21f37c7a68d9df1ace62277c28685ac1c073ae422faa01ba2a0ea1172ba9804d8b571d170736ff5
|
data/README.md
CHANGED
@@ -19,7 +19,7 @@ And gems/helpers to tie these together and support operations:
|
|
19
19
|
- [Log helper](spec/log_spec.rb) that logs in [data format](https://www.youtube.com/watch?v=rpmc-wHFUBs) [to stdout](https://adam.heroku.com/past/2011/4/1/logs_are_streams_not_files)
|
20
20
|
- [Mediators](http://brandur.org/mediator) to help encapsulate more complex interactions
|
21
21
|
- [Rspec](https://github.com/rspec/rspec) for lean and fast testing
|
22
|
-
- [Puma](http://puma.io/) as the web server, [configured for optimal performance on Heroku](
|
22
|
+
- [Puma](http://puma.io/) as the web server, [configured for optimal performance on Heroku](lib/template/config/puma.rb)
|
23
23
|
- [Rack-test](https://github.com/brynary/rack-test) to test the API endpoints
|
24
24
|
- [Request IDs](lib/pliny/middleware/request_id.rb)
|
25
25
|
- [RequestStore](http://brandur.org/antipatterns), thread safe option to store data with the current request
|
@@ -141,7 +141,6 @@ Run tests:
|
|
141
141
|
|
142
142
|
```
|
143
143
|
$ bundle install
|
144
|
-
$ git submodule update --init
|
145
144
|
$ rake
|
146
145
|
```
|
147
146
|
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require 'pliny/version'
|
2
1
|
require 'fileutils'
|
2
|
+
require 'pathname'
|
3
3
|
require 'uri'
|
4
4
|
|
5
5
|
module Pliny::Commands
|
@@ -55,11 +55,11 @@ module Pliny::Commands
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def template_dir
|
58
|
-
File.expand_path('
|
58
|
+
File.expand_path('../../template', File.dirname(__FILE__))
|
59
59
|
end
|
60
60
|
|
61
61
|
def app_dir
|
62
|
-
|
62
|
+
Pathname.new(name).expand_path
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|
@@ -39,12 +39,16 @@ module Pliny::Commands
|
|
39
39
|
stream.puts msg
|
40
40
|
end
|
41
41
|
|
42
|
-
def render_template(template_file,
|
42
|
+
def render_template(template_file, vars = {})
|
43
43
|
template_path = File.dirname(__FILE__) + "/../../templates/#{template_file}"
|
44
44
|
template = ERB.new(File.read(template_path), 0, '>')
|
45
45
|
context = OpenStruct.new(vars)
|
46
|
+
template.result(context.instance_eval { binding })
|
47
|
+
end
|
48
|
+
|
49
|
+
def write_template(template_file, destination_path, vars = {})
|
46
50
|
write_file(destination_path) do
|
47
|
-
|
51
|
+
render_template(template_file, vars)
|
48
52
|
end
|
49
53
|
end
|
50
54
|
|
@@ -6,7 +6,7 @@ module Pliny::Commands
|
|
6
6
|
def create
|
7
7
|
endpoint = "./lib/endpoints/#{pluralized_file_name}.rb"
|
8
8
|
template = options[:scaffold] ? 'endpoint_scaffold.erb' : 'endpoint.erb'
|
9
|
-
|
9
|
+
write_template(template, endpoint,
|
10
10
|
plural_class_name: plural_class_name,
|
11
11
|
singular_class_name: singular_class_name,
|
12
12
|
field_name: field_name,
|
@@ -18,7 +18,7 @@ module Pliny::Commands
|
|
18
18
|
|
19
19
|
def create_test
|
20
20
|
test = "./spec/endpoints/#{pluralized_file_name}_spec.rb"
|
21
|
-
|
21
|
+
write_template('endpoint_test.erb', test,
|
22
22
|
plural_class_name: plural_class_name,
|
23
23
|
singular_class_name: singular_class_name,
|
24
24
|
url_path: url_path)
|
@@ -28,7 +28,7 @@ module Pliny::Commands
|
|
28
28
|
def create_acceptance_test
|
29
29
|
test = "./spec/acceptance/#{pluralized_file_name}_spec.rb"
|
30
30
|
template = options[:scaffold] ? 'endpoint_scaffold_acceptance_test.erb' : 'endpoint_acceptance_test.erb'
|
31
|
-
|
31
|
+
write_template(template, test,
|
32
32
|
plural_class_name: plural_class_name,
|
33
33
|
field_name: field_name,
|
34
34
|
singular_class_name: singular_class_name,
|
@@ -5,14 +5,14 @@ module Pliny::Commands
|
|
5
5
|
class Mediator < Base
|
6
6
|
def create
|
7
7
|
mediator = "./lib/mediators/#{field_name}.rb"
|
8
|
-
|
8
|
+
write_template('mediator.erb', mediator,
|
9
9
|
singular_class_name: singular_class_name)
|
10
10
|
display "created mediator file #{mediator}"
|
11
11
|
end
|
12
12
|
|
13
13
|
def create_test
|
14
14
|
test = "./spec/mediators/#{field_name}_spec.rb"
|
15
|
-
|
15
|
+
write_template('mediator_test.erb', test,
|
16
16
|
singular_class_name: singular_class_name)
|
17
17
|
display "created test #{test}"
|
18
18
|
end
|
@@ -5,7 +5,7 @@ module Pliny::Commands
|
|
5
5
|
class Model < Base
|
6
6
|
def create
|
7
7
|
model = "./lib/models/#{field_name}.rb"
|
8
|
-
|
8
|
+
write_template('model.erb', model,
|
9
9
|
singular_class_name: singular_class_name,
|
10
10
|
paranoid: options[:paranoid])
|
11
11
|
display "created model file #{model}"
|
@@ -13,7 +13,7 @@ module Pliny::Commands
|
|
13
13
|
|
14
14
|
def create_migration
|
15
15
|
migration = "./db/migrate/#{Time.now.to_i}_create_#{table_name}.rb"
|
16
|
-
|
16
|
+
write_template('model_migration.erb', migration,
|
17
17
|
table_name: table_name,
|
18
18
|
paranoid: options[:paranoid])
|
19
19
|
display "created migration #{migration}"
|
@@ -21,7 +21,7 @@ module Pliny::Commands
|
|
21
21
|
|
22
22
|
def create_test
|
23
23
|
test = "./spec/models/#{field_name}_spec.rb"
|
24
|
-
|
24
|
+
write_template('model_test.erb', test,
|
25
25
|
singular_class_name: singular_class_name)
|
26
26
|
display "created test #{test}"
|
27
27
|
end
|
@@ -5,14 +5,14 @@ module Pliny::Commands
|
|
5
5
|
class Serializer < Base
|
6
6
|
def create
|
7
7
|
serializer = "./lib/serializers/#{field_name}.rb"
|
8
|
-
|
8
|
+
write_template('serializer.erb', serializer,
|
9
9
|
singular_class_name: singular_class_name)
|
10
10
|
display "created serializer file #{serializer}"
|
11
11
|
end
|
12
12
|
|
13
13
|
def create_test
|
14
14
|
test = "./spec/serializers/#{field_name}_spec.rb"
|
15
|
-
|
15
|
+
write_template('serializer_test.erb', test,
|
16
16
|
singular_class_name: singular_class_name)
|
17
17
|
display "created test #{test}"
|
18
18
|
end
|
data/lib/pliny/config_helpers.rb
CHANGED
data/lib/pliny/tasks/db.rake
CHANGED
@@ -13,6 +13,7 @@ namespace :db do
|
|
13
13
|
Sequel::Migrator.apply(db, "./db/migrate")
|
14
14
|
puts "Migrated `#{name_from_uri(database_url)}`"
|
15
15
|
end
|
16
|
+
disconnect
|
16
17
|
end
|
17
18
|
|
18
19
|
desc "Rollback the database"
|
@@ -23,6 +24,7 @@ namespace :db do
|
|
23
24
|
Sequel::Migrator.apply(db, "./db/migrate", -1)
|
24
25
|
puts "Rolled back `#{name_from_uri(database_url)}`"
|
25
26
|
end
|
27
|
+
disconnect
|
26
28
|
end
|
27
29
|
|
28
30
|
desc "Nuke the database (drop all tables)"
|
@@ -34,6 +36,7 @@ namespace :db do
|
|
34
36
|
end
|
35
37
|
puts "Nuked `#{name_from_uri(database_url)}`"
|
36
38
|
end
|
39
|
+
disconnect
|
37
40
|
end
|
38
41
|
|
39
42
|
desc "Seed the database with data"
|
@@ -43,6 +46,7 @@ namespace :db do
|
|
43
46
|
Sequel.connect(database_url)
|
44
47
|
load 'db/seeds.rb'
|
45
48
|
end
|
49
|
+
disconnect
|
46
50
|
end
|
47
51
|
end
|
48
52
|
|
@@ -51,8 +55,8 @@ namespace :db do
|
|
51
55
|
|
52
56
|
desc "Create the database"
|
53
57
|
task :create do
|
54
|
-
db = Sequel.connect("postgres:///postgres")
|
55
58
|
database_urls.each do |database_url|
|
59
|
+
db = Sequel.connect("#{postgres_location_from_uri(database_url)}/postgres")
|
56
60
|
exists = false
|
57
61
|
name = name_from_uri(database_url)
|
58
62
|
begin
|
@@ -63,16 +67,18 @@ namespace :db do
|
|
63
67
|
end
|
64
68
|
puts "Created `#{name}`" if !exists
|
65
69
|
end
|
70
|
+
disconnect
|
66
71
|
end
|
67
72
|
|
68
73
|
desc "Drop the database"
|
69
74
|
task :drop do
|
70
|
-
db = Sequel.connect("postgres:///postgres")
|
71
75
|
database_urls.each do |database_url|
|
76
|
+
db = Sequel.connect("#{postgres_location_from_uri(database_url)}/postgres")
|
72
77
|
name = name_from_uri(database_url)
|
73
78
|
db.run(%{DROP DATABASE IF EXISTS "#{name}"})
|
74
79
|
puts "Dropped `#{name}`"
|
75
80
|
end
|
81
|
+
disconnect
|
76
82
|
end
|
77
83
|
|
78
84
|
namespace :schema do
|
@@ -85,6 +91,7 @@ namespace :db do
|
|
85
91
|
db.run(schema)
|
86
92
|
puts "Loaded `#{name_from_uri(database_url)}`"
|
87
93
|
end
|
94
|
+
disconnect
|
88
95
|
else
|
89
96
|
puts "Skipped schema load, schema.sql not present"
|
90
97
|
end
|
@@ -109,23 +116,29 @@ namespace :db do
|
|
109
116
|
schema << db[:schema_migrations].insert_sql(migration) + ";\n"
|
110
117
|
end
|
111
118
|
end
|
119
|
+
disconnect
|
112
120
|
|
113
121
|
File.open(file, "w") { |f| f.puts schema }
|
114
122
|
puts "Dumped `#{name_from_uri(database_url)}` to #{file}"
|
115
123
|
end
|
116
124
|
|
117
125
|
desc "Merges migrations into schema and removes them"
|
118
|
-
task :merge => ["db:setup", "db:schema:
|
126
|
+
task :merge => ["db:setup", "db:schema:dump"] do
|
119
127
|
FileUtils.rm Dir["./db/migrate/*.rb"]
|
120
128
|
puts "Removed migrations"
|
121
129
|
end
|
122
130
|
end
|
123
131
|
|
124
132
|
desc "Setup the database"
|
125
|
-
task :setup => [:drop, :create, :migrate]
|
133
|
+
task :setup => [:drop, :create, "schema:load", :migrate]
|
126
134
|
|
127
135
|
private
|
128
136
|
|
137
|
+
def disconnect
|
138
|
+
Sequel::DATABASES.each { |db| db.disconnect }
|
139
|
+
Sequel::DATABASES.clear
|
140
|
+
end
|
141
|
+
|
129
142
|
def database_urls
|
130
143
|
if ENV["DATABASE_URL"]
|
131
144
|
[ENV["DATABASE_URL"]]
|
@@ -144,4 +157,10 @@ namespace :db do
|
|
144
157
|
def name_from_uri(uri)
|
145
158
|
URI.parse(uri).path[1..-1]
|
146
159
|
end
|
160
|
+
|
161
|
+
def postgres_location_from_uri(uri)
|
162
|
+
p = URI.parse(uri)
|
163
|
+
p.path = ""
|
164
|
+
p.to_s
|
165
|
+
end
|
147
166
|
end
|
@@ -11,19 +11,19 @@ module Endpoints
|
|
11
11
|
|
12
12
|
post do
|
13
13
|
status 201
|
14
|
-
encode
|
14
|
+
encode Hash.new
|
15
15
|
end
|
16
16
|
|
17
17
|
get "/:id" do
|
18
|
-
encode
|
18
|
+
encode Hash.new
|
19
19
|
end
|
20
20
|
|
21
21
|
patch "/:id" do |id|
|
22
|
-
encode
|
22
|
+
encode Hash.new
|
23
23
|
end
|
24
24
|
|
25
25
|
delete "/:id" do |id|
|
26
|
-
encode
|
26
|
+
encode Hash.new
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
@@ -15,7 +15,7 @@ describe Endpoints::<%= plural_class_name %> do
|
|
15
15
|
describe 'GET <%= url_path %>' do
|
16
16
|
it 'returns correct status code and conforms to schema' do
|
17
17
|
get '<%= url_path %>'
|
18
|
-
|
18
|
+
assert_equal 200, last_response.status
|
19
19
|
assert_schema_conform
|
20
20
|
end
|
21
21
|
end
|
@@ -24,7 +24,7 @@ describe Endpoints::<%= plural_class_name %> do
|
|
24
24
|
it 'returns correct status code and conforms to schema' do
|
25
25
|
header "Content-Type", "application/json"
|
26
26
|
post '<%= url_path %>', MultiJson.encode({})
|
27
|
-
|
27
|
+
assert_equal 201, last_response.status
|
28
28
|
assert_schema_conform
|
29
29
|
end
|
30
30
|
end
|
@@ -32,7 +32,7 @@ describe Endpoints::<%= plural_class_name %> do
|
|
32
32
|
describe 'GET <%= url_path %>/:id' do
|
33
33
|
it 'returns correct status code and conforms to schema' do
|
34
34
|
get "<%= url_path %>/123"
|
35
|
-
|
35
|
+
assert_equal 200, last_response.status
|
36
36
|
assert_schema_conform
|
37
37
|
end
|
38
38
|
end
|
@@ -41,7 +41,7 @@ describe Endpoints::<%= plural_class_name %> do
|
|
41
41
|
it 'returns correct status code and conforms to schema' do
|
42
42
|
header "Content-Type", "application/json"
|
43
43
|
patch '<%= url_path %>/123', MultiJson.encode({})
|
44
|
-
|
44
|
+
assert_equal 200, last_response.status
|
45
45
|
assert_schema_conform
|
46
46
|
end
|
47
47
|
end
|
@@ -49,7 +49,7 @@ describe Endpoints::<%= plural_class_name %> do
|
|
49
49
|
describe 'DELETE <%= url_path %>/:id' do
|
50
50
|
it 'returns correct status code and conforms to schema' do
|
51
51
|
delete '<%= url_path %>/123'
|
52
|
-
|
52
|
+
assert_equal 200, last_response.status
|
53
53
|
assert_schema_conform
|
54
54
|
end
|
55
55
|
end
|
data/lib/pliny/version.rb
CHANGED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
2.2.0
|
@@ -1,20 +1,20 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
|
-
ruby "2.
|
2
|
+
ruby "2.2.0"
|
3
3
|
|
4
4
|
gem "multi_json"
|
5
5
|
gem "oj"
|
6
6
|
gem "pg"
|
7
|
-
gem "pliny"
|
7
|
+
gem "pliny", "~> 0.5"
|
8
8
|
gem "pry"
|
9
9
|
gem "pry-doc"
|
10
|
-
gem "puma"
|
10
|
+
gem "puma", "~> 2.10"
|
11
11
|
gem "rack-ssl"
|
12
12
|
gem "rake"
|
13
13
|
gem "rollbar"
|
14
|
-
gem "sequel"
|
14
|
+
gem "sequel", "~> 4.16"
|
15
15
|
gem "sequel-paranoid"
|
16
|
-
gem "sequel_pg", require: "sequel"
|
17
|
-
gem "sinatra", require: "sinatra/base"
|
16
|
+
gem "sequel_pg", "~> 1.6", require: "sequel"
|
17
|
+
gem "sinatra", "~> 1.4", require: "sinatra/base"
|
18
18
|
gem "sinatra-contrib", require: ["sinatra/namespace", "sinatra/reloader"]
|
19
19
|
gem "sinatra-router"
|
20
20
|
gem "sucker_punch"
|
@@ -23,13 +23,10 @@ group :development, :test do
|
|
23
23
|
gem "pry-byebug"
|
24
24
|
end
|
25
25
|
|
26
|
-
group :development do
|
27
|
-
gem "dotenv"
|
28
|
-
end
|
29
|
-
|
30
26
|
group :test do
|
31
27
|
gem "committee"
|
32
28
|
gem "database_cleaner"
|
29
|
+
gem "dotenv"
|
33
30
|
gem "rack-test"
|
34
31
|
gem "rspec"
|
35
32
|
end
|
File without changes
|
File without changes
|
File without changes
|