pliny 0.8.2 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|