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 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