Skip to content

Commit

Permalink
close #88 Create a resource detailing an abstraction schema.
Browse files Browse the repository at this point in the history
  • Loading branch information
mgurley committed Mar 12, 2015
1 parent 597f3ae commit 8faaef3
Show file tree
Hide file tree
Showing 7 changed files with 97 additions and 2 deletions.
4 changes: 2 additions & 2 deletions Gemfile.lock
Expand Up @@ -89,7 +89,7 @@ GEM
database_cleaner (1.3.0)
diff-lcs (1.2.5)
erubis (2.7.0)
execjs (2.3.0)
execjs (2.4.0)
factory_girl (4.4.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.4.1)
Expand Down Expand Up @@ -120,7 +120,7 @@ GEM
minitest (5.5.1)
multi_json (1.10.1)
multi_test (0.1.2)
netrc (0.10.2)
netrc (0.10.3)
nokogiri (1.6.6.2)
mini_portile (~> 0.6.0)
paper_trail (3.0.6)
Expand Down
@@ -0,0 +1,5 @@
module Abstractor
class AbstractorAbstractionSchemasController < Abstractor::ApplicationController
include Abstractor::Methods::Controllers::AbstractorAbstractionSchemasController
end
end
3 changes: 3 additions & 0 deletions config/routes.rb
Expand Up @@ -7,4 +7,7 @@
end
resources :abstractor_suggestions
end

resources :abstractor_abstraction_schemas do
end
end
@@ -0,0 +1,23 @@
module Abstractor
module Methods
module Controllers
module AbstractorAbstractionSchemasController
def self.included(base)
base.send :helper, :all
base.send :before_filter, :set_abstractor_abstraction_schema, only: :show
end

def show
respond_to do |format|
format.json { render json: Abstractor::Serializers::AbstractorAbstractionSchemaSerializer.new(@abstractor_abstraction_schema).as_json }
end
end

private
def set_abstractor_abstraction_schema
@abstractor_abstraction_schema = Abstractor::AbstractorAbstractionSchema.find(params[:id])
end
end
end
end
end
@@ -0,0 +1,29 @@
module Abstractor
module Serializers
class AbstractorAbstractionSchemaSerializer
def initialize(abstractor_abstraction_schema)
@abstractor_abstraction_schema = abstractor_abstraction_schema
end

def as_json(options = {})
{
"predicate" => abstractor_abstraction_schema.predicate,
"display_name" => abstractor_abstraction_schema.display_name,
"abstractor_object_type" => abstractor_abstraction_schema.abstractor_object_type.value,
"preferred_name" => abstractor_abstraction_schema.preferred_name,
"predicate_variants" => abstractor_abstraction_schema.abstractor_abstraction_schema_predicate_variants.map { |abstractor_abstraction_schema_predicate_variant| { 'value' => abstractor_abstraction_schema_predicate_variant.value } },
"object_values" => abstractor_abstraction_schema.abstractor_object_values.map do |abstractor_object_value|
{
'value' => abstractor_object_value.value,
'object_value_variants' => abstractor_object_value.abstractor_object_value_variants.map { |abstractor_object_value_variant| { 'value' => abstractor_object_value_variant.value } }
}
end
}
end

private

attr_reader :abstractor_abstraction_schema
end
end
end
1 change: 1 addition & 0 deletions lib/generators/abstractor/install/install_generator.rb
Expand Up @@ -85,6 +85,7 @@ def make_customizable
copy_file "controllers/abstractor_abstraction_groups_controller.rb", "#{path}/abstractor_abstraction_groups_controller.rb"
copy_file "controllers/abstractor_abstractions_controller.rb", "#{path}/abstractor_abstractions_controller.rb"
copy_file "controllers/abstractor_suggestions_controller.rb", "#{path}/abstractor_suggestions_controller.rb"
copy_file "controllers/abstractor_abstraction_schemas_controller.rb", "#{path}/abstractor_abstraction_schemas_controller.rb"
end

if options["customize-all"] || options["customize-helpers"]
Expand Down
@@ -0,0 +1,34 @@
require 'spec_helper'
require './test/dummy/lib/setup/setup/'
describe Abstractor::AbstractorAbstractionSchemasController, :type => :request do
let(:accept_json) { { "Accept" => "application/json" } }
let(:json_content_type) { { "Content-Type" => "application/json" } }
let(:accept_and_return_json) { accept_json.merge(json_content_type) }

before(:each) do
Abstractor::Setup.system
end

describe "GET /abstractor_abstraction_schemas/:id" do
it "returns a requested movie", focus: true do
abstractor_object_type = Abstractor::AbstractorObjectType.where(value: 'list').first
abstractor_abstraction_schema = FactoryGirl.create(:abstractor_abstraction_schema, predicate: 'has_some_property', display_name: 'some_property', abstractor_object_type: abstractor_object_type, preferred_name: 'property')
abstractor_abstraction_schema.abstractor_abstraction_schema_predicate_variants << FactoryGirl.build(:abstractor_abstraction_schema_predicate_variant, value: 'smoperty')
abstractor_abstraction_schema.abstractor_object_values << FactoryGirl.build(:abstractor_object_value, value: 'foo')
FactoryGirl.create(:abstractor_object_value_variant, abstractor_object_value: abstractor_abstraction_schema.abstractor_object_values.first, value: 'boo')

get "/abstractor_abstraction_schemas/#{abstractor_abstraction_schema.id}", {}, accept_json

expect(response.status).to be 200

body = JSON.parse(response.body)
puts body
expect(body['predicate']).to eq 'has_some_property'
expect(body['display_name']).to eq 'some_property'
expect(body['abstractor_object_type']).to eq 'list'
expect(body['preferred_name']).to eq 'property'
expect(body['predicate_variants']).to eq [{ 'value' => 'smoperty' }]
expect(body['object_values']).to eq [{"value"=>"foo", "object_value_variants"=>[{"value"=>"boo"}]}]
end
end
end

0 comments on commit 8faaef3

Please sign in to comment.