apimaster 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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
- % gem install apimaster
10
- % mkdir your_app_name & cd your_app_name
11
- % apimaster install your_app_name
12
- % bundle install
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
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'apimaster'
3
- s.version = '0.0.3'
3
+ s.version = '0.0.4'
4
4
  s.date = '2012-07-12'
5
5
  s.summary = "ApiMaster!"
6
6
  s.description = "A simple restful api framework."
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.rb'
15
- require_relative './apimaster/helpers/request.rb'
16
- require_relative './apimaster/helpers/session.rb'
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.rb'
19
- require_relative './apimaster/models/user_mock.rb'
20
+ require_relative './apimaster/models/user'
20
21
 
21
- require_relative './apimaster/controllers/errors.rb'
22
+ require_relative './apimaster/controllers/errors'
22
23
  require_relative './apimaster/application'
24
+
@@ -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, :invalid, resource, field)
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 %>.find params[:id]
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
@@ -10,7 +10,6 @@ module <%= module_name %>
10
10
  # controllers
11
11
  use BeforesController
12
12
  use IndexController
13
- use ExamplesController
14
13
  # use YourCountroller
15
14
 
16
15
  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
- def body
50
- last_response.body
51
- end
29
+ end
52
30
 
53
- def patch(uri, params = {}, env = {}, &block)
54
- env = env.merge(:method => "PATCH", :params => params)
55
- request(uri, env, &block)
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
- (test? ? Apimaster::Models::UserMock : Apimaster::Models::User).auth @access_token
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
@@ -20,7 +20,11 @@ module Apimaster
20
20
 
21
21
  def save_with_hash hash, method
22
22
  from_hash hash, method
23
- save
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,13 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Copyright (C) 2011-2012 AdMaster, Inc.
4
+
5
+ module Apimaster::Mocks
6
+ class User
7
+
8
+ def self.auth access_token
9
+ Apimaster::Models::User.new id: 1, email: "hello@admaster.com.cn", username: "hello"
10
+ end
11
+
12
+ end
13
+ end
@@ -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.3
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,11 +0,0 @@
1
- # encoding: utf-8
2
- #
3
- # Copyright (C) 2011-2012 AdMaster, Inc.
4
-
5
- class <%= module_name %>Test < TestCase
6
-
7
- def test_sample_method
8
- assert 1, 1
9
- end
10
-
11
- end
@@ -1,13 +0,0 @@
1
- # encoding: utf-8
2
- #
3
- # Copyright (C) 2011-2012 AdMaster, Inc.
4
-
5
- module Apimaster::Models
6
- class UserMock
7
-
8
- def self.auth access_token
9
- User.new id: 1, email: "hello@admaster.com.cn", username: "hello"
10
- end
11
-
12
- end
13
- end