napa 0.1.14 → 0.1.15

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 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