grape-entity 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -30,6 +30,7 @@ pkg
30
30
  .yardoc/*
31
31
  dist
32
32
  Gemfile.lock
33
+ tmp
33
34
 
34
35
  ## Rubinius
35
36
  .rbx
data/README.markdown CHANGED
@@ -1,17 +1,10 @@
1
- # GrapeEntity
1
+ # Grape::Entity
2
2
 
3
- ## CI
4
3
  [![Build Status](https://travis-ci.org/agileanimal/grape-entity.png?branch=master)](https://travis-ci.org/agileanimal/grape-entity)
5
4
 
6
5
  ## Introduction
7
6
 
8
- This gem is the Entity extracted out of [Grape](https://github.com/intridea/grape).
9
-
10
- Grape's Entity is a great idea: a API focussed Facade that sits on top of a model object.
11
-
12
- The intend is to allow the Entity to be used outside of Grape and provide additional exposure to parts of the entity needed to simplify testing parts of an API.
13
-
14
- We intend to use the specs from grape to ensure we maintain compatability with Grape through our changes so that we can use the Entity to replace Grape's internal Entity.
7
+ This gem adds Entity support to API frameworks, such as [Grape](https://github.com/intridea/grape). Grape's Entity is an API focussed facade that sits on top of an object model.
15
8
 
16
9
  ## Goals
17
10
 
@@ -23,10 +16,6 @@ There is probably something heavier than an Entity that exists as well. A way to
23
16
 
24
17
  In this spirit I want to give Entities a life of their own.
25
18
 
26
- ## Project Tracking
27
-
28
- * - Need to setup something up for this -
29
-
30
19
  ## Reusable Responses with Entities
31
20
 
32
21
  Entities are a reusable means for converting Ruby objects to API responses.
@@ -35,7 +24,7 @@ ever larger responses, using inheritance.
35
24
 
36
25
  ### Defining Entities
37
26
 
38
- Entities inherit from GrapeEntity::Entity, and define a simple DSL. Exposures can use
27
+ Entities inherit from Grape::Entity, and define a simple DSL. Exposures can use
39
28
  runtime options to determine which fields should be visible, these options are
40
29
  available to `:if`, `:unless`, and `:proc`. The option keys `:version` and `:collection`
41
30
  will always be defined. The `:version` key is defined as `api.version`. The
@@ -61,7 +50,7 @@ array.
61
50
  ```ruby
62
51
  module API
63
52
  module Entities
64
- class Status < GrapeEntity::Entity
53
+ class Status < Grape::Entity
65
54
  expose :user_name
66
55
  expose :text, :documentation => { :type => "string", :desc => "Status update text." }
67
56
  expose :ip, :if => { :type => :full }
@@ -88,7 +77,7 @@ of an existing class:
88
77
 
89
78
  ```ruby
90
79
  class Status
91
- include GrapeEntity::Entity::DSL
80
+ include Grape::Entity::DSL
92
81
 
93
82
  entity :text, :user_id do
94
83
  expose :detailed, if: :conditional
@@ -110,7 +99,7 @@ If the entity includes documentation it can be included in an endpoint's descrip
110
99
 
111
100
  ```ruby
112
101
  module API
113
- class Statuses < GrapeEntity::API
102
+ class Statuses < Grape::API
114
103
  version 'v1'
115
104
 
116
105
  desc 'Statuses index', {
@@ -136,7 +125,7 @@ class Status
136
125
  Status.new(self)
137
126
  end
138
127
 
139
- class Entity < GrapeEntity::Entity
128
+ class Entity < Grape::Entity
140
129
  expose :text, :user_id
141
130
  end
142
131
  end
@@ -157,7 +146,7 @@ However, when `object.check` equals "bar" both `field_b` and `foo` will be expos
157
146
  ```ruby
158
147
  module API
159
148
  module Entities
160
- class Status < GrapeEntity::Entity
149
+ class Status < Grape::Entity
161
150
  expose :field_a, :foo, :if => lambda { |object, options| object.check == "foo" }
162
151
  expose :field_b, :foo, :if => lambda { |object, options| object.check == "bar" }
163
152
  end
@@ -170,7 +159,7 @@ This can be problematic, when you have mixed collections. Using `respond_to?` is
170
159
  ```ruby
171
160
  module API
172
161
  module Entities
173
- class Status < GrapeEntity::Entity
162
+ class Status < Grape::Entity
174
163
  expose :field_a, :if => lambda { |object, options| object.check == "foo" }
175
164
  expose :field_b, :if => lambda { |object, options| object.check == "bar" }
176
165
  expose :foo, :if => lambda { |object, options| object.respond_to?(:foo) }
data/grape-entity.gemspec CHANGED
@@ -7,21 +7,16 @@ Gem::Specification.new do |s|
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ["Michael Bleigh"]
9
9
  s.email = ["michael@intridea.com"]
10
- s.homepage = "https://github.com/intridea/grape"
10
+ s.homepage = "https://github.com/agileanimal/grape-entity"
11
11
  s.summary = %q{A simple facade for managing the relationship between your model and API.}
12
12
  s.description = %q{Extracted from Grape, A Ruby framework for rapid API development with great conventions.}
13
13
  s.license = "MIT"
14
14
 
15
15
  s.rubyforge_project = "grape-entity"
16
16
 
17
- # s.add_runtime_dependency 'activesupport'
18
- # s.add_runtime_dependency 'rack-jsonp'
19
- # s.add_runtime_dependency 'multi_json', '>= 1.3.2'
20
- # s.add_runtime_dependency 'multi_xml', '>= 0.5.2'
21
- # s.add_runtime_dependency 'hashie', '~> 1.2'
22
- # s.add_runtime_dependency 'virtus'
23
- # s.add_runtime_dependency 'builder'
24
-
17
+ s.add_runtime_dependency 'activesupport'
18
+ s.add_runtime_dependency 'multi_json', '>= 1.3.2'
19
+
25
20
  s.add_development_dependency 'rake'
26
21
  s.add_development_dependency 'maruku'
27
22
  s.add_development_dependency 'yard'
data/lib/grape_entity.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require "grape_entity/version"
2
2
 
3
- module GrapeEntity
3
+ module Grape
4
4
  autoload :Entity, 'grape_entity/entity'
5
5
  end
6
+
@@ -1,4 +1,4 @@
1
- module GrapeEntity
1
+ module Grape
2
2
  # An Entity is a lightweight structure that allows you to easily
3
3
  # represent data from your application in a consistent and abstracted
4
4
  # way in your API. Entities can also provide documentation for the
@@ -8,7 +8,7 @@ module GrapeEntity
8
8
  #
9
9
  # module API
10
10
  # module Entities
11
- # class User < GrapeEntity::Entity
11
+ # class User < Grape::Entity
12
12
  # expose :first_name, :last_name, :screen_name, :location
13
13
  # expose :field, :documentation => {:type => "string", :desc => "describe the field"}
14
14
  # expose :latest_status, :using => API::Status, :as => :status, :unless => {:collection => true}
@@ -27,7 +27,7 @@ module GrapeEntity
27
27
  # @example Usage in the API Layer
28
28
  #
29
29
  # module API
30
- # class Users < GrapeEntity::API
30
+ # class Users < Grape::API
31
31
  # version 'v2'
32
32
  #
33
33
  # desc 'User index', { :object_fields => API::Entities::User.documentation }
@@ -47,7 +47,7 @@ module GrapeEntity
47
47
  def self.included(base)
48
48
  base.extend ClassMethods
49
49
  ancestor_entity_class = base.ancestors.detect{|a| a.entity_class if a.respond_to?(:entity_class)}
50
- base.const_set(:Entity, Class.new(ancestor_entity_class || GrapeEntity::Entity)) unless const_defined?(:Entity)
50
+ base.const_set(:Entity, Class.new(ancestor_entity_class || Grape::Entity)) unless const_defined?(:Entity)
51
51
  end
52
52
 
53
53
  module ClassMethods
@@ -61,13 +61,13 @@ module GrapeEntity
61
61
 
62
62
  # Call this to make exposures to the entity for this Class.
63
63
  # Can be called with symbols for the attributes to expose,
64
- # a block that yields the full Entity DSL (See GrapeEntity::Entity),
64
+ # a block that yields the full Entity DSL (See Grape::Entity),
65
65
  # or both.
66
66
  #
67
67
  # @example Symbols only.
68
68
  #
69
69
  # class User
70
- # include GrapeEntity::Entity::DSL
70
+ # include Grape::Entity::DSL
71
71
  #
72
72
  # entity :name, :email
73
73
  # end
@@ -75,7 +75,7 @@ module GrapeEntity
75
75
  # @example Mixed.
76
76
  #
77
77
  # class User
78
- # include GrapeEntity::Entity::DSL
78
+ # include Grape::Entity::DSL
79
79
  #
80
80
  # entity :name, :email do
81
81
  # expose :latest_status, using: Status::Entity, if: :include_status
@@ -109,7 +109,7 @@ module GrapeEntity
109
109
  # it will yield the object being represented and the options passed to the
110
110
  # representation call. Return true to prevent exposure, false to allow it.
111
111
  # @option options :using This option allows you to map an attribute to another Grape
112
- # Entity. Pass it a GrapeEntity::Entity class and the attribute in question will
112
+ # Entity. Pass it a Grape::Entity class and the attribute in question will
113
113
  # automatically be transformed into a representation that will receive the same
114
114
  # options as the parent entity when called. Note that arrays are fine here and
115
115
  # will automatically be detected and handled appropriately.
@@ -180,7 +180,7 @@ module GrapeEntity
180
180
  #
181
181
  # module API
182
182
  # module Entities
183
- # class User < GrapeEntity::Entity
183
+ # class User < Grape::Entity
184
184
  # format_with :timestamp do |date|
185
185
  # date.strftime('%m/%d/%Y')
186
186
  # end
@@ -192,7 +192,7 @@ module GrapeEntity
192
192
  #
193
193
  # @example Formatters are available to all decendants
194
194
  #
195
- # GrapeEntity::Entity.format_with :timestamp do |date|
195
+ # Grape::Entity.format_with :timestamp do |date|
196
196
  # date.strftime('%m/%d/%Y')
197
197
  # end
198
198
  #
@@ -225,7 +225,7 @@ module GrapeEntity
225
225
  #
226
226
  # module API
227
227
  # module Entities
228
- # class User < GrapeEntity::Entity
228
+ # class User < Grape::Entity
229
229
  # root 'users', 'user'
230
230
  # expose :id
231
231
  # end
@@ -235,7 +235,7 @@ module GrapeEntity
235
235
  # @example Usage in the API Layer
236
236
  #
237
237
  # module API
238
- # class Users < GrapeEntity::API
238
+ # class Users < Grape::API
239
239
  # version 'v2'
240
240
  #
241
241
  # # this will render { "users": [ {"id":"1"}, {"id":"2"} ] }
@@ -1,3 +1,3 @@
1
1
  module GrapeEntity
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe GrapeEntity::Entity do
4
- let(:fresh_class) { Class.new(GrapeEntity::Entity) }
3
+ describe Grape::Entity do
4
+ let(:fresh_class) { Class.new(Grape::Entity) }
5
5
 
6
6
  context 'class methods' do
7
7
  subject { fresh_class }
@@ -379,7 +379,7 @@ describe GrapeEntity::Entity do
379
379
  it 'disables root key name for child representations' do
380
380
 
381
381
  module EntitySpec
382
- class FriendEntity < GrapeEntity::Entity
382
+ class FriendEntity < Grape::Entity
383
383
  root 'friends', 'friend'
384
384
  expose :name, :email
385
385
  end
@@ -398,7 +398,7 @@ describe GrapeEntity::Entity do
398
398
 
399
399
  it 'passes through custom options' do
400
400
  module EntitySpec
401
- class FriendEntity < GrapeEntity::Entity
401
+ class FriendEntity < Grape::Entity
402
402
  root 'friends', 'friend'
403
403
  expose :name
404
404
  expose :email, :if => { :user_type => :admin }
@@ -424,7 +424,7 @@ describe GrapeEntity::Entity do
424
424
 
425
425
  it 'ignores the :collection parameter in the source options' do
426
426
  module EntitySpec
427
- class FriendEntity < GrapeEntity::Entity
427
+ class FriendEntity < Grape::Entity
428
428
  root 'friends', 'friend'
429
429
  expose :name
430
430
  expose :email, :if => { :collection => true }
@@ -533,12 +533,12 @@ describe GrapeEntity::Entity do
533
533
 
534
534
  it 'creates an Entity class when called' do
535
535
  subject.should_not be_const_defined :Entity
536
- subject.send(:include, GrapeEntity::Entity::DSL)
536
+ subject.send(:include, Grape::Entity::DSL)
537
537
  subject.should be_const_defined :Entity
538
538
  end
539
539
 
540
540
  context 'pre-mixed' do
541
- before{ subject.send(:include, GrapeEntity::Entity::DSL) }
541
+ before{ subject.send(:include, Grape::Entity::DSL) }
542
542
 
543
543
  it 'is able to define entity traits through DSL' do
544
544
  subject.entity do
data/spec/spec_helper.rb CHANGED
@@ -2,11 +2,9 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
3
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'support'))
4
4
 
5
- # $stdout = StringIO.new
6
-
7
5
  require 'rubygems'
8
6
  require 'bundler'
7
+
9
8
  Bundler.require :default, :test
10
9
 
11
10
  require 'pry'
12
- require 'base64'
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: grape-entity
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.0
5
+ version: 0.2.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Michael Bleigh
@@ -11,6 +11,38 @@ bindir: bin
11
11
  cert_chain: []
12
12
  date: 2013-01-13 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ type: :runtime
16
+ prerelease: false
17
+ name: activesupport
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ! '>='
22
+ - !ruby/object:Gem::Version
23
+ version: '0'
24
+ requirement: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ type: :runtime
32
+ prerelease: false
33
+ name: multi_json
34
+ version_requirements: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: 1.3.2
40
+ requirement: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.3.2
14
46
  - !ruby/object:Gem::Dependency
15
47
  type: :development
16
48
  prerelease: false
@@ -116,8 +148,7 @@ files:
116
148
  - lib/grape_entity/version.rb
117
149
  - spec/grape_entity/entity_spec.rb
118
150
  - spec/spec_helper.rb
119
- - tmp/rspec_guard_result
120
- homepage: https://github.com/intridea/grape
151
+ homepage: https://github.com/agileanimal/grape-entity
121
152
  licenses:
122
153
  - MIT
123
154
  post_install_message:
@@ -131,7 +162,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
131
162
  - !ruby/object:Gem::Version
132
163
  segments:
133
164
  - 0
134
- hash: -2128325401316221325
165
+ hash: -1479047909720369637
135
166
  version: '0'
136
167
  required_rubygems_version: !ruby/object:Gem::Requirement
137
168
  none: false
@@ -140,7 +171,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
171
  - !ruby/object:Gem::Version
141
172
  segments:
142
173
  - 0
143
- hash: -2128325401316221325
174
+ hash: -1479047909720369637
144
175
  version: '0'
145
176
  requirements: []
146
177
  rubyforge_project: grape-entity
@@ -1 +0,0 @@
1
-