sinatra-active-model-serializers 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9de09c12a25df8fa91796a5574b5c532c320b6ee
4
+ data.tar.gz: b2e44cb5e2297efe91436422c846de165f004696
5
+ SHA512:
6
+ metadata.gz: c33258af4814d0037f66deb4f7f22685c07363e1b2af47f6251469b04dff85ab4af038772371c02fab62f2cb192a95277a8d05f94e77453c069579d5f73e5244
7
+ data.tar.gz: b065396ae32be06bbacbc80315cd7d5a486fc7c7c6c23d349d4d02cf99477712c9dac53cd555806808e3a257d967b2d1282c715589e8f44dffb8fccf762fba2f
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ Gemfile.lock
2
+ db/sinatra_active_model_serializers.sqlite3
3
+ db/schema.rb
4
+ sinatra-active-model-serializers-0.0.1.gem
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source 'http://rubygems.org'
2
+ gemspec
3
+
4
+ group :test do
5
+ gem 'sinatra', '1.4.5'
6
+ gem 'sinatra-contrib', '1.4.2'
7
+ gem 'rake', '10.4.2'
8
+ gem 'json-schema', '2.5.0'
9
+ gem 'rspec', '3.1.0'
10
+ gem 'sinatra-activerecord', '2.0.4'
11
+ gem 'sqlite3', '1.3.10'
12
+ gem 'database_cleaner', '1.4.0'
13
+ end
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 Saulo da Silva Santiago
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,89 @@
1
+ [ ![Codeship Status for SauloSilva/sinatra-active-model-serializers](https://codeship.com/projects/0be149a0-8d56-0132-3f2c-5691319bff63/status?branch=master)](https://codeship.com/projects/60665)
2
+
3
+ # Sinatra::ActiveModelSerializers
4
+
5
+ This gem has the function of adapt the Active Model Serializers to work in Sinatra from a more practical way with models.
6
+ If do you use everything at the default, just require `sinatra_active_model_serializers` for serializers work correctly the a json response.
7
+
8
+ ## Requirements
9
+
10
+ Ruby 1.9.2 or greater, Sinatra 1.4.5 or greater and Sinatra Contrib 1.4.2 or greater.
11
+
12
+ ## Installation
13
+
14
+ `gem install sinatra-active-model-serializers`
15
+
16
+ or with bundler
17
+
18
+ ```
19
+ # Gemfile
20
+ source :rubygems
21
+
22
+ gem 'sinatra'
23
+ gem 'sinatra-contrib'
24
+ gem 'sinatra-active-record'
25
+ gem 'sinatra-active-model-serializers'
26
+ ```
27
+
28
+ ## Configure
29
+
30
+ First you have to being with the active record configured in your system environment correctly. If the environment is not set up, see their [documentation](https://github.com/janko-m/sinatra-activerecord#sinatra-activerecord-extension).
31
+ After is simply do require from our library on your `application.rb`, eg.
32
+
33
+ ```ruby
34
+ require 'rubygems'
35
+ require 'sinatra-active-model-serializers'
36
+
37
+ class App < Sinatra::Base
38
+ get '/' do
39
+ json Test.first
40
+ end
41
+ end
42
+ ```
43
+
44
+ ## Options
45
+
46
+ **active_model_serializers**
47
+
48
+ This attribute is an object, all inserted configuration this object it will be passed on to Active Model Serializers, eg.
49
+
50
+ ```
51
+ set :active_model_serializers, { root: false }
52
+ ```
53
+
54
+ **serializers_path**
55
+
56
+ By default this attribute is set up to look for the serializers from your project in "* app / serializers *". Whether you have a different environment you can set up by inserting the path of the string, eg.
57
+
58
+ ```
59
+ set :serializers_path, './whatever_path/serializers'
60
+ ```
61
+
62
+ or not to automatically requires
63
+
64
+ ```
65
+ set :serializers_path, false
66
+ ```
67
+
68
+ **json**
69
+
70
+ When you return a json, you can send a the second parameter.
71
+ This the second parameter is an object. This object may contain new configurations to assign to the Active Model Serializers or to rewrite any already set by default, eg.
72
+
73
+ ```
74
+ get '/' do
75
+ json Resource.first, { root: false }
76
+ end
77
+ ```
78
+
79
+ or
80
+
81
+ ```
82
+ get '/' do
83
+ json Resource.first, { scope: self }
84
+ end
85
+ ```
86
+
87
+ ## License
88
+
89
+ [MIT](https://github.com/SauloSilva/sinatra-active-model-serializers/blob/master/LICENSE)
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require "sinatra/activerecord/rake"
2
+
3
+ namespace :db do
4
+ task :load_config do
5
+ require "./spec/app/application"
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ class CreateTests < ActiveRecord::Migration
2
+ def change
3
+ create_table :tests do |t|
4
+ t.string :foo
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,2 @@
1
+ require 'active_model_serializers'
2
+ require 'sinatra_active_model_serializers/json'
@@ -0,0 +1,32 @@
1
+ module Sinatra
2
+ SERIALIZERS_DEFAULT_PATH = './app/serializers'
3
+
4
+ module JSON
5
+ def initialize
6
+ files_required
7
+ super
8
+ end
9
+
10
+ def json(object, options={})
11
+ options = options.merge(settings.active_model_serializers)
12
+
13
+ serializer = ActiveModel::Serializer.serializer_for(object, options)
14
+
15
+ if serializer
16
+ serializer.new(object, options).to_json
17
+ else
18
+ object.to_json(options)
19
+ end
20
+ end
21
+
22
+ def files_required
23
+ return unless settings.serializers_path
24
+ Dir["#{ settings.serializers_path }/**/*.rb"].flatten.sort.each do |file|
25
+ require file
26
+ end
27
+ end
28
+ end
29
+
30
+ Base.set :active_model_serializers, {}
31
+ Base.set :serializers_path, SERIALIZERS_DEFAULT_PATH
32
+ end
@@ -0,0 +1,6 @@
1
+ module SinatraActiveModelSerializers
2
+ PATCH = 2
3
+ MINOR = 0
4
+ MAJOR = 0
5
+ VERSION = "#{MAJOR}.#{MINOR}.#{PATCH}".freeze
6
+ end
@@ -0,0 +1,45 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ # Run `rake sinatra-contrib.gemspec` to update the gemspec.
4
+ require File.expand_path('../lib/sinatra_active_model_serializers/version', __FILE__)
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = 'sinatra-active-model-serializers'
8
+ s.version = SinatraActiveModelSerializers::VERSION
9
+ s.description = 'Adapter from Active Model Serializers, to work in Sinatra from a more practical way with models'
10
+ s.homepage = 'https://github.com/SauloSilva/sinatra-active-model-serializers'
11
+ s.summary = 'Adapter from Active Model Serializers'
12
+
13
+ s.license = 'MIT'
14
+
15
+ # generated from git shortlog -sn
16
+ s.authors = ['saulosantiago']
17
+
18
+ # generated from git shortlog -sne
19
+ s.email = ['saulodasilvasantiago@gmail.com']
20
+
21
+ # generated from git ls-files
22
+ s.files = [
23
+ '.gitignore',
24
+ 'Gemfile',
25
+ 'LICENSE',
26
+ 'README.md',
27
+ 'Rakefile',
28
+ 'db/migrate/00_create_tests.rb',
29
+ 'db/schema.rb',
30
+ 'lib/sinatra_active_model_serializers.rb',
31
+ 'lib/sinatra_active_model_serializers/json.rb',
32
+ 'lib/sinatra_active_model_serializers/version.rb',
33
+ 'sinatra-active-model-serializers.gemspec',
34
+ 'spec/app/application.rb',
35
+ 'spec/app/models/test.rb',
36
+ 'spec/app/serializers/test_serializer.rb',
37
+ 'spec/json_spec.rb',
38
+ 'spec/schemas/test_with_root.json',
39
+ 'spec/schemas/test_without_root.json',
40
+ 'spec/spec_helper.rb',
41
+ 'spec/support/request_support.rb'
42
+ ]
43
+
44
+ s.add_runtime_dependency 'active_model_serializers', '0.9.3'
45
+ end
@@ -0,0 +1,33 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ Bundler.require(:defaut, :test)
4
+
5
+ require './lib/sinatra_active_model_serializers/'
6
+ Dir['./spec/app/models/**/*.rb'].flatten.sort.each { |file| require file}
7
+
8
+ module App
9
+ class Base < Sinatra::Base
10
+ register Sinatra::ActiveRecordExtension
11
+
12
+ set :serializers_path, './spec/app/serializers'
13
+
14
+ configure :test do
15
+ ActiveRecord::Base.logger = nil
16
+ end
17
+
18
+ set :database, {
19
+ adapter: 'sqlite3',
20
+ database: 'db/sinatra_active_model_serializers.sqlite3'
21
+ }
22
+
23
+ get '/with-root/' do
24
+ json Test.create(foo: 'bar'), { root: true }
25
+ end
26
+
27
+ get '/without-root/' do
28
+ json Test.create(foo: 'bar'), { root: false }
29
+ end
30
+ end
31
+ end
32
+
33
+ App::Base.run
@@ -0,0 +1,2 @@
1
+ class Test < ActiveRecord::Base
2
+ end
@@ -0,0 +1,7 @@
1
+ class TestSerializer < ActiveModel::Serializer
2
+ attributes :foo, :bar
3
+
4
+ def bar
5
+ "bar"
6
+ end
7
+ end
data/spec/json_spec.rb ADDED
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe App::Base do
4
+ it 'should response with root' do
5
+ get '/with-root/'
6
+ match_response_schema(:test_with_root)
7
+ end
8
+
9
+ it 'should response without root' do
10
+ get '/without-root/'
11
+ match_response_schema(:test_without_root)
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ {
2
+ "type": "object",
3
+ "required": [
4
+ "test"
5
+ ],
6
+ "properties": {
7
+ "test": {
8
+ "type": "object",
9
+ "required": [
10
+ "foo",
11
+ "bar"
12
+ ],
13
+ "properties": {
14
+ "foo": { "type": "string" },
15
+ "bar": { "type": "string" }
16
+ }
17
+ }
18
+ }
19
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "type": "object",
3
+ "required": [
4
+ "foo",
5
+ "bar"
6
+ ],
7
+ "properties": {
8
+ "foo": { "type": "string" },
9
+ "bar": { "type": "string" }
10
+ }
11
+ }
@@ -0,0 +1,28 @@
1
+ ENV['RACK_ENV'] = 'test'
2
+
3
+ require 'sinatra'
4
+ require 'sinatra/contrib'
5
+ require 'app/application'
6
+ require 'rspec'
7
+ require 'rack/test'
8
+ Dir[File.expand_path '../support/**/*.rb', __FILE__].each { |file| require file }
9
+
10
+ RSpec.configure do |config|
11
+ config.expect_with :rspec
12
+ include Rack::Test::Methods
13
+ include RequestSupport
14
+ DatabaseCleaner.clean_with :truncation
15
+ DatabaseCleaner.strategy = :transaction
16
+
17
+ before :all do
18
+ DatabaseCleaner.start
19
+ end
20
+
21
+ after :all do
22
+ DatabaseCleaner.clean
23
+ end
24
+
25
+ def app
26
+ App::Base
27
+ end
28
+ end
@@ -0,0 +1,14 @@
1
+ module RequestSupport
2
+ def response_body
3
+ JSON.parse last_response.body
4
+ end
5
+
6
+ def match_response_schema(schema, options={})
7
+ default_optitons = { strict: true, validate_schema: true }
8
+ schema_directory = "#{ Dir.pwd }/spec/schemas"
9
+ schema_path = "#{ schema_directory }/#{ schema }.json"
10
+
11
+ JSON::Validator.clear_cache
12
+ JSON::Validator.validate!(schema_path, response_body, default_optitons.merge(options))
13
+ end
14
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sinatra-active-model-serializers
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - saulosantiago
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-02-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: active_model_serializers
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.9.3
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.9.3
27
+ description: Adapter from Active Model Serializers, to work in Sinatra from a more
28
+ practical way with models
29
+ email:
30
+ - saulodasilvasantiago@gmail.com
31
+ executables: []
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - ".gitignore"
36
+ - Gemfile
37
+ - LICENSE
38
+ - README.md
39
+ - Rakefile
40
+ - db/migrate/00_create_tests.rb
41
+ - db/schema.rb
42
+ - lib/sinatra_active_model_serializers.rb
43
+ - lib/sinatra_active_model_serializers/json.rb
44
+ - lib/sinatra_active_model_serializers/version.rb
45
+ - sinatra-active-model-serializers.gemspec
46
+ - spec/app/application.rb
47
+ - spec/app/models/test.rb
48
+ - spec/app/serializers/test_serializer.rb
49
+ - spec/json_spec.rb
50
+ - spec/schemas/test_with_root.json
51
+ - spec/schemas/test_without_root.json
52
+ - spec/spec_helper.rb
53
+ - spec/support/request_support.rb
54
+ homepage: https://github.com/SauloSilva/sinatra-active-model-serializers
55
+ licenses:
56
+ - MIT
57
+ metadata: {}
58
+ post_install_message:
59
+ rdoc_options: []
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ requirements: []
73
+ rubyforge_project:
74
+ rubygems_version: 2.2.2
75
+ signing_key:
76
+ specification_version: 4
77
+ summary: Adapter from Active Model Serializers
78
+ test_files: []