napa 0.1.14 → 0.1.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/napa/active_record_extensions/filter_by_hash.rb +20 -0
- data/lib/napa/cli.rb +2 -0
- data/lib/napa/generators/api_generator.rb +27 -0
- data/lib/napa/generators/templates/api/app/apis/%name_tableize%_api.rb.tt +46 -0
- data/lib/napa/generators/templates/api/app/entities/%name_underscore%_entity.rb.tt +6 -0
- data/lib/napa/generators/templates/api/app/models/%name_underscore%.rb.tt +3 -0
- data/lib/napa/generators.rb +1 -0
- data/lib/napa/version.rb +1 -1
- data/napa.gemspec +5 -4
- data/spec/active_record_extensions/filter_by_hash_spec.rb +21 -0
- metadata +23 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4f80b689c9f468319a5344e2659ee3da3dc0160
|
4
|
+
data.tar.gz: fae65a84303bb8594fedc3304e8738adc2bf8930
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e7c700701738067b6f95a8cca9d10e21dab86f1fbbf339750207e0fc911d95e46b714914110d9b20eddb18033e334e1f6625a981379d8017e5f81a7eccc30cc
|
7
|
+
data.tar.gz: b161248d7731dfd51f173403c2825e9a0d02683ca13264ffc2345db4d114eb7f511623e5d89918399598c40f726532d4b3c17dcecdf7eece9dd3c67cb1b91eb8
|
@@ -0,0 +1,20 @@
|
|
1
|
+
if defined?(ActiveRecord)
|
2
|
+
module Napa
|
3
|
+
module FilterByHash
|
4
|
+
module ClassMethods
|
5
|
+
def filter(search_hash = {})
|
6
|
+
# pass an empty where clause to force results to be a relation that will be lazy evaluated
|
7
|
+
results = where({})
|
8
|
+
search_hash.each do |k, v|
|
9
|
+
results = results.where(k => v) if v.present?
|
10
|
+
end
|
11
|
+
results
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.included(base)
|
16
|
+
base.extend(ClassMethods)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/napa/cli.rb
CHANGED
@@ -5,5 +5,7 @@ module Napa
|
|
5
5
|
class CLI < Thor
|
6
6
|
register(Generators::ScaffoldGenerator, 'new', 'new <app_name> [app_path]',
|
7
7
|
'Create a new Napa scaffold')
|
8
|
+
register(Generators::ApiGenerator, 'generate', 'generate api <generator_name> <name>',
|
9
|
+
'Create a Grape API and model')
|
8
10
|
end
|
9
11
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'active_support/all'
|
3
|
+
|
4
|
+
module Napa
|
5
|
+
module Generators
|
6
|
+
class ApiGenerator < Thor::Group
|
7
|
+
include Thor::Actions
|
8
|
+
argument :generator_name # allows us to type reasonable CLI commands
|
9
|
+
argument :name
|
10
|
+
|
11
|
+
def name_underscore
|
12
|
+
name.underscore
|
13
|
+
end
|
14
|
+
|
15
|
+
def name_tableize
|
16
|
+
name.tableize
|
17
|
+
end
|
18
|
+
|
19
|
+
def generate
|
20
|
+
self.class.source_root "#{File.dirname(__FILE__)}/templates/api"
|
21
|
+
say 'Generating api...'
|
22
|
+
directory '.', '.'
|
23
|
+
say 'Done!', :green
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
class <%= name.classify.pluralize %>Api < Grape::API
|
2
|
+
represent <%= name.classify %>, with: <%= name.classify %>Entity
|
3
|
+
desc 'Get a list of <%= name.underscore.tableize %>', entity: <%= name.classify %>Entity
|
4
|
+
params do
|
5
|
+
optional :ids, type: String, desc: 'comma separated <%= name.underscore %> ids'
|
6
|
+
end
|
7
|
+
get do
|
8
|
+
<%= name.underscore.tableize %> = <%= name.classify %>.filter(declared(params))
|
9
|
+
present <%= name.underscore.tableize %>
|
10
|
+
end
|
11
|
+
|
12
|
+
desc 'Create an <%= name.underscore %>', entity: <%= name.classify %>Entity
|
13
|
+
params do
|
14
|
+
end
|
15
|
+
|
16
|
+
post do
|
17
|
+
begin
|
18
|
+
<%= name.underscore %> = <%= name.classify %>.create(declared(params))
|
19
|
+
rescue NameError
|
20
|
+
error!(present_error(:kind_not_found))
|
21
|
+
end
|
22
|
+
error!(present_error(:record_invalid, <%= name.underscore %>.errors.full_messages)) unless <%= name.underscore %>.errors.empty?
|
23
|
+
present <%= name.underscore %>
|
24
|
+
end
|
25
|
+
|
26
|
+
params do
|
27
|
+
requires :id, desc: 'ID of the <%= name.underscore %>'
|
28
|
+
end
|
29
|
+
route_param :id do
|
30
|
+
desc 'Get an <%= name.underscore %>', entity: <%= name.classify %>Entity
|
31
|
+
get do
|
32
|
+
<%= name.underscore %> = <%= name.classify %>.find(params[:id])
|
33
|
+
present <%= name.underscore %>
|
34
|
+
end
|
35
|
+
|
36
|
+
desc 'Update an <%= name.underscore %>', entity: <%= name.classify %>Entity
|
37
|
+
params do
|
38
|
+
end
|
39
|
+
put do
|
40
|
+
# fetch <%= name.underscore %> record and update attributes. exceptions caught in app.rb
|
41
|
+
<%= name.underscore %> = <%= name.classify %>.find(params[:id])
|
42
|
+
<%= name.underscore %>.update_attributes!(declared(params).select { |param, value| value.present? })
|
43
|
+
present <%= name.underscore %>
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
class <%= name.classify %>Entity < Grape::Entity
|
2
|
+
root :data, :data
|
3
|
+
expose :id, proc: lambda { |o, opts| o.id.to_s }, documentation:
|
4
|
+
{ type: 'String', description: 'ID' }
|
5
|
+
expose :type, proc: lambda { |o, opts| o.class.name.underscore }, documentation:
|
6
|
+
{ type: 'String', description: '"<%= name.underscore %>"' }
|
data/lib/napa/generators.rb
CHANGED
data/lib/napa/version.rb
CHANGED
data/napa.gemspec
CHANGED
@@ -27,8 +27,9 @@ Gem::Specification.new do |gem|
|
|
27
27
|
gem.add_dependency 'unicorn'
|
28
28
|
gem.add_dependency 'statsd-ruby'
|
29
29
|
|
30
|
-
gem.add_development_dependency
|
31
|
-
gem.add_development_dependency
|
32
|
-
gem.add_development_dependency
|
33
|
-
gem.add_development_dependency
|
30
|
+
gem.add_development_dependency 'rspec'
|
31
|
+
gem.add_development_dependency 'pry'
|
32
|
+
gem.add_development_dependency 'git'
|
33
|
+
gem.add_development_dependency 'rubocop'
|
34
|
+
gem.add_development_dependency 'activerecord', '~>3.2.2'
|
34
35
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'active_record'
|
3
|
+
require 'napa/active_record_extensions/filter_by_hash'
|
4
|
+
|
5
|
+
class Foo < ActiveRecord::Base
|
6
|
+
include Napa::FilterByHash
|
7
|
+
end
|
8
|
+
|
9
|
+
describe Napa::FilterByHash do
|
10
|
+
context 'when a hash is provided' do
|
11
|
+
it 'returns an AR relation' do
|
12
|
+
expect(Foo.filter).to be_a(ActiveRecord::Relation)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'when nothing is provided' do
|
17
|
+
it 'returns an AR relation' do
|
18
|
+
expect(Foo.filter).to be_a(ActiveRecord::Relation)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: napa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Darby Frey
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -206,6 +206,20 @@ dependencies:
|
|
206
206
|
- - '>='
|
207
207
|
- !ruby/object:Gem::Version
|
208
208
|
version: '0'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: activerecord
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - ~>
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: 3.2.2
|
216
|
+
type: :development
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - ~>
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: 3.2.2
|
209
223
|
description: A simple framework for building APIs with Grape
|
210
224
|
email:
|
211
225
|
- darby@bellycard.com
|
@@ -222,11 +236,16 @@ files:
|
|
222
236
|
- Rakefile
|
223
237
|
- bin/napa
|
224
238
|
- lib/napa.rb
|
239
|
+
- lib/napa/active_record_extensions/filter_by_hash.rb
|
225
240
|
- lib/napa/activerecord.rb
|
226
241
|
- lib/napa/authentication.rb
|
227
242
|
- lib/napa/cli.rb
|
228
243
|
- lib/napa/generators.rb
|
244
|
+
- lib/napa/generators/api_generator.rb
|
229
245
|
- lib/napa/generators/scaffold_generator.rb
|
246
|
+
- lib/napa/generators/templates/api/app/apis/%name_tableize%_api.rb.tt
|
247
|
+
- lib/napa/generators/templates/api/app/entities/%name_underscore%_entity.rb.tt
|
248
|
+
- lib/napa/generators/templates/api/app/models/%name_underscore%.rb.tt
|
230
249
|
- lib/napa/generators/templates/scaffold/.env
|
231
250
|
- lib/napa/generators/templates/scaffold/.env.test
|
232
251
|
- lib/napa/generators/templates/scaffold/.gitignore.tt
|
@@ -262,6 +281,7 @@ files:
|
|
262
281
|
- lib/tasks/git.rake
|
263
282
|
- lib/tasks/routes.rake
|
264
283
|
- napa.gemspec
|
284
|
+
- spec/active_record_extensions/filter_by_hash_spec.rb
|
265
285
|
- spec/authentication_spec.rb
|
266
286
|
- spec/grape_extensions/error_formatter_spec.rb
|
267
287
|
- spec/identity_spec.rb
|
@@ -297,6 +317,7 @@ signing_key:
|
|
297
317
|
specification_version: 4
|
298
318
|
summary: A simple framework for building APIs with Grape
|
299
319
|
test_files:
|
320
|
+
- spec/active_record_extensions/filter_by_hash_spec.rb
|
300
321
|
- spec/authentication_spec.rb
|
301
322
|
- spec/grape_extensions/error_formatter_spec.rb
|
302
323
|
- spec/identity_spec.rb
|