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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 69c7c3558aa04559c34f050ada2fac044daebd6c
4
- data.tar.gz: 5b9c79fe39d53ecee82f3c5f083e8335d29021aa
3
+ metadata.gz: e4f80b689c9f468319a5344e2659ee3da3dc0160
4
+ data.tar.gz: fae65a84303bb8594fedc3304e8738adc2bf8930
5
5
  SHA512:
6
- metadata.gz: f8038327e34d0395944aa5c81b3aa3e46f5aa6120bccc0cefefe0ed2e102d13d34a30228937a0a96123a12bcabcd50f587b04a490e20b288f4a3b7a2b7818108
7
- data.tar.gz: e518656ddf2ca3e57dedc315dcc480ae524e91efe7eb6a95001fdc70055586f78f3e0cbdf48de3deb4ab97fe098f72cda5e53911262239d07bf78d65723b1490
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 %>"' }
@@ -0,0 +1,3 @@
1
+ class <%= name.classify %> < ActiveRecord::Base
2
+ include Napa::FilterByHash
3
+ end
@@ -1 +1,2 @@
1
1
  require 'napa/generators/scaffold_generator'
2
+ require 'napa/generators/api_generator'
data/lib/napa/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Napa
2
- VERSION = '0.1.14'
2
+ VERSION = '0.1.15'
3
3
 
4
4
  class Version
5
5
  class << self
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 "rspec"
31
- gem.add_development_dependency "pry"
32
- gem.add_development_dependency "git"
33
- gem.add_development_dependency "rubocop"
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.14
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: 2013-12-30 00:00:00.000000000 Z
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