moon 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +2 -0
- data/Rakefile +10 -3
- data/lib/moon.rb +0 -2
- data/lib/moon/action.rb +4 -3
- data/lib/moon/action/inject_timestamps.rb +44 -0
- data/lib/moon/action/model.rb +1 -2
- data/lib/moon/action/model/destroy.rb +4 -26
- data/lib/moon/action/model/index.rb +10 -17
- data/lib/moon/action/model/show.rb +9 -23
- data/lib/moon/action/model/store.rb +20 -0
- data/lib/moon/action/models/finder.rb +14 -14
- data/lib/moon/action/models/initializer.rb +6 -5
- data/lib/moon/action/models/updater.rb +1 -4
- data/lib/moon/action/rebuild_arrays.rb +1 -4
- data/lib/moon/action/{reference_object.rb → reference.rb} +1 -1
- data/lib/moon/action/respond_blank.rb +9 -0
- data/lib/moon/action/transfer.rb +30 -0
- data/lib/moon/action/valid_models_required.rb +13 -6
- data/lib/moon/application.rb +12 -7
- data/lib/moon/application/configuration.rb +55 -0
- data/lib/moon/application/rack.rb +17 -7
- data/lib/moon/context.rb +1 -1
- data/lib/moon/formatter.rb +4 -13
- data/lib/moon/formatter/generic.rb +17 -4
- data/lib/moon/response/json.rb +1 -0
- data/lib/moon/response/json/blank.rb +9 -0
- data/lib/moon/response/json/collection.rb +2 -2
- data/lib/moon/response/json/model.rb +3 -3
- data/lib/moon/validator.rb +17 -45
- data/lib/moon/validator/format.rb +4 -23
- data/lib/moon/validator/length.rb +8 -33
- data/lib/moon/validator/presence.rb +4 -17
- data/spec/lib/moon/action/inject_timestamps_spec.rb +46 -0
- data/spec/lib/moon/action/model/destroy_spec.rb +6 -44
- data/spec/lib/moon/action/model/index_spec.rb +8 -25
- data/spec/lib/moon/action/model/show_spec.rb +33 -25
- data/spec/lib/moon/action/model/store_spec.rb +77 -0
- data/spec/lib/moon/action/models/finder_spec.rb +25 -11
- data/spec/lib/moon/action/models/initializer_spec.rb +7 -5
- data/spec/lib/moon/action/models/updater_spec.rb +5 -3
- data/spec/lib/moon/action/rebuild_arrays_spec.rb +3 -3
- data/spec/lib/moon/action/{reference_object_spec.rb → reference_spec.rb} +1 -1
- data/spec/lib/moon/action/respond_blank_spec.rb +24 -0
- data/spec/lib/moon/action/transfer_spec.rb +30 -0
- data/spec/lib/moon/action/valid_models_required_spec.rb +19 -17
- data/spec/lib/moon/application/configuration_spec.rb +75 -0
- data/spec/lib/moon/application/rack_spec.rb +6 -5
- data/spec/lib/moon/formatter/generic_spec.rb +13 -3
- data/spec/lib/moon/formatter_spec.rb +4 -10
- data/spec/lib/moon/response/json/blank_spec.rb +19 -0
- data/spec/lib/moon/response/json/collection_spec.rb +5 -4
- data/spec/lib/moon/response/json/model_spec.rb +5 -4
- data/spec/lib/moon/validator/format_spec.rb +8 -25
- data/spec/lib/moon/validator/length_spec.rb +10 -36
- data/spec/lib/moon/validator/presence_spec.rb +11 -28
- data/spec/lib/moon/validator_spec.rb +10 -59
- metadata +34 -28
- data/lib/moon/action/base.rb +0 -16
- data/lib/moon/action/model/create.rb +0 -45
- data/lib/moon/action/model/update.rb +0 -42
- data/lib/moon/application/routes.rb +0 -16
- data/lib/moon/formatter/base.rb +0 -15
- data/spec/lib/moon/action/base_spec.rb +0 -29
- data/spec/lib/moon/action/model/create_spec.rb +0 -111
- data/spec/lib/moon/action/model/update_spec.rb +0 -91
- data/spec/lib/moon/application/routes_spec.rb +0 -26
- data/spec/lib/moon/formatter/base_spec.rb +0 -30
@@ -10,24 +10,26 @@ describe Moon::Action::Models::Updater do
|
|
10
10
|
|
11
11
|
@context = Moon::Context.new({ }, :decision => { :pick => 1 })
|
12
12
|
@context.models[:decision] = @model
|
13
|
+
|
14
|
+
@action = described_class.new
|
13
15
|
end
|
14
16
|
|
15
17
|
describe "self.perform" do
|
16
18
|
|
17
19
|
it "should change the model's attributes" do
|
18
20
|
lambda do
|
19
|
-
|
21
|
+
@action.perform @context
|
20
22
|
end.should change(@model, :pick).from(0).to(1)
|
21
23
|
end
|
22
24
|
|
23
25
|
it "should not change the model's attributes that are not specified" do
|
24
26
|
lambda do
|
25
|
-
|
27
|
+
@action.perform @context
|
26
28
|
end.should_not change(@model, :options)
|
27
29
|
end
|
28
30
|
|
29
31
|
it "should return nil" do
|
30
|
-
response =
|
32
|
+
response = @action.perform @context
|
31
33
|
response.should be_nil
|
32
34
|
end
|
33
35
|
|
@@ -5,13 +5,13 @@ describe Moon::Action::RebuildArrays do
|
|
5
5
|
before :each do
|
6
6
|
@context = Moon::Context.new({ }, :test => { "0" => "test one", "1" => "test two" })
|
7
7
|
|
8
|
-
@action = described_class.new
|
8
|
+
@action = described_class.new
|
9
9
|
end
|
10
10
|
|
11
11
|
describe "#perform" do
|
12
12
|
|
13
13
|
it "should build a hash for each option" do
|
14
|
-
@action.perform
|
14
|
+
@action.perform @context
|
15
15
|
parameters = @context.parameters
|
16
16
|
parameters.should == {
|
17
17
|
:test => [ "test one", "test two" ]
|
@@ -19,7 +19,7 @@ describe Moon::Action::RebuildArrays do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
it "should return nil" do
|
22
|
-
response = @action.perform
|
22
|
+
response = @action.perform @context
|
23
23
|
response.should be_nil
|
24
24
|
end
|
25
25
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "spec_helper"))
|
2
|
+
|
3
|
+
describe Moon::Action::RespondBlank do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@context = Moon::Context.new
|
7
|
+
@action = described_class.new
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#perform" do
|
11
|
+
|
12
|
+
before :each do
|
13
|
+
@response = mock Moon::Response::JSON::Blank
|
14
|
+
Moon::Response::JSON::Blank.stub :new => @response
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should initialize a #{Moon::Response::JSON::Blank}" do
|
18
|
+
Moon::Response::JSON::Blank.should_receive(:new).and_return(@response)
|
19
|
+
@action.perform @context
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "spec_helper"))
|
2
|
+
|
3
|
+
describe Moon::Action::Transfer do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@model_one = mock Object
|
7
|
+
@model_two = mock Object, :test => nil, :test= => nil
|
8
|
+
|
9
|
+
@context = Moon::Context.new
|
10
|
+
@context.session[:model_one] = @model_one
|
11
|
+
@context.models[:model_two] = @model_two
|
12
|
+
|
13
|
+
@action = described_class.new :from => [ :session, :model_one ], :to => [ :model_two, :test ]
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "perform" do
|
17
|
+
|
18
|
+
it "should transfer a value from the given store attribute to the given model attribute" do
|
19
|
+
@model_two.should_receive(:test=).with(@model_one)
|
20
|
+
@action.perform @context
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should return nil" do
|
24
|
+
response = @action.perform @context
|
25
|
+
response.should be_nil
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -6,54 +6,56 @@ describe Moon::Action::ValidModelsRequired do
|
|
6
6
|
@model_class = mock Class
|
7
7
|
@model = mock Object, :class => @model_class
|
8
8
|
|
9
|
+
@checks = { }
|
10
|
+
@validators = { @model_class => @checks }
|
11
|
+
@configuration = mock Moon::Application::Configuration, :validators => @validators
|
12
|
+
@application = mock Moon::Application, :configuration => @configuration
|
13
|
+
|
9
14
|
@context = Moon::Context.new
|
15
|
+
@context.application = @application
|
10
16
|
@context.models[:model] = @model
|
11
17
|
|
12
|
-
@validator = mock Moon::Validator, :
|
13
|
-
|
14
|
-
Moon::Validator.stub(:[]).and_return(@validator_class)
|
18
|
+
@validator = mock Moon::Validator, :messages => { }
|
19
|
+
Moon::Validator.stub :new => @validator
|
15
20
|
|
16
21
|
@response = mock Moon::Response::JSON::ValidationErrors
|
17
22
|
Moon::Response::JSON::ValidationErrors.stub :new => @response
|
23
|
+
|
24
|
+
@action = described_class.new
|
18
25
|
end
|
19
26
|
|
20
27
|
describe "perform" do
|
21
28
|
|
22
|
-
it "should
|
23
|
-
Moon::Validator.should_receive(:
|
24
|
-
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should initialize the validator with the right model" do
|
28
|
-
@validator_class.should_receive(:new).with(@model).and_return(@validator)
|
29
|
-
described_class.perform @context
|
29
|
+
it "should initialize the validator with the right checks" do
|
30
|
+
Moon::Validator.should_receive(:new).with(@context, @checks).and_return(@validator)
|
31
|
+
@action.perform @context
|
30
32
|
end
|
31
33
|
|
32
34
|
it "should run the validator" do
|
33
|
-
@validator.should_receive(:
|
34
|
-
|
35
|
+
@validator.should_receive(:messages).with(@model).and_return({ })
|
36
|
+
@action.perform @context
|
35
37
|
end
|
36
38
|
|
37
39
|
it "should return nil" do
|
38
|
-
response =
|
40
|
+
response = @action.perform @context
|
39
41
|
response.should be_nil
|
40
42
|
end
|
41
43
|
|
42
44
|
context "on failing validation" do
|
43
45
|
|
44
46
|
before :each do
|
45
|
-
@validator.stub :
|
47
|
+
@validator.stub :messages => { :email => [ "Has a wrong format." ] }
|
46
48
|
end
|
47
49
|
|
48
50
|
it "should initialize #{Moon::Response::JSON::ValidationErrors}" do
|
49
51
|
Moon::Response::JSON::ValidationErrors.should_receive(:new).with(
|
50
52
|
:model => { :email => [ "Has a wrong format." ] }
|
51
53
|
).and_return(@response)
|
52
|
-
|
54
|
+
@action.perform @context
|
53
55
|
end
|
54
56
|
|
55
57
|
it "should return the validation errors response" do
|
56
|
-
response =
|
58
|
+
response = @action.perform @context
|
57
59
|
response.should == @response
|
58
60
|
end
|
59
61
|
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "spec_helper"))
|
2
|
+
|
3
|
+
describe Moon::Application::Configuration do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@action = action = Object.new
|
7
|
+
@attribute_validator = attribute_validator = Object.new
|
8
|
+
@formatter = formatter = Object.new
|
9
|
+
@configuration = described_class.new {
|
10
|
+
session {
|
11
|
+
secret "secret"
|
12
|
+
}
|
13
|
+
route {
|
14
|
+
http_method :get
|
15
|
+
path "/test"
|
16
|
+
actions action
|
17
|
+
}
|
18
|
+
validator {
|
19
|
+
model_class Object
|
20
|
+
attributes {
|
21
|
+
name attribute_validator
|
22
|
+
}
|
23
|
+
}
|
24
|
+
formatter {
|
25
|
+
model_class Object
|
26
|
+
object formatter
|
27
|
+
}
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "#session" do
|
32
|
+
|
33
|
+
it "should return the session configuration" do
|
34
|
+
session = @configuration.session
|
35
|
+
session.should == {
|
36
|
+
:secret => "secret"
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#routes" do
|
43
|
+
|
44
|
+
it "should return an array of the defined routes" do
|
45
|
+
routes = @configuration.routes
|
46
|
+
routes.should == [
|
47
|
+
{ :http_method => :get, :path => "/test", :actions => @action }
|
48
|
+
]
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
describe "#validators" do
|
54
|
+
|
55
|
+
it "should return a hash with the defined validators" do
|
56
|
+
validators = @configuration.validators
|
57
|
+
validators.should == {
|
58
|
+
Object => { :name => @attribute_validator }
|
59
|
+
}
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "#formatters" do
|
65
|
+
|
66
|
+
it "should return a hash with the defined formatters" do
|
67
|
+
formatters = @configuration.formatters
|
68
|
+
formatters.should == {
|
69
|
+
Object => @formatter
|
70
|
+
}
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
@@ -3,9 +3,9 @@ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "sp
|
|
3
3
|
describe Moon::Application::Rack do
|
4
4
|
|
5
5
|
before :each do
|
6
|
-
Moon::Application
|
6
|
+
@application = mock Moon::Application
|
7
7
|
|
8
|
-
@context = mock Moon::Context, :
|
8
|
+
@context = mock Moon::Context, :application= => nil
|
9
9
|
Moon::Context.stub :new => @context
|
10
10
|
|
11
11
|
@response = mock Moon::Response::Base, :status => 200, :headers => { }, :body => "OK"
|
@@ -13,7 +13,8 @@ describe Moon::Application::Rack do
|
|
13
13
|
@action_one = mock Object, :perform => nil
|
14
14
|
@action_two = mock Class, :perform => @response
|
15
15
|
|
16
|
-
@rack = described_class.new
|
16
|
+
@rack = described_class.new @application
|
17
|
+
@rack.session = { :secret => "secret" }
|
17
18
|
@rack.routes = [
|
18
19
|
{
|
19
20
|
:http_method => :get,
|
@@ -33,8 +34,8 @@ describe Moon::Application::Rack do
|
|
33
34
|
@browser.get "/test/5"
|
34
35
|
end
|
35
36
|
|
36
|
-
it "should set the
|
37
|
-
@context.should_receive(:
|
37
|
+
it "should set the application in the context" do
|
38
|
+
@context.should_receive(:application=).with(@application)
|
38
39
|
@browser.get "/test/5"
|
39
40
|
end
|
40
41
|
|
@@ -3,27 +3,37 @@ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "sp
|
|
3
3
|
describe Moon::Formatter::Generic do
|
4
4
|
|
5
5
|
before :each do
|
6
|
+
@model_proxy = mock Object, :id => "user_id", :is_a? => true
|
7
|
+
|
6
8
|
@model = Object.new
|
9
|
+
@model.instance_variable_set :@user, @model_proxy
|
7
10
|
@model.instance_variable_set :@options, [ ]
|
8
11
|
@model.instance_variable_set :@pick, 0
|
9
12
|
|
10
13
|
@id = mock GOM::Object::Id
|
11
14
|
GOM::Object.stub :id => @id
|
12
15
|
|
13
|
-
@formatter = described_class.new
|
16
|
+
@formatter = described_class.new
|
14
17
|
end
|
15
18
|
|
16
19
|
describe "hash" do
|
17
20
|
|
18
21
|
it "should fetch the object's id" do
|
19
22
|
GOM::Object.should_receive(:id).with(@model).and_return(@id)
|
20
|
-
@formatter.hash
|
23
|
+
@formatter.hash @model
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should not inject the id if nil" do
|
27
|
+
GOM::Object.stub :id => nil
|
28
|
+
hash = @formatter.hash @model
|
29
|
+
hash.keys.should_not include(:id)
|
21
30
|
end
|
22
31
|
|
23
32
|
it "should return a hash with all instance variables" do
|
24
|
-
hash = @formatter.hash
|
33
|
+
hash = @formatter.hash @model
|
25
34
|
hash.should == {
|
26
35
|
:id => @id,
|
36
|
+
:user_id => "user_id",
|
27
37
|
:options => [ ],
|
28
38
|
:pick => 0
|
29
39
|
}
|
@@ -5,29 +5,23 @@ describe Moon::Formatter do
|
|
5
5
|
describe "self.hash_for" do
|
6
6
|
|
7
7
|
before :each do
|
8
|
-
@formatter = mock
|
9
|
-
@formatter_class = mock Class, :new => @formatter
|
8
|
+
@formatter = mock Object, :hash => :hash
|
10
9
|
|
11
10
|
@generic_formatter = mock described_class::Generic, :hash => :generic_hash
|
12
11
|
described_class::Generic.stub :new => @generic_formatter
|
13
12
|
|
14
13
|
@model = mock Object
|
15
14
|
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should initialize the right formatter" do
|
20
|
-
@formatter_class.should_receive(:new).with(@model)
|
21
|
-
described_class.hash_for @model
|
15
|
+
@formatters = { @model.class => @formatter }
|
22
16
|
end
|
23
17
|
|
24
18
|
it "should initialize the generic formatter if no formatter is configured for the model class" do
|
25
19
|
described_class::Generic.should_receive(:new).and_return(@generic_formatter)
|
26
|
-
described_class.hash_for Object.new
|
20
|
+
described_class.hash_for @formatters, Object.new
|
27
21
|
end
|
28
22
|
|
29
23
|
it "should return the formatters hash" do
|
30
|
-
hash = described_class.hash_for @model
|
24
|
+
hash = described_class.hash_for @formatters, @model
|
31
25
|
hash.should == :hash
|
32
26
|
end
|
33
27
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "..", "spec_helper"))
|
2
|
+
|
3
|
+
describe Moon::Response::JSON::Blank do
|
4
|
+
|
5
|
+
describe "initialize" do
|
6
|
+
|
7
|
+
it "should set the status to 200" do
|
8
|
+
@response = described_class.new
|
9
|
+
@response.status.should == 200
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should set the hash to { }" do
|
13
|
+
@response = described_class.new
|
14
|
+
@response.hash.should == { }
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -4,6 +4,7 @@ describe Moon::Response::JSON::Collection do
|
|
4
4
|
|
5
5
|
before :each do
|
6
6
|
@object = mock Object
|
7
|
+
@collection = [ @object ]
|
7
8
|
|
8
9
|
Moon::Formatter.stub :hash_for => { :test => "test value" }
|
9
10
|
end
|
@@ -11,17 +12,17 @@ describe Moon::Response::JSON::Collection do
|
|
11
12
|
describe "initialize" do
|
12
13
|
|
13
14
|
it "should set the status to 200" do
|
14
|
-
@response = described_class.new
|
15
|
+
@response = described_class.new @collection, :formatters
|
15
16
|
@response.status.should == 200
|
16
17
|
end
|
17
18
|
|
18
19
|
it "should use the model formatter" do
|
19
|
-
Moon::Formatter.should_receive(:hash_for).with(@object).and_return({ :test => "test value" })
|
20
|
-
described_class.new
|
20
|
+
Moon::Formatter.should_receive(:hash_for).with(:formatters, @object).and_return({ :test => "test value" })
|
21
|
+
described_class.new @collection, :formatters
|
21
22
|
end
|
22
23
|
|
23
24
|
it "should return the formatters output" do
|
24
|
-
@response = described_class.new
|
25
|
+
@response = described_class.new @collection, :formatters
|
25
26
|
@response.body.should == "[{\"test\":\"test value\"}]"
|
26
27
|
end
|
27
28
|
|
@@ -5,6 +5,7 @@ describe Moon::Response::JSON::Model do
|
|
5
5
|
before :each do
|
6
6
|
@key = :key
|
7
7
|
@object = mock Object
|
8
|
+
@formatters = { }
|
8
9
|
|
9
10
|
Moon::Formatter.stub :hash_for => { :test => "test value" }
|
10
11
|
end
|
@@ -12,17 +13,17 @@ describe Moon::Response::JSON::Model do
|
|
12
13
|
describe "initialize" do
|
13
14
|
|
14
15
|
it "should set the status to 200" do
|
15
|
-
@response = described_class.new @key, @object
|
16
|
+
@response = described_class.new @key, @object, @formatters
|
16
17
|
@response.status.should == 200
|
17
18
|
end
|
18
19
|
|
19
20
|
it "should use the model formatter" do
|
20
|
-
Moon::Formatter.should_receive(:hash_for).with(@object).and_return({ :test => "test value" })
|
21
|
-
described_class.new @key, @object
|
21
|
+
Moon::Formatter.should_receive(:hash_for).with(@formatters, @object).and_return({ :test => "test value" })
|
22
|
+
described_class.new @key, @object, @formatters
|
22
23
|
end
|
23
24
|
|
24
25
|
it "should return the formatters output" do
|
25
|
-
@response = described_class.new @key, @object
|
26
|
+
@response = described_class.new @key, @object, @formatters
|
26
27
|
@response.body.should == "{\"key\":{\"test\":\"test value\"}}"
|
27
28
|
end
|
28
29
|
|