moon 0.0.1 → 0.0.2
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.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
|
|