acts_as_api 0.4 → 0.4.1

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.
data/Gemfile CHANGED
@@ -5,9 +5,9 @@ gemspec
5
5
 
6
6
  group :test do
7
7
  gem 'sqlite3-ruby'
8
- gem 'mongoid', '>= 2.0.1'
8
+ gem 'mongoid', '>= 3.0.1'
9
9
  gem 'rspec', '>= 2.9.0'
10
10
  gem 'rspec-rails', '>= 2.5.0'
11
11
  gem 'webrat'
12
12
  gem 'shared_engine', :path => './spec/shared_engine'
13
- end
13
+ end
@@ -1,3 +1,7 @@
1
+ === 0.4.1 2012-07-18
2
+
3
+ * Added support for Mongoid 3
4
+
1
5
  === 0.4 2012-04-30
2
6
 
3
7
  * Added support for a second parameter (options) to pass to as_api_response
@@ -17,12 +17,12 @@ Gem::Specification.new do |s|
17
17
  s.add_dependency('rack','>= 1.1.0')
18
18
 
19
19
  s.add_development_dependency('rails', ['>= 3.2.3'])
20
- s.add_development_dependency('mongoid', ['>= 2.0.1'])
20
+ s.add_development_dependency('mongoid', ['>= 3.0.1'])
21
21
 
22
22
  s.rdoc_options = ['--charset=UTF-8']
23
-
23
+
24
24
  s.files = `git ls-files`.split("\n")
25
25
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
26
26
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
27
27
  s.require_paths = ["lib"]
28
- end
28
+ end
@@ -53,7 +53,7 @@ module ActsAsApi
53
53
  api_root_name = ActsAsApi::Config.default_root.to_s
54
54
  end
55
55
 
56
- api_root_name = api_root_name.underscore.tr('/', '_')
56
+ api_root_name = api_root_name.to_s.underscore.tr('/', '_')
57
57
 
58
58
  if api_model.is_a?(Array) || (defined?(ActiveRecord) && api_model.is_a?(ActiveRecord::Relation))
59
59
  api_root_name = api_root_name.pluralize
@@ -1,3 +1,3 @@
1
1
  module ActsAsApi
2
- VERSION = "0.4"
2
+ VERSION = "0.4.1"
3
3
  end
@@ -58,6 +58,25 @@ describe SharedEngine::RespondWithUsersController do
58
58
  end
59
59
 
60
60
  end
61
+
62
+ context "returning all models without default root and no order" do
63
+
64
+ before(:each) do
65
+ get :index_no_root_no_order, :api_template => :name_only, :format => 'json'
66
+ end
67
+
68
+ it "should return HTTP 200 status" do
69
+ response.code.should == "200"
70
+ end
71
+
72
+ it "should contain the specified attributes" do
73
+ response_body_json["users"].each do |user|
74
+ user.should have_key( "first_name" )
75
+ user.should have_key( "last_name" )
76
+ end
77
+ end
78
+
79
+ end
61
80
 
62
81
  end
63
82
 
@@ -94,11 +113,28 @@ describe SharedEngine::RespondWithUsersController do
94
113
  response.code.should == "422"
95
114
  end
96
115
 
97
- it "should return errors as json" do
116
+ it "should return errors as xml" do
98
117
  response_body.should have_selector("errors > error")
99
118
  end
100
119
 
101
120
  end
121
+
122
+ context "returning all models without default root and no order" do
123
+
124
+ before(:each) do
125
+ get :index_no_root_no_order, :api_template => :name_only, :format => 'xml'
126
+ end
127
+
128
+ it "should return HTTP 200 status" do
129
+ response.code.should == "200"
130
+ end
131
+
132
+ it "should contain the specified attributes" do
133
+ response_body.should have_selector( "users > user > first-name", :count => 3 )
134
+ response_body.should have_selector( "users > user > last-name", :count => 3 )
135
+ end
136
+
137
+ end
102
138
  end
103
139
 
104
140
  end
@@ -7,7 +7,7 @@ gem 'rails', '3.2.3'
7
7
 
8
8
 
9
9
  gem "bson_ext"
10
- gem "mongoid", ">= 2.0.0.beta.19"
10
+ gem "mongoid", ">= 3.0.0.rc"
11
11
 
12
12
  gem 'shared_engine', :path => '../shared_engine'
13
13
  gem 'acts_as_api', :path => '../../'
@@ -15,4 +15,4 @@ gem 'acts_as_api', :path => '../../'
15
15
  group :test do
16
16
  gem 'rspec-rails', '>= 2.5.0'
17
17
  gem 'webrat'
18
- end
18
+ end
@@ -45,4 +45,4 @@ class User
45
45
  }
46
46
  end
47
47
 
48
- end
48
+ end
@@ -1,20 +1,120 @@
1
1
  development:
2
- host: localhost
3
- database: mongoid_dummy_development
2
+ # Configure available database sessions. (required)
3
+ sessions:
4
+ # Defines the default session. (required)
5
+ default:
6
+ # Defines the name of the default database that Mongoid can connect to.
7
+ # (required).
8
+ database: mongoid_dummy_development
9
+ # Provides the hosts the default session can connect to. Must be an array
10
+ # of host:port pairs. (required)
11
+ hosts:
12
+ - localhost:27017
13
+ options:
14
+ # Change whether the session persists in safe mode by default.
15
+ # (default: false)
16
+ # safe: false
4
17
 
18
+ # Change the default consistency model to :eventual or :strong.
19
+ # :eventual will send reads to secondaries, :strong sends everything
20
+ # to master. (default: :eventual)
21
+ consistency: :strong
22
+ # Configure Mongoid specific options. (optional)
23
+ options:
24
+ # Configuration for whether or not to allow access to fields that do
25
+ # not have a field definition on the model. (default: true)
26
+ # allow_dynamic_fields: true
27
+
28
+ # Enable the identity map, needed for eager loading. (default: false)
29
+ # identity_map_enabled: false
30
+
31
+ # Includes the root model name in json serialization. (default: false)
32
+ # include_root_in_json: false
33
+
34
+ # Include the _type field in serializaion. (default: false)
35
+ # include_type_for_serialization: false
36
+
37
+ # Preload all models in development, needed when models use
38
+ # inheritance. (default: false)
39
+ # preload_models: false
40
+
41
+ # Protect id and type from mass assignment. (default: true)
42
+ # protect_sensitive_fields: true
43
+
44
+ # Raise an error when performing a #find and the document is not found.
45
+ # (default: true)
46
+ # raise_not_found_error: true
47
+
48
+ # Raise an error when defining a scope with the same name as an
49
+ # existing method. (default: false)
50
+ # scope_overwrite_exception: false
51
+
52
+ # Skip the database version check, used when connecting to a db without
53
+ # admin access. (default: false)
54
+ # skip_version_check: false
55
+
56
+ # User Active Support's time zone in conversions. (default: true)
57
+ # use_activesupport_time_zone: true
58
+
59
+ # Ensure all times are UTC in the app side. (default: false)
60
+ # use_utc: false
5
61
  test:
6
- host: localhost
7
- database: mongoid_dummy_test
8
-
9
- # set these environment variables on your prod server
10
- production:
11
- host: <%= ENV['MONGOID_HOST'] %>
12
- port: <%= ENV['MONGOID_PORT'] %>
13
- username: <%= ENV['MONGOID_USERNAME'] %>
14
- password: <%= ENV['MONGOID_PASSWORD'] %>
15
- database: <%= ENV['MONGOID_DATABASE'] %>
16
- # slaves:
17
- # - host: slave1.local
18
- # port: 27018
19
- # - host: slave2.local
20
- # port: 27019
62
+ # Configure available database sessions. (required)
63
+ sessions:
64
+ # Defines the default session. (required)
65
+ default:
66
+ # Defines the name of the default database that Mongoid can connect to.
67
+ # (required).
68
+ database: mongoid_dummy_test
69
+ # Provides the hosts the default session can connect to. Must be an array
70
+ # of host:port pairs. (required)
71
+ hosts:
72
+ - localhost:27017
73
+ options:
74
+ # Change whether the session persists in safe mode by default.
75
+ # (default: false)
76
+ # safe: false
77
+
78
+ # Change the default consistency model to :eventual or :strong.
79
+ # :eventual will send reads to secondaries, :strong sends everything
80
+ # to master. (default: :eventual)
81
+ consistency: :strong
82
+ # Configure Mongoid specific options. (optional)
83
+ options:
84
+ # Configuration for whether or not to allow access to fields that do
85
+ # not have a field definition on the model. (default: true)
86
+ # allow_dynamic_fields: true
87
+
88
+ # Enable the identity map, needed for eager loading. (default: false)
89
+ # identity_map_enabled: false
90
+
91
+ # Includes the root model name in json serialization. (default: false)
92
+ # include_root_in_json: false
93
+
94
+ # Include the _type field in serializaion. (default: false)
95
+ # include_type_for_serialization: false
96
+
97
+ # Preload all models in development, needed when models use
98
+ # inheritance. (default: false)
99
+ # preload_models: false
100
+
101
+ # Protect id and type from mass assignment. (default: true)
102
+ # protect_sensitive_fields: true
103
+
104
+ # Raise an error when performing a #find and the document is not found.
105
+ # (default: true)
106
+ # raise_not_found_error: true
107
+
108
+ # Raise an error when defining a scope with the same name as an
109
+ # existing method. (default: false)
110
+ # scope_overwrite_exception: false
111
+
112
+ # Skip the database version check, used when connecting to a db without
113
+ # admin access. (default: false)
114
+ # skip_version_check: false
115
+
116
+ # User Active Support's time zone in conversions. (default: true)
117
+ # use_activesupport_time_zone: true
118
+
119
+ # Ensure all times are UTC in the app side. (default: false)
120
+ # use_utc: false
@@ -10,6 +10,11 @@ module SharedEngine
10
10
  respond_with @users, :api_template => params[:api_template].to_sym, :root => :users
11
11
  end
12
12
 
13
+ def index_no_root_no_order
14
+ @users = User.all
15
+ respond_with @users, :api_template => params[:api_template].to_sym
16
+ end
17
+
13
18
  def index_meta
14
19
  @users = User.all
15
20
  meta_hash = { :page => 1, :total => 999 }
@@ -56,4 +61,4 @@ module SharedEngine
56
61
  end
57
62
 
58
63
  end
59
- end
64
+ end
@@ -68,4 +68,4 @@ module SharedEngine
68
68
  end
69
69
 
70
70
  end
71
- end
71
+ end
@@ -15,6 +15,7 @@ SharedEngine::Engine.routes.draw do
15
15
  collection do
16
16
  get 'index_meta'
17
17
  get 'index_relation'
18
+ get 'index_no_root_no_order'
18
19
  end
19
20
  member do
20
21
  get 'show_meta'
@@ -0,0 +1,69 @@
1
+ module Magic
2
+ module Rails
3
+ module Engine
4
+ ##
5
+ # Automatically append all of the current engine's routes to the main
6
+ # application's route set. This needs to be done for ALL functional tests that
7
+ # use engine routes, since the mounted routes don't work during tests.
8
+ #
9
+ # @param [Symbol] engine_symbol Optional; if provided, uses this symbol to
10
+ # locate the engine class by name, otherwise uses the module of the calling
11
+ # test case as the presumed name of the engine.
12
+ #
13
+ # @author Jason Hamilton (jhamilton@greatherorift.com)
14
+ # @author Matthew Ratzloff (matt@urbaninfluence.com)
15
+ # @author Xavier Dutreilh (xavier@dutreilh.fr)
16
+ def load_engine_routes(engine_symbol = nil)
17
+ if engine_symbol
18
+ engine_name = engine_symbol.to_s.camelize
19
+ else
20
+ # No engine provided, so presume the current engine is the one to load
21
+ engine_name = self.class.name.split("::").first.split("(").last
22
+ end
23
+ engine = ("#{engine_name}::Engine").constantize
24
+
25
+ # Append the routes for this module to the existing routes
26
+ ::Rails.application.routes.disable_clear_and_finalize = true
27
+ ::Rails.application.routes.clear!
28
+ ::Rails.application.routes_reloader.paths.each { |path| load(path) }
29
+ ::Rails.application.routes.draw do
30
+ resourced_routes = []
31
+
32
+ named_routes = engine.routes.named_routes.routes
33
+
34
+ engine.routes.routes.each do |route|
35
+ # Call the method by hand based on the symbol
36
+ path = "/#{engine_name.underscore}#{route.path.spec}"
37
+ verb = route.verb.to_s.downcase.gsub(/^.+\^(.+)\$.+$/, '\1').to_sym
38
+ requirements = route.requirements
39
+ if path_helper = named_routes.key(route)
40
+ requirements[:as] = path_helper
41
+ elsif route.requirements[:controller].present?
42
+ # Presume that all controllers referenced in routes should also be
43
+ # resources and append that routing on the end so that *_path helpers
44
+ # will still work
45
+ resourced_routes << route.requirements[:controller].gsub("#{engine_name.underscore}/", "").to_sym
46
+ end
47
+ send(verb, path, requirements) if respond_to?(verb)
48
+ end
49
+
50
+ # Add each route, once, to the end under a scope to trick path helpers.
51
+ # This will probably break as soon as there is route name overlap, but
52
+ # we'll cross that bridge when we get to it.
53
+ resourced_routes.uniq!
54
+ scope engine_name.underscore do
55
+ resourced_routes.each do |resource|
56
+ resources resource
57
+ end
58
+ end
59
+ end
60
+
61
+ # Finalize the routes
62
+ ::Rails.application.routes.finalize!
63
+ ::Rails.application.routes.disable_clear_and_finalize = false
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ Rails::Engine.send(:include, Magic::Rails::Engine)
@@ -1 +1 @@
1
- --colour
1
+ --colour
@@ -0,0 +1,4 @@
1
+ require 'magic/rails/engine'
2
+
3
+ # Replace RspecRouting by the namespace used by your engine
4
+ SharedEngine::Engine.load_engine_routes
@@ -50,4 +50,4 @@ end
50
50
 
51
51
  RSpec.configure do |c|
52
52
  c.include SimpleFixtures
53
- end
53
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_api
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.4'
4
+ version: 0.4.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-30 00:00:00.000000000 Z
12
+ date: 2012-07-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel
16
- requirement: &70333055874320 !ruby/object:Gem::Requirement
16
+ requirement: &70279657916060 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.0.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70333055874320
24
+ version_requirements: *70279657916060
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: activesupport
27
- requirement: &70333055873300 !ruby/object:Gem::Requirement
27
+ requirement: &70279657914840 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 3.0.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70333055873300
35
+ version_requirements: *70279657914840
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rack
38
- requirement: &70333055872420 !ruby/object:Gem::Requirement
38
+ requirement: &70279657914060 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.1.0
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70333055872420
46
+ version_requirements: *70279657914060
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rails
49
- requirement: &70333055871880 !ruby/object:Gem::Requirement
49
+ requirement: &70279657913480 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,18 +54,18 @@ dependencies:
54
54
  version: 3.2.3
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70333055871880
57
+ version_requirements: *70279657913480
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: mongoid
60
- requirement: &70333055871200 !ruby/object:Gem::Requirement
60
+ requirement: &70279657912660 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
64
64
  - !ruby/object:Gem::Version
65
- version: 2.0.1
65
+ version: 3.0.1
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70333055871200
68
+ version_requirements: *70279657912660
69
69
  description: acts_as_api enriches the models and controllers of your app in a rails-like
70
70
  way so you can easily determine how your XML/JSON API responses should look like.
71
71
  email:
@@ -247,6 +247,7 @@ files:
247
247
  - spec/shared_engine/dummy/public/500.html
248
248
  - spec/shared_engine/dummy/public/favicon.ico
249
249
  - spec/shared_engine/dummy/script/rails
250
+ - spec/shared_engine/lib/magic/rails/engine.rb
250
251
  - spec/shared_engine/lib/shared_engine.rb
251
252
  - spec/shared_engine/lib/shared_engine/engine.rb
252
253
  - spec/shared_engine/lib/shared_engine/version.rb
@@ -272,6 +273,7 @@ files:
272
273
  - spec/support/model_examples/sub_nodes.rb
273
274
  - spec/support/model_examples/undefined.rb
274
275
  - spec/support/model_examples/untouched.rb
276
+ - spec/support/routing.rb
275
277
  - spec/support/simple_fixtures.rb
276
278
  homepage: https://github.com/fabrik42/acts_as_api
277
279
  licenses: []
@@ -449,6 +451,7 @@ test_files:
449
451
  - spec/shared_engine/dummy/public/500.html
450
452
  - spec/shared_engine/dummy/public/favicon.ico
451
453
  - spec/shared_engine/dummy/script/rails
454
+ - spec/shared_engine/lib/magic/rails/engine.rb
452
455
  - spec/shared_engine/lib/shared_engine.rb
453
456
  - spec/shared_engine/lib/shared_engine/engine.rb
454
457
  - spec/shared_engine/lib/shared_engine/version.rb
@@ -474,4 +477,5 @@ test_files:
474
477
  - spec/support/model_examples/sub_nodes.rb
475
478
  - spec/support/model_examples/undefined.rb
476
479
  - spec/support/model_examples/untouched.rb
480
+ - spec/support/routing.rb
477
481
  - spec/support/simple_fixtures.rb