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
@@ -2,28 +2,15 @@
|
|
2
2
|
# Value presence validator.
|
3
3
|
class Moon::Validator::Presence
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
def initialize(value)
|
5
|
+
def messages(value, context)
|
8
6
|
@value = value
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
def ok?
|
13
|
-
check
|
14
|
-
@ok
|
15
|
-
end
|
16
|
-
|
17
|
-
def message
|
18
|
-
check
|
19
|
-
@message
|
7
|
+
blank? ? [ "Must be present." ] : [ ]
|
20
8
|
end
|
21
9
|
|
22
10
|
private
|
23
11
|
|
24
|
-
def
|
25
|
-
|
26
|
-
@message = "Must be present." unless @ok
|
12
|
+
def blank?
|
13
|
+
!@value || @value == ""
|
27
14
|
end
|
28
15
|
|
29
16
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "spec_helper"))
|
2
|
+
|
3
|
+
describe Moon::Action::InjectTimestamps do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@model = mock Object, :created_at= => nil, :updated_at= => nil
|
7
|
+
|
8
|
+
@context = Moon::Context.new
|
9
|
+
@context.models[:test] = @model
|
10
|
+
|
11
|
+
@action = described_class.new :test
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#perform" do
|
15
|
+
|
16
|
+
before :each do
|
17
|
+
@now = Time.now
|
18
|
+
Time.stub :now => @now
|
19
|
+
|
20
|
+
GOM::Object.stub :id => nil
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should inject the creation date time" do
|
24
|
+
@model.should_receive(:created_at=).with(@now)
|
25
|
+
@action.perform @context
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should inject the update date time" do
|
29
|
+
@model.should_receive(:updated_at=).with(@now)
|
30
|
+
@action.perform @context
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should not inject the creation date time if the model has an id" do
|
34
|
+
GOM::Object.stub :id => "id"
|
35
|
+
@model.should_not_receive(:created_at=).with(@now)
|
36
|
+
@action.perform @context
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should return nil" do
|
40
|
+
response = @action.perform @context
|
41
|
+
response.should be_nil
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -8,8 +8,7 @@ describe Moon::Action::Model::Destroy do
|
|
8
8
|
@context = Moon::Context.new
|
9
9
|
@context.models[:model] = @model
|
10
10
|
|
11
|
-
described_class.
|
12
|
-
@action = described_class.new @context
|
11
|
+
@action = described_class.new :model
|
13
12
|
end
|
14
13
|
|
15
14
|
describe "perform" do
|
@@ -18,13 +17,13 @@ describe Moon::Action::Model::Destroy do
|
|
18
17
|
GOM::Storage.stub :remove => nil
|
19
18
|
end
|
20
19
|
|
21
|
-
it "should
|
20
|
+
it "should remove the model" do
|
22
21
|
GOM::Storage.should_receive(:remove).with(@model)
|
23
|
-
@action.perform
|
22
|
+
@action.perform @context
|
24
23
|
end
|
25
24
|
|
26
25
|
it "should return 'ok' message response" do
|
27
|
-
response = @action.perform
|
26
|
+
response = @action.perform @context
|
28
27
|
response.should be_instance_of(Moon::Response::JSON::Message)
|
29
28
|
response.status.should == 200
|
30
29
|
end
|
@@ -32,53 +31,16 @@ describe Moon::Action::Model::Destroy do
|
|
32
31
|
it "should do nothing if the model isn't initialized" do
|
33
32
|
@context.models[:model] = nil
|
34
33
|
GOM::Storage.should_not_receive(:remove)
|
35
|
-
@action.perform
|
34
|
+
@action.perform @context
|
36
35
|
end
|
37
36
|
|
38
37
|
it "should return 'failed' message response if model isn't initialized" do
|
39
38
|
@context.models[:model] = nil
|
40
|
-
response = @action.perform
|
39
|
+
response = @action.perform @context
|
41
40
|
response.should be_instance_of(Moon::Response::JSON::Message)
|
42
41
|
response.status.should == 401
|
43
42
|
end
|
44
43
|
|
45
44
|
end
|
46
45
|
|
47
|
-
describe "model" do
|
48
|
-
|
49
|
-
it "should return the model" do
|
50
|
-
model = @action.model
|
51
|
-
model.should == @model
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
describe "self.model_symbol" do
|
57
|
-
|
58
|
-
it "should return the model symbol" do
|
59
|
-
model_symbol = described_class.model_symbol
|
60
|
-
model_symbol.should == :model
|
61
|
-
end
|
62
|
-
|
63
|
-
end
|
64
|
-
|
65
|
-
describe "self.[]" do
|
66
|
-
|
67
|
-
it "should return a class" do
|
68
|
-
result = described_class[:model]
|
69
|
-
result.should be_instance_of(Class)
|
70
|
-
end
|
71
|
-
|
72
|
-
it "should return a different class" do
|
73
|
-
result = described_class[:model]
|
74
|
-
result.should_not == described_class
|
75
|
-
end
|
76
|
-
|
77
|
-
it "should return a class connected to the given model symbol" do
|
78
|
-
result = described_class[:model]
|
79
|
-
result.model_symbol.should == :model
|
80
|
-
end
|
81
|
-
|
82
|
-
end
|
83
|
-
|
84
46
|
end
|
@@ -5,47 +5,30 @@ describe Moon::Action::Model::Index do
|
|
5
5
|
before :each do
|
6
6
|
@collection = mock GOM::Object::Collection
|
7
7
|
|
8
|
+
@configuration = mock Moon::Application::Configuration, :formatters => :formatters
|
9
|
+
@application = mock Moon::Application, :configuration => @configuration
|
8
10
|
@context = Moon::Context.new
|
9
|
-
@context.
|
11
|
+
@context.application = @application
|
12
|
+
@context.collections[:test] = @collection
|
10
13
|
|
11
14
|
@response = mock Moon::Response::JSON::Collection
|
12
15
|
Moon::Response::JSON::Collection.stub :new => @response
|
13
16
|
|
14
|
-
described_class.
|
15
|
-
@action = described_class.new @context
|
17
|
+
@action = described_class.new :test
|
16
18
|
end
|
17
19
|
|
18
20
|
describe "perform" do
|
19
21
|
|
20
22
|
it "should initialize a collection response" do
|
21
|
-
Moon::Response::JSON::Collection.should_receive(:new).and_return(@response)
|
22
|
-
@action.perform
|
23
|
+
Moon::Response::JSON::Collection.should_receive(:new).with(@collection, :formatters).and_return(@response)
|
24
|
+
@action.perform @context
|
23
25
|
end
|
24
26
|
|
25
27
|
it "should return the response" do
|
26
|
-
response = @action.perform
|
28
|
+
response = @action.perform @context
|
27
29
|
response.should == @response
|
28
30
|
end
|
29
31
|
|
30
32
|
end
|
31
33
|
|
32
|
-
describe "self.[]" do
|
33
|
-
|
34
|
-
it "should return a class" do
|
35
|
-
result = described_class[:test]
|
36
|
-
result.should be_instance_of(Class)
|
37
|
-
end
|
38
|
-
|
39
|
-
it "should return a different class" do
|
40
|
-
result = described_class[:test]
|
41
|
-
result.should_not == described_class
|
42
|
-
end
|
43
|
-
|
44
|
-
it "should return a class connected to the given collection key" do
|
45
|
-
result = described_class[:test]
|
46
|
-
result.collection_key.should == :test
|
47
|
-
end
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
34
|
end
|
@@ -5,45 +5,53 @@ describe Moon::Action::Model::Show do
|
|
5
5
|
before :each do
|
6
6
|
@model = mock Object
|
7
7
|
|
8
|
+
@configuration = mock Moon::Application::Configuration, :formatters => :formatters
|
9
|
+
@application = mock Moon::Application, :configuration => @configuration
|
8
10
|
@context = Moon::Context.new
|
11
|
+
@context.application = @application
|
9
12
|
@context.models[:test] = @model
|
10
13
|
|
11
|
-
@
|
12
|
-
Moon::Response::JSON::Model.stub :new => @
|
14
|
+
@model_response = mock Moon::Response::JSON::Model
|
15
|
+
Moon::Response::JSON::Model.stub :new => @model_response
|
13
16
|
|
14
|
-
|
15
|
-
|
17
|
+
@message_response = mock Moon::Response::JSON::Message
|
18
|
+
Moon::Response::JSON::Message.stub :new => @message_response
|
19
|
+
|
20
|
+
@action = described_class.new :test
|
16
21
|
end
|
17
22
|
|
18
|
-
describe "perform" do
|
23
|
+
describe "#perform" do
|
19
24
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
25
|
+
context "for an existing model" do
|
26
|
+
|
27
|
+
it "should initialize #{Moon::Response::JSON::Model}" do
|
28
|
+
Moon::Response::JSON::Model.should_receive(:new).with(:test, @model, :formatters).and_return(@model_response)
|
29
|
+
@action.perform @context
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should return the model response" do
|
33
|
+
response = @action.perform @context
|
34
|
+
response.should == @model_response
|
35
|
+
end
|
24
36
|
|
25
|
-
it "should return the response" do
|
26
|
-
response = @action.perform
|
27
|
-
response.should == @response
|
28
37
|
end
|
29
38
|
|
30
|
-
|
39
|
+
context "for a not-existing model" do
|
31
40
|
|
32
|
-
|
41
|
+
before :each do
|
42
|
+
@context.models[:test] = nil
|
43
|
+
end
|
33
44
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
45
|
+
it "should initialize #{Moon::Response::JSON::Message}" do
|
46
|
+
Moon::Response::JSON::Message.should_receive(:new).with(404, "Model not found.").and_return(@message_response)
|
47
|
+
@action.perform @context
|
48
|
+
end
|
38
49
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
50
|
+
it "should return the message response" do
|
51
|
+
response = @action.perform @context
|
52
|
+
response.should == @message_response
|
53
|
+
end
|
43
54
|
|
44
|
-
it "should return a class connected to the given model key" do
|
45
|
-
result = described_class[:test]
|
46
|
-
result.model_key.should == :test
|
47
55
|
end
|
48
56
|
|
49
57
|
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "..", "spec_helper"))
|
2
|
+
|
3
|
+
describe Moon::Action::Model::Store do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@model = mock Object
|
7
|
+
|
8
|
+
@application = mock Moon::Application, :storage_name => :dump
|
9
|
+
@context = Moon::Context.new
|
10
|
+
@context.application = @application
|
11
|
+
|
12
|
+
GOM::Storage.stub :store => nil
|
13
|
+
GOM::Object.stub :storage_name => :test
|
14
|
+
|
15
|
+
@message_response = mock Moon::Response::JSON::Message
|
16
|
+
Moon::Response::JSON::Message.stub :new => @message_response
|
17
|
+
|
18
|
+
@action = described_class.new :model
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "perform" do
|
22
|
+
|
23
|
+
context "with an initialized model" do
|
24
|
+
|
25
|
+
before :each do
|
26
|
+
@context.models[:model] = @model
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should fetch the storage name of the model" do
|
30
|
+
GOM::Object.should_receive(:storage_name).with(@model).and_return(:test)
|
31
|
+
@action.perform @context
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should store the model on the right storage" do
|
35
|
+
GOM::Storage.should_receive(:store).with(@model, :test)
|
36
|
+
@action.perform @context
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should store the model on the application default storage if it hasn't stored before" do
|
40
|
+
GOM::Object.stub :storage_name => nil
|
41
|
+
GOM::Storage.should_receive(:store).with(@model, :dump)
|
42
|
+
@action.perform @context
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should return nil" do
|
46
|
+
response = @action.perform @context
|
47
|
+
response.should be_nil
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
context "without an initialized model" do
|
53
|
+
|
54
|
+
before :each do
|
55
|
+
@context.models[:model] = nil
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should do nothing if the model isn't initialized" do
|
59
|
+
GOM::Storage.should_not_receive(:store)
|
60
|
+
@action.perform @context
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should initialize the 'failed' message response if the model isn't initialized" do
|
64
|
+
Moon::Response::JSON::Message.should_receive(:new).with(200, "No model initialized.").and_return(@message_response)
|
65
|
+
@action.perform @context
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should return 'failed' message response if the model isn't initialized" do
|
69
|
+
response = @action.perform @context
|
70
|
+
response.should == @message_response
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
@@ -3,32 +3,46 @@ require File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "..", "..
|
|
3
3
|
describe Moon::Action::Models::Finder do
|
4
4
|
|
5
5
|
before :each do
|
6
|
-
@context = Moon::Context.new
|
6
|
+
@context = Moon::Context.new
|
7
|
+
@context.session[:user_id] = "user_id"
|
8
|
+
@context.parameters[:site_id] = "site_id"
|
9
|
+
@context.parameters[:test] = "test value"
|
10
|
+
|
11
|
+
@user = mock Object
|
12
|
+
@site = mock Object
|
13
|
+
GOM::Storage.stub(:fetch) do |id|
|
14
|
+
{ "user_id" => @user, "site_id" => @site }[id]
|
15
|
+
end
|
7
16
|
|
8
|
-
@
|
9
|
-
GOM::Storage.stub :fetch => @model
|
17
|
+
@action = described_class.new
|
10
18
|
end
|
11
19
|
|
12
20
|
describe "self.perform" do
|
13
21
|
|
14
|
-
it "should fetch the
|
15
|
-
GOM::Storage.should_receive(:fetch).with("
|
16
|
-
|
22
|
+
it "should fetch the models using the right ids" do
|
23
|
+
GOM::Storage.should_receive(:fetch).with("user_id").ordered.and_return(@user)
|
24
|
+
GOM::Storage.should_receive(:fetch).with("site_id").ordered.and_return(@site)
|
25
|
+
@action.perform @context
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should set the found parameters-models in the context" do
|
29
|
+
@action.perform @context
|
30
|
+
@context.models[:site].should == @site
|
17
31
|
end
|
18
32
|
|
19
|
-
it "should set the found models in the context" do
|
20
|
-
|
21
|
-
@context.models[:
|
33
|
+
it "should set the found session-models in the context" do
|
34
|
+
@action.perform @context
|
35
|
+
@context.models[:current_user].should == @user
|
22
36
|
end
|
23
37
|
|
24
38
|
it "should return nil" do
|
25
|
-
response =
|
39
|
+
response = @action.perform @context
|
26
40
|
response.should be_nil
|
27
41
|
end
|
28
42
|
|
29
43
|
it "should not fetch non-id values" do
|
30
44
|
GOM::Storage.should_not_receive(:fetch).with("test value")
|
31
|
-
|
45
|
+
@action.perform @context
|
32
46
|
end
|
33
47
|
|
34
48
|
end
|
@@ -8,33 +8,35 @@ describe Moon::Action::Models::Initializer do
|
|
8
8
|
@model = mock Object, :name= => nil, :address= => nil
|
9
9
|
@model_class = mock Class, :new => @model
|
10
10
|
Object.stub :const_get => @model_class
|
11
|
+
|
12
|
+
@action = described_class.new
|
11
13
|
end
|
12
14
|
|
13
15
|
describe "perform" do
|
14
16
|
|
15
17
|
it "should get the right model class" do
|
16
18
|
Object.should_receive(:const_get).with("Site").and_return(@model_class)
|
17
|
-
|
19
|
+
@action.perform @context
|
18
20
|
end
|
19
21
|
|
20
22
|
it "should initialize the model" do
|
21
23
|
@model_class.should_receive(:new).and_return(@model)
|
22
|
-
|
24
|
+
@action.perform @context
|
23
25
|
end
|
24
26
|
|
25
27
|
it "should set the model's attributes" do
|
26
28
|
@model.should_receive(:name=).with("Test Site")
|
27
29
|
@model.should_receive(:address=).with("Test Address")
|
28
|
-
|
30
|
+
@action.perform @context
|
29
31
|
end
|
30
32
|
|
31
33
|
it "should set the model to the context" do
|
32
|
-
|
34
|
+
@action.perform @context
|
33
35
|
@context.models[:site].should == @model
|
34
36
|
end
|
35
37
|
|
36
38
|
it "should return nil" do
|
37
|
-
response =
|
39
|
+
response = @action.perform @context
|
38
40
|
response.should be_nil
|
39
41
|
end
|
40
42
|
|