apimaster 0.0.3 → 0.0.4
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/README.md +25 -4
- data/apimaster.gemspec +1 -1
- data/lib/apimaster.rb +8 -6
- data/lib/apimaster/error.rb +1 -1
- data/lib/apimaster/generators/app_generator.rb +1 -2
- data/lib/apimaster/generators/templates/app/controllers/examples_controller.rb.erb +22 -1
- data/lib/apimaster/generators/templates/app/models/example.rb.erb +12 -2
- data/lib/apimaster/generators/templates/config/application.rb.erb +0 -1
- data/lib/apimaster/generators/templates/config/settings/mongoid.yml.erb +0 -2
- data/lib/apimaster/generators/templates/test/functional/examples_controller_test.rb.erb +20 -0
- data/lib/apimaster/generators/templates/test/test_helper.rb.erb +11 -32
- data/lib/apimaster/generators/templates/test/unit/example_test.rb.erb +10 -0
- data/lib/apimaster/helpers/session.rb +5 -1
- data/lib/apimaster/mapper.rb +9 -1
- data/lib/apimaster/mocks/user.rb +13 -0
- data/lib/apimaster/test/factory.rb +31 -0
- data/lib/apimaster/test/methods.rb +26 -0
- metadata +4 -4
- data/lib/apimaster/generators/templates/test/functional_test.rb.erb +0 -1
- data/lib/apimaster/generators/templates/test/unit_test.rb.erb +0 -11
- data/lib/apimaster/models/user_mock.rb +0 -13
data/README.md
CHANGED
@@ -6,7 +6,28 @@ A simple restful api framework the provides a gem that...
|
|
6
6
|
Developing
|
7
7
|
----------
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
gem install apimaster
|
10
|
+
mkdir your_app_name & cd your_app_name
|
11
|
+
apimaster new your_app_name
|
12
|
+
bundle install
|
13
|
+
|
14
|
+
Generators
|
15
|
+
----------
|
16
|
+
|
17
|
+
apimaster model example
|
18
|
+
apimaster controller example
|
19
|
+
|
20
|
+
Testing
|
21
|
+
-------
|
22
|
+
|
23
|
+
rake test:unit
|
24
|
+
rake test:functional
|
25
|
+
|
26
|
+
rake test:unit:file name=example
|
27
|
+
rake test:functional:file name=examples_controller
|
28
|
+
|
29
|
+
Watchr
|
30
|
+
------
|
31
|
+
|
32
|
+
watchr test.watchr
|
33
|
+
|
data/apimaster.gemspec
CHANGED
data/lib/apimaster.rb
CHANGED
@@ -6,17 +6,19 @@ module Apimaster end
|
|
6
6
|
module Apimaster::Helpers end
|
7
7
|
module Apimaster::Controllers end
|
8
8
|
module Apimaster::Models end
|
9
|
+
module Apimaster::Mocks end
|
10
|
+
module Apimaster::Test end
|
9
11
|
|
10
12
|
require_relative './apimaster/setting'
|
11
13
|
require_relative './apimaster/error'
|
12
14
|
require_relative './apimaster/mapper'
|
13
15
|
|
14
|
-
require_relative './apimaster/helpers/headers
|
15
|
-
require_relative './apimaster/helpers/request
|
16
|
-
require_relative './apimaster/helpers/session
|
16
|
+
require_relative './apimaster/helpers/headers'
|
17
|
+
require_relative './apimaster/helpers/request'
|
18
|
+
require_relative './apimaster/helpers/session'
|
17
19
|
|
18
|
-
require_relative './apimaster/models/user
|
19
|
-
require_relative './apimaster/models/user_mock.rb'
|
20
|
+
require_relative './apimaster/models/user'
|
20
21
|
|
21
|
-
require_relative './apimaster/controllers/errors
|
22
|
+
require_relative './apimaster/controllers/errors'
|
22
23
|
require_relative './apimaster/application'
|
24
|
+
|
data/lib/apimaster/error.rb
CHANGED
@@ -36,7 +36,7 @@ module Apimaster
|
|
36
36
|
|
37
37
|
class InvalidFieldError < NormalError
|
38
38
|
def initialize(resource = nil, field = nil)
|
39
|
-
super("The formatting of the field '#{field}' on a resource '#{resource}' is invalid.", 422, :
|
39
|
+
super("The formatting of the field '#{field}' on a resource '#{resource}' is invalid.", 422, :invalid_field, resource, field)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
@@ -40,8 +40,6 @@ module Apimaster::Generators
|
|
40
40
|
|
41
41
|
# Test stubs
|
42
42
|
m.template "test/test_helper.rb.erb", "test/test_helper.rb"
|
43
|
-
m.template "test/functional_test.rb.erb", "test/functional/index_controller_test.rb"
|
44
|
-
m.template "test/unit_test.rb.erb", "test/unit/#{app_name}_test.rb"
|
45
43
|
|
46
44
|
%w(LICENSE Rakefile README.md Gemfile TODO test.watchr).each do |file|
|
47
45
|
m.template file, file
|
@@ -96,6 +94,7 @@ module Apimaster::Generators
|
|
96
94
|
test/unit
|
97
95
|
test/functional
|
98
96
|
test/factory
|
97
|
+
test/mock
|
99
98
|
tmp
|
100
99
|
public
|
101
100
|
)
|
@@ -2,7 +2,7 @@ module <%= module_name %>
|
|
2
2
|
class <%= pluralize camelize(name) %>Controller < Sinatra::Base
|
3
3
|
|
4
4
|
get '/<%= pluralize name %>/:id' do
|
5
|
-
<%= name %> = <%= camelize name %>.
|
5
|
+
<%= name %> = <%= camelize name %>.get params[:id]
|
6
6
|
json <%= name %>.to_hash(:get)
|
7
7
|
end
|
8
8
|
|
@@ -11,5 +11,26 @@ module <%= module_name %>
|
|
11
11
|
json <%= pluralize name %>.to_hashes(:list)
|
12
12
|
end
|
13
13
|
|
14
|
+
post '/<%= pluralize name %>' do
|
15
|
+
<%= pluralize name %> = <%= camelize name %>.post(posts)
|
16
|
+
|
17
|
+
status 201
|
18
|
+
json <%= pluralize name %>.to_hash(:get)
|
19
|
+
end
|
20
|
+
|
21
|
+
patch '/<%= pluralize name %>/:id' do
|
22
|
+
<%= name %> = <%= camelize name %>.get params[:id]
|
23
|
+
|
24
|
+
<%= name %>.patch(posts)
|
25
|
+
json <%= name %>.to_hash(:get)
|
26
|
+
end
|
27
|
+
|
28
|
+
delete '/<%= pluralize name %>/:id' do
|
29
|
+
<%= name %> = <%= camelize name %>.get params[:id]
|
30
|
+
<%= name %>.delete
|
31
|
+
status 204
|
32
|
+
nil
|
33
|
+
end
|
34
|
+
|
14
35
|
end
|
15
36
|
end
|
@@ -9,7 +9,17 @@ module <%= module_name %>
|
|
9
9
|
field :title, type: String
|
10
10
|
field :content, type: String
|
11
11
|
|
12
|
-
attr_options :title, accessor: [:list], required: [:post]
|
13
|
-
attr_options :content, accessor: [:get], required: [:post]
|
12
|
+
attr_options :title, accessor: [:get, :list], required: [:post], optional: [:patch]
|
13
|
+
attr_options :content, accessor: [:get], required: [:post], optional: [:patch]
|
14
|
+
|
15
|
+
validates :title, length: { minimum: 2, maximum: 30 }
|
16
|
+
|
17
|
+
class << self
|
18
|
+
|
19
|
+
def get id
|
20
|
+
find id or raise MissingError.new(<%= name %>, :id)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
14
24
|
end
|
15
25
|
end
|
@@ -3,7 +3,6 @@ production:
|
|
3
3
|
default:
|
4
4
|
database: <%= app_name %>
|
5
5
|
username: user
|
6
|
-
username: user
|
7
6
|
password: password
|
8
7
|
hosts:
|
9
8
|
- localhost:27017
|
@@ -12,7 +11,6 @@ development:
|
|
12
11
|
default:
|
13
12
|
database: <%= app_name %>_develop
|
14
13
|
username: user
|
15
|
-
username: user
|
16
14
|
password: password
|
17
15
|
hosts:
|
18
16
|
- localhost:27017
|
@@ -17,4 +17,24 @@ class <%= pluralize camelize(name) %>ControllerTest < FunctionalTestCase
|
|
17
17
|
assert_equal 200, last_response.status
|
18
18
|
end
|
19
19
|
|
20
|
+
def test_post_<%= pluralize name %>
|
21
|
+
post "/<%= pluralize name %>", to_json(<%= camelize name %>Factory.attrs)
|
22
|
+
assert_equal 201, last_response.status
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_patch_<%= name %>_by_id
|
26
|
+
<%= name %> = <%= camelize name %>Factory.post
|
27
|
+
|
28
|
+
hash = {content: 'my content'}
|
29
|
+
patch "/<%= pluralize name %>/#{<%= name %>._id}", to_json(hash)
|
30
|
+
assert_equal 200, last_response.status
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_delete_<%= name %>_by_id
|
34
|
+
<%= name %> = <%= camelize name %>Factory.post
|
35
|
+
|
36
|
+
delete "/<%= pluralize name %>/#{<%= name %>._id}"
|
37
|
+
assert_equal 204, last_response.status
|
38
|
+
end
|
39
|
+
|
20
40
|
end
|
@@ -7,54 +7,33 @@ ENV['RACK_ENV'] ||= "test"
|
|
7
7
|
require "minitest/autorun"
|
8
8
|
require "rack/test"
|
9
9
|
require "./config/boot"
|
10
|
+
require "apimaster/test/factory"
|
11
|
+
require "apimaster/test/methods"
|
12
|
+
require "apimaster/mocks/user"
|
10
13
|
|
11
|
-
class BaseFactory
|
12
|
-
|
13
|
-
def self.define name, value = nil
|
14
|
-
self.attrs[name] = value
|
15
|
-
end
|
16
|
-
|
17
|
-
def self.attrs
|
18
|
-
@attrs ||= {}
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.attr key
|
22
|
-
@attrs ||= {}
|
23
|
-
@attrs[key]
|
24
|
-
end
|
25
|
-
|
26
|
-
def self.register name
|
27
|
-
@klass = name
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.post data = {}
|
31
|
-
raise "Please register class first.`" unless @klass
|
32
|
-
@klass.post attrs.merge(data)
|
33
|
-
end
|
34
|
-
|
14
|
+
class BaseFactory < Apimaster::Test::Factory
|
35
15
|
end
|
36
16
|
|
37
17
|
class TestCase < MiniTest::Unit::TestCase
|
38
|
-
|
39
18
|
end
|
40
19
|
|
41
20
|
class FunctionalTestCase < TestCase
|
42
21
|
|
43
22
|
include Rack::Test::Methods
|
23
|
+
include Apimaster::Test::Methods
|
44
24
|
|
45
25
|
def app
|
46
26
|
@app ||= Sinatra.new(<%= module_name %>::Application) {}
|
47
27
|
end
|
48
28
|
|
49
|
-
|
50
|
-
last_response.body
|
51
|
-
end
|
29
|
+
end
|
52
30
|
|
53
|
-
|
54
|
-
|
55
|
-
|
31
|
+
module Apimaster::Helpers
|
32
|
+
module Session
|
33
|
+
def user_model
|
34
|
+
@user_model ||= Apimaster::Mocks::User
|
35
|
+
end
|
56
36
|
end
|
57
|
-
|
58
37
|
end
|
59
38
|
|
60
39
|
Dir.glob "./test/factory/**/*_factory.rb" do |f| require f end
|
@@ -5,7 +5,17 @@ class <%= camelize name %>Test < TestCase
|
|
5
5
|
|
6
6
|
def test_title
|
7
7
|
<%= name %> = <%= module_name %>::<%= camelize name %>.new
|
8
|
+
|
8
9
|
<%= name %>.title = 'hello'
|
9
10
|
assert_equal 'hello', <%= name %>.title
|
11
|
+
assert_equal true, <%= name %>.valid?
|
12
|
+
|
13
|
+
# title length
|
14
|
+
<%= name %>.title = 'x'
|
15
|
+
assert_equal false, <%= name %>.valid?
|
16
|
+
|
17
|
+
<%= name %>.title = 'x' * 50
|
18
|
+
assert_equal false, <%= name %>.valid?
|
19
|
+
|
10
20
|
end
|
11
21
|
end
|
@@ -23,7 +23,11 @@ module Apimaster::Helpers
|
|
23
23
|
|
24
24
|
def auth_user
|
25
25
|
@access_token ||= params[:access_token] or header_token
|
26
|
-
|
26
|
+
user_model.auth @access_token
|
27
|
+
end
|
28
|
+
|
29
|
+
def user_model
|
30
|
+
@user_model ||= Apimaster::Models::User
|
27
31
|
end
|
28
32
|
|
29
33
|
def header_token
|
data/lib/apimaster/mapper.rb
CHANGED
@@ -20,7 +20,11 @@ module Apimaster
|
|
20
20
|
|
21
21
|
def save_with_hash hash, method
|
22
22
|
from_hash hash, method
|
23
|
-
|
23
|
+
if valid?
|
24
|
+
save
|
25
|
+
else
|
26
|
+
raise InvalidFieldError.new(class_name, errors.keys.first)
|
27
|
+
end
|
24
28
|
self
|
25
29
|
end
|
26
30
|
|
@@ -65,6 +69,10 @@ module Apimaster
|
|
65
69
|
record
|
66
70
|
end
|
67
71
|
|
72
|
+
def class_name
|
73
|
+
@class_name ||= self.class.to_s.split("::").last
|
74
|
+
end
|
75
|
+
|
68
76
|
class << self
|
69
77
|
|
70
78
|
OPTION_TYPES = [:accessor, :required, :optional]
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# Copyright (C) 2011-2012 AdMaster, Inc.
|
4
|
+
|
5
|
+
module Apimaster::Test
|
6
|
+
|
7
|
+
class Factory
|
8
|
+
def self.define name, value = nil
|
9
|
+
self.attrs[name] = value
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.attrs
|
13
|
+
@attrs ||= {}
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.attr key
|
17
|
+
@attrs ||= {}
|
18
|
+
@attrs[key]
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.register name
|
22
|
+
@klass = name
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.post data = {}
|
26
|
+
raise "Please register class first." unless @klass
|
27
|
+
@klass.post attrs.merge(data)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# Copyright (C) 2011-2012 AdMaster, Inc.
|
4
|
+
|
5
|
+
module Apimaster::Test
|
6
|
+
module Methods
|
7
|
+
|
8
|
+
def body
|
9
|
+
last_response.body
|
10
|
+
end
|
11
|
+
|
12
|
+
def patch(uri, params = {}, env = {}, &block)
|
13
|
+
env = env.merge(:method => "PATCH", :params => params)
|
14
|
+
request(uri, env, &block)
|
15
|
+
end
|
16
|
+
|
17
|
+
def from_json
|
18
|
+
@response_json ||= JSON.parse(last_response.body)
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_json(hash)
|
22
|
+
JSON.generate(hash)
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apimaster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -55,10 +55,8 @@ files:
|
|
55
55
|
- lib/apimaster/generators/templates/README.md
|
56
56
|
- lib/apimaster/generators/templates/test/factory/example_factory.rb.erb
|
57
57
|
- lib/apimaster/generators/templates/test/functional/examples_controller_test.rb.erb
|
58
|
-
- lib/apimaster/generators/templates/test/functional_test.rb.erb
|
59
58
|
- lib/apimaster/generators/templates/test/test_helper.rb.erb
|
60
59
|
- lib/apimaster/generators/templates/test/unit/example_test.rb.erb
|
61
|
-
- lib/apimaster/generators/templates/test/unit_test.rb.erb
|
62
60
|
- lib/apimaster/generators/templates/test.watchr
|
63
61
|
- lib/apimaster/generators/templates/TODO
|
64
62
|
- lib/apimaster/generators/version.rb
|
@@ -66,9 +64,11 @@ files:
|
|
66
64
|
- lib/apimaster/helpers/request.rb
|
67
65
|
- lib/apimaster/helpers/session.rb
|
68
66
|
- lib/apimaster/mapper.rb
|
67
|
+
- lib/apimaster/mocks/user.rb
|
69
68
|
- lib/apimaster/models/user.rb
|
70
|
-
- lib/apimaster/models/user_mock.rb
|
71
69
|
- lib/apimaster/setting.rb
|
70
|
+
- lib/apimaster/test/factory.rb
|
71
|
+
- lib/apimaster/test/methods.rb
|
72
72
|
- lib/apimaster.rb
|
73
73
|
- LICENSE
|
74
74
|
- README.md
|
@@ -1 +0,0 @@
|
|
1
|
-
|