pliny 0.8.2 → 0.9.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 +4 -4
- data/README.md +8 -3
- data/bin/pliny-update +6 -0
- data/lib/pliny/commands/generator.rb +2 -2
- data/lib/pliny/commands/generator/migration.rb +13 -0
- data/lib/pliny/commands/updater.rb +86 -0
- data/lib/pliny/tasks/db.rake +0 -15
- data/lib/pliny/templates/model.erb +1 -1
- data/lib/pliny/templates/model_migration.erb +1 -1
- data/lib/pliny/version.rb +1 -1
- data/lib/template/Gemfile +2 -2
- data/lib/template/Procfile +1 -0
- data/lib/template/lib/initializer.rb +1 -2
- data/lib/template/lib/mediators/base.rb +1 -1
- data/lib/template/lib/routes.rb +1 -1
- data/lib/template/lib/serializers/base.rb +1 -1
- data/spec/commands/generator/migration_spec.rb +19 -0
- data/spec/commands/updater_spec.rb +29 -0
- metadata +47 -42
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cc0fc3ea6bd2bf5b8c5b6acdcf1cabf32ea781d5
|
4
|
+
data.tar.gz: 68bcfd4977381a765954e04884680dfaefdb5b4e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a7c5e06960e5076cf66d5f3951acdba7e19152d1294dbc79c6946333f701bf574b9f520d0d3fe52256a5586cf8ebdb279870785f16e6db5b66d2601d880ff0c
|
7
|
+
data.tar.gz: 67a0baee927f357155076aa8466d4358abd1b0ef6d68dec6c9db69853db8b31ef042162a50b8945cad12965411dd41b697bd495ca70bb7accb3e8dcb3ce7e4e5
|
data/README.md
CHANGED
@@ -24,7 +24,7 @@ And gems/helpers to tie these together and support operations:
|
|
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
|
26
26
|
- [Sequel](http://sequel.jeremyevans.net/) for ORM
|
27
|
-
- [Sequel-PG](https://github.com/jeremyevans/sequel_pg)
|
27
|
+
- [Sequel-PG](https://github.com/jeremyevans/sequel_pg) to talk to the world's most advanced open source database
|
28
28
|
- [Versioning](lib/pliny/middleware/versioning.rb) to allow versioning your API in the HTTP Accept header
|
29
29
|
|
30
30
|
## Getting started
|
@@ -112,8 +112,6 @@ Pliny comes with several rake tasks:
|
|
112
112
|
rake db:create # Create the database
|
113
113
|
rake db:drop # Drop the database
|
114
114
|
rake db:migrate # Run database migrations
|
115
|
-
rake db:nuke # Nuke the database (drop all tables)
|
116
|
-
rake db:reset # Reset the database
|
117
115
|
rake db:rollback # Rollback the database
|
118
116
|
rake db:schema:dump # Dump the database schema
|
119
117
|
rake db:schema:load # Load the database schema
|
@@ -135,6 +133,13 @@ $ foreman run bin/run 'puts "hello world"' # Run automated code
|
|
135
133
|
|
136
134
|
(hint: don't forget `foreman run` in development)
|
137
135
|
|
136
|
+
### Updating
|
137
|
+
|
138
|
+
Use `pliny-update` to update the Pliny app in the current directory.
|
139
|
+
|
140
|
+
This not only bumps the version dependency, but also applies any changes that happened in the template app (for instance: new initializer, tweaks in the base endpoint, etc).
|
141
|
+
|
142
|
+
|
138
143
|
## Development
|
139
144
|
|
140
145
|
Run tests:
|
data/bin/pliny-update
ADDED
@@ -23,8 +23,8 @@ module Pliny::Commands
|
|
23
23
|
md.create_test
|
24
24
|
end
|
25
25
|
|
26
|
-
desc 'migration NAME', 'Generates a migration'
|
27
|
-
def migration(name)
|
26
|
+
desc 'migration [NAME]', 'Generates a migration'
|
27
|
+
def migration(*name)
|
28
28
|
require_relative 'generator/migration'
|
29
29
|
|
30
30
|
mg = Migration.new(name, options)
|
@@ -3,11 +3,24 @@ require_relative 'base'
|
|
3
3
|
module Pliny::Commands
|
4
4
|
class Generator
|
5
5
|
class Migration < Base
|
6
|
+
def initialize(name, options = {}, stream = $stdout)
|
7
|
+
super
|
8
|
+
@name = normalize_name(name)
|
9
|
+
end
|
10
|
+
|
6
11
|
def create
|
7
12
|
migration = "./db/migrate/#{Time.now.to_i}_#{name}.rb"
|
8
13
|
write_template('migration.erb', migration)
|
9
14
|
display "created migration #{migration}"
|
10
15
|
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def normalize_name(name)
|
20
|
+
Array(name).map(&:underscore)
|
21
|
+
.map { |n| n.tr(' ', '_') }
|
22
|
+
.join('_')
|
23
|
+
end
|
11
24
|
end
|
12
25
|
end
|
13
26
|
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'pathname'
|
3
|
+
require 'pliny/version'
|
4
|
+
require 'uri'
|
5
|
+
|
6
|
+
module Pliny::Commands
|
7
|
+
class Updater
|
8
|
+
attr_accessor :stream
|
9
|
+
|
10
|
+
def self.run(stream = $stdout)
|
11
|
+
new(stream).run!
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(stream = $stdout)
|
15
|
+
@stream = stream
|
16
|
+
end
|
17
|
+
|
18
|
+
def run!
|
19
|
+
unless File.exist?("Gemfile.lock")
|
20
|
+
abort("Pliny app not found - looking for Gemfile.lock")
|
21
|
+
end
|
22
|
+
|
23
|
+
version_current = get_current_version
|
24
|
+
version_target = Gem::Version.new(Pliny::VERSION)
|
25
|
+
|
26
|
+
if version_current == version_target
|
27
|
+
display "Version #{version_current} is current, nothing to update."
|
28
|
+
elsif version_current > version_target
|
29
|
+
display "pliny-update is outdated. Please update it with `gem install pliny` or similar."
|
30
|
+
else
|
31
|
+
display "Updating from #{version_current} to #{version_target}..."
|
32
|
+
ensure_repo_available
|
33
|
+
save_patch(version_current, version_target)
|
34
|
+
exec_patch
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# we need a local copy of the pliny repo to produce a diff
|
39
|
+
def ensure_repo_available
|
40
|
+
if File.exists?(repo_dir)
|
41
|
+
unless system("cd #{repo_dir} && git fetch --tags")
|
42
|
+
abort("Could not update Pliny repo at #{repo_dir}")
|
43
|
+
end
|
44
|
+
else
|
45
|
+
unless system("git clone https://github.com/interagent/pliny.git #{repo_dir}")
|
46
|
+
abort("Could not git clone the Pliny repo")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def get_current_version
|
52
|
+
File.read("./Gemfile.lock").split("\n").each do |line|
|
53
|
+
next unless pliny_version = line.match(/pliny \(([\d+\.]+)\)/)
|
54
|
+
return Gem::Version.new(pliny_version[1])
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def save_patch(curr, target)
|
59
|
+
# take a diff of changes that happened to the template app in Pliny
|
60
|
+
diff = `cd #{repo_dir} && git diff v#{curr}..v#{target} lib/template/`
|
61
|
+
|
62
|
+
# remove lib/template from the path of files in the patch so that we can
|
63
|
+
# apply these to the current folder
|
64
|
+
diff.gsub!(/^(\-\-\-|\+\+\+) (\w)\/lib\/template/, '\1 \2')
|
65
|
+
|
66
|
+
File.open(patch_file, "w") { |f| f.puts diff }
|
67
|
+
end
|
68
|
+
|
69
|
+
def exec_patch
|
70
|
+
# throw .orig and .rej files in /tmp, they're useless with source control
|
71
|
+
exec "patch --prefix=/tmp/ --reject-file=/tmp/pliny-reject -p1 < #{patch_file}"
|
72
|
+
end
|
73
|
+
|
74
|
+
def display(msg)
|
75
|
+
stream.puts msg
|
76
|
+
end
|
77
|
+
|
78
|
+
def repo_dir
|
79
|
+
File.join(Dir.home, ".tmp/pliny-repo")
|
80
|
+
end
|
81
|
+
|
82
|
+
def patch_file
|
83
|
+
File.join(repo_dir, "pliny-update.patch")
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
data/lib/pliny/tasks/db.rake
CHANGED
@@ -31,18 +31,6 @@ namespace :db do
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
desc "Nuke the database (drop all tables)"
|
35
|
-
task :nuke do
|
36
|
-
database_urls.each do |database_url|
|
37
|
-
db = Sequel.connect(database_url)
|
38
|
-
db.tables.each do |table|
|
39
|
-
db.run(%{DROP TABLE "#{table}" CASCADE})
|
40
|
-
end
|
41
|
-
puts "Nuked `#{name_from_uri(database_url)}`"
|
42
|
-
end
|
43
|
-
disconnect
|
44
|
-
end
|
45
|
-
|
46
34
|
desc "Seed the database with data"
|
47
35
|
task :seed do
|
48
36
|
if File.exist?('./db/seeds.rb')
|
@@ -54,9 +42,6 @@ namespace :db do
|
|
54
42
|
end
|
55
43
|
end
|
56
44
|
|
57
|
-
desc "Reset the database"
|
58
|
-
task :reset => [:nuke, :migrate, :seed]
|
59
|
-
|
60
45
|
desc "Create the database"
|
61
46
|
task :create do
|
62
47
|
database_urls.each do |database_url|
|
data/lib/pliny/version.rb
CHANGED
data/lib/template/Gemfile
CHANGED
data/lib/template/Procfile
CHANGED
data/lib/template/lib/routes.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
Routes = Rack::Builder.new do
|
2
2
|
use Rollbar::Middleware::Sinatra
|
3
|
-
use Pliny::Middleware::RescueErrors, raise: Config.raise_errors?
|
4
3
|
use Pliny::Middleware::CORS
|
5
4
|
use Pliny::Middleware::RequestID
|
5
|
+
use Pliny::Middleware::RescueErrors, raise: Config.raise_errors?
|
6
6
|
use Pliny::Middleware::RequestStore, store: Pliny::RequestStore
|
7
7
|
use Rack::Timeout if Config.timeout > 0
|
8
8
|
use Pliny::Middleware::Versioning,
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'pliny/commands/generator'
|
2
|
+
require 'pliny/commands/generator/migration'
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Pliny::Commands::Generator::Migration do
|
6
|
+
describe '#name' do
|
7
|
+
it 'generates a migration name given differents argument formats' do
|
8
|
+
[
|
9
|
+
%w(add column foo to barz),
|
10
|
+
'add column foo to barz',
|
11
|
+
'add_column_foo_to_barz',
|
12
|
+
'AddColumnFooToBarz'
|
13
|
+
].each do |argument|
|
14
|
+
actual = described_class.new(argument, {}, StringIO.new).name
|
15
|
+
assert_equal 'add_column_foo_to_barz', actual
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'pliny/commands/updater'
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Pliny::Commands::Updater do
|
5
|
+
before do
|
6
|
+
@io = StringIO.new
|
7
|
+
@cmd = Pliny::Commands::Updater.new(@io)
|
8
|
+
|
9
|
+
stub(@cmd).exec_patch
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#run!" do
|
13
|
+
before do
|
14
|
+
FileUtils.rm_rf("/tmp/plinytest")
|
15
|
+
FileUtils.mkdir_p("/tmp/plinytest")
|
16
|
+
Dir.chdir("/tmp/plinytest")
|
17
|
+
File.open("/tmp/plinytest/Gemfile.lock", "w") do |f|
|
18
|
+
f.puts " pliny (0.6.3)"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it "creates a patch with Pliny diffs between the two versions" do
|
23
|
+
@cmd.run!
|
24
|
+
patch = File.read(@cmd.patch_file)
|
25
|
+
assert patch.include?('--- a/Gemfile')
|
26
|
+
assert patch.include?('-gem "pliny", "~> 0.6"')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pliny
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandur Leach
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-07-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -51,26 +51,6 @@ dependencies:
|
|
51
51
|
- - ">="
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: 1.9.3
|
54
|
-
- !ruby/object:Gem::Dependency
|
55
|
-
name: pg
|
56
|
-
requirement: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- - "~>"
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: '0.17'
|
61
|
-
- - ">="
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: 0.17.1
|
64
|
-
type: :runtime
|
65
|
-
prerelease: false
|
66
|
-
version_requirements: !ruby/object:Gem::Requirement
|
67
|
-
requirements:
|
68
|
-
- - "~>"
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
version: '0.17'
|
71
|
-
- - ">="
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
version: 0.17.1
|
74
54
|
- !ruby/object:Gem::Dependency
|
75
55
|
name: prmd
|
76
56
|
requirement: !ruby/object:Gem::Requirement
|
@@ -105,26 +85,6 @@ dependencies:
|
|
105
85
|
- - ">="
|
106
86
|
- !ruby/object:Gem::Version
|
107
87
|
version: 0.2.3
|
108
|
-
- !ruby/object:Gem::Dependency
|
109
|
-
name: sequel
|
110
|
-
requirement: !ruby/object:Gem::Requirement
|
111
|
-
requirements:
|
112
|
-
- - "~>"
|
113
|
-
- !ruby/object:Gem::Version
|
114
|
-
version: '4.9'
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: 4.9.0
|
118
|
-
type: :runtime
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - "~>"
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '4.9'
|
125
|
-
- - ">="
|
126
|
-
- !ruby/object:Gem::Version
|
127
|
-
version: 4.9.0
|
128
88
|
- !ruby/object:Gem::Dependency
|
129
89
|
name: sinatra
|
130
90
|
requirement: !ruby/object:Gem::Requirement
|
@@ -339,6 +299,46 @@ dependencies:
|
|
339
299
|
- - ">="
|
340
300
|
- !ruby/object:Gem::Version
|
341
301
|
version: '0'
|
302
|
+
- !ruby/object:Gem::Dependency
|
303
|
+
name: pg
|
304
|
+
requirement: !ruby/object:Gem::Requirement
|
305
|
+
requirements:
|
306
|
+
- - "~>"
|
307
|
+
- !ruby/object:Gem::Version
|
308
|
+
version: '0.17'
|
309
|
+
- - ">="
|
310
|
+
- !ruby/object:Gem::Version
|
311
|
+
version: 0.17.1
|
312
|
+
type: :development
|
313
|
+
prerelease: false
|
314
|
+
version_requirements: !ruby/object:Gem::Requirement
|
315
|
+
requirements:
|
316
|
+
- - "~>"
|
317
|
+
- !ruby/object:Gem::Version
|
318
|
+
version: '0.17'
|
319
|
+
- - ">="
|
320
|
+
- !ruby/object:Gem::Version
|
321
|
+
version: 0.17.1
|
322
|
+
- !ruby/object:Gem::Dependency
|
323
|
+
name: sequel
|
324
|
+
requirement: !ruby/object:Gem::Requirement
|
325
|
+
requirements:
|
326
|
+
- - "~>"
|
327
|
+
- !ruby/object:Gem::Version
|
328
|
+
version: '4.9'
|
329
|
+
- - ">="
|
330
|
+
- !ruby/object:Gem::Version
|
331
|
+
version: 4.9.0
|
332
|
+
type: :development
|
333
|
+
prerelease: false
|
334
|
+
version_requirements: !ruby/object:Gem::Requirement
|
335
|
+
requirements:
|
336
|
+
- - "~>"
|
337
|
+
- !ruby/object:Gem::Version
|
338
|
+
version: '4.9'
|
339
|
+
- - ">="
|
340
|
+
- !ruby/object:Gem::Version
|
341
|
+
version: 4.9.0
|
342
342
|
description: Pliny is a set of base classes and helpers to help developers write excellent
|
343
343
|
APIs in Sinatra
|
344
344
|
email:
|
@@ -347,12 +347,14 @@ email:
|
|
347
347
|
executables:
|
348
348
|
- pliny-generate
|
349
349
|
- pliny-new
|
350
|
+
- pliny-update
|
350
351
|
extensions: []
|
351
352
|
extra_rdoc_files: []
|
352
353
|
files:
|
353
354
|
- README.md
|
354
355
|
- bin/pliny-generate
|
355
356
|
- bin/pliny-new
|
357
|
+
- bin/pliny-update
|
356
358
|
- lib/pliny.rb
|
357
359
|
- lib/pliny/commands/creator.rb
|
358
360
|
- lib/pliny/commands/generator.rb
|
@@ -363,6 +365,7 @@ files:
|
|
363
365
|
- lib/pliny/commands/generator/model.rb
|
364
366
|
- lib/pliny/commands/generator/schema.rb
|
365
367
|
- lib/pliny/commands/generator/serializer.rb
|
368
|
+
- lib/pliny/commands/updater.rb
|
366
369
|
- lib/pliny/config_helpers.rb
|
367
370
|
- lib/pliny/db_support.rb
|
368
371
|
- lib/pliny/errors.rb
|
@@ -433,8 +436,10 @@ files:
|
|
433
436
|
- spec/commands/creator_spec.rb
|
434
437
|
- spec/commands/generator/base_spec.rb
|
435
438
|
- spec/commands/generator/endpoint_spec.rb
|
439
|
+
- spec/commands/generator/migration_spec.rb
|
436
440
|
- spec/commands/generator/schema_spec.rb
|
437
441
|
- spec/commands/generator_spec.rb
|
442
|
+
- spec/commands/updater_spec.rb
|
438
443
|
- spec/db_support_spec.rb
|
439
444
|
- spec/errors_spec.rb
|
440
445
|
- spec/extensions/instruments_spec.rb
|