resource_mapper 0.0.1 → 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/Rakefile CHANGED
@@ -11,10 +11,12 @@ begin
11
11
  gem.homepage = "http://github.com/adamelliot/resource_mapper"
12
12
  gem.authors = ["Adam Elliot"]
13
13
  gem.add_dependency "sinatra", ">= 1.0"
14
- gem.add_dependency "activesupport", ">= 2.3.5"
15
- gem.add_dependency "mongo_mapper", ">= 0.7.6"
14
+ gem.add_dependency "plist", ">= 3.1.0"
15
+ gem.add_dependency "builder", ">= 2.1.2"
16
+ gem.add_dependency "activesupport", ">= 3.0.0"
17
+ gem.add_dependency "mongo_mapper", ">= 0.8.4"
16
18
  gem.add_development_dependency "micronaut", ">= 0.3.0"
17
- gem.add_development_dependency "rack-test", ">= 0.5.3"
19
+ gem.add_development_dependency "rack-test", ">= 0.5.5"
18
20
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
19
21
  end
20
22
  Jeweler::GemcutterTasks.new
@@ -26,7 +28,7 @@ begin
26
28
  require 'micronaut/rake_task'
27
29
  Micronaut::RakeTask.new(:examples) do |examples|
28
30
  examples.pattern = 'examples/**/*_example.rb'
29
- examples.ruby_opts << '-Ilib -Iexamples -rexamples/example_helper.rb'
31
+ examples.ruby_opts << '-Ilib -Iexamples -rexample_helper.rb'
30
32
  end
31
33
 
32
34
  Micronaut::RakeTask.new(:rcov) do |examples|
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.4
@@ -1,5 +1,5 @@
1
1
  describe Sinatra::Resource do
2
-
2
+
3
3
  class BasicApp < Sinatra::Base
4
4
  register Sinatra::Resource
5
5
  resource Person
@@ -13,41 +13,41 @@ describe Sinatra::Resource do
13
13
  def app
14
14
  BasicApp
15
15
  end
16
-
16
+
17
17
  before :each do
18
18
  Person.reset!
19
19
  end
20
20
 
21
21
  it "returns all people in JSON" do
22
- get '/people'
22
+ get '/people.json'
23
23
  last_response.body.should == Person.all.to_json
24
24
  end
25
-
25
+
26
26
  it "returns a specific person as a JSON object" do
27
- get '/person/2'
27
+ get '/people/2.json'
28
28
  last_response.body.should == Person.find(2).to_json
29
29
  end
30
-
30
+
31
31
  it "creates a new person and return the JSON object" do
32
32
  len = Person.all.length
33
- post '/person.json', {:person => {:id => 4, :name => 'Seth'}}
33
+ post '/people.json', {:person => {:id => 4, :name => 'Seth'}}
34
34
  Person.all.length.should == len + 1
35
35
  last_response.body.should == Person.find(4).to_json
36
36
  end
37
37
 
38
38
  it "updates an existing person and returns the JSON object" do
39
- put '/person/3.json', {:person => {:id => 3, :name => 'Seth'}}
39
+ put '/people/3.json', {:person => {:id => 3, :name => 'Seth'}}
40
40
  Person.find(3).name.should == 'Seth'
41
41
  last_response.body.should == Person.find(3).to_json
42
42
  end
43
-
43
+
44
44
  it "deletes a record and return it's content in JSON" do
45
45
  len = Person.all.length
46
- delete '/person/3.json'
46
+ delete '/people/3.json'
47
47
  last_response.body.should == ""
48
48
  Person.all.length.should == len - 1
49
49
  end
50
-
50
+
51
51
  it "fails when requesting an invalid resource" do
52
52
  get '/error'
53
53
  last_response.should_not be_ok
@@ -87,19 +87,19 @@ describe Sinatra::Resource do
87
87
 
88
88
  it "errors and the records don't get altered" do
89
89
  len = Person.all.length
90
- delete '/person/1.json'
90
+ delete '/people/1.json'
91
91
  last_response.should_not be_ok
92
92
  Person.all.length.should == len
93
93
  end
94
94
 
95
95
  it "sets the name to upper case in the before create section" do
96
- post '/person.json', {:person => {:id => 4, :name => 'Adam'}}
96
+ post '/people.json', {:person => {:id => 4, :name => 'Adam'}}
97
97
  last_response.should be_ok
98
98
  Person.find(4).name.should == 'ADAM'
99
99
  end
100
100
 
101
101
  it "allows calling of sinatra helpers from the actions in the resource" do
102
- put '/person/1.json', {:person => {:name => 'Astro'}}
102
+ put '/people/1.json', {:person => {:name => 'Astro'}}
103
103
  last_response.should be_ok
104
104
  Person.find(1).name.should == 'Astro'
105
105
  end
@@ -130,21 +130,91 @@ describe Sinatra::Resource do
130
130
  def app
131
131
  BeforeAndAfterSetsApp
132
132
  end
133
-
133
+
134
134
  before :each do
135
135
  Person.reset!
136
136
  end
137
137
 
138
138
  it "sets the same before action for create and update" do
139
- post '/person.json', {:person => {:id => 4, :name => 'Adam'}}
139
+ post '/people.json', {:person => {:id => 4, :name => 'Adam'}}
140
140
  last_response.should be_ok
141
141
  Person.find(4).name.should == 'ADAM'
142
142
 
143
- put '/person/4.json', {:person => {:id => 4, :name => 'Sandra'}}
143
+ put '/people/4.json', {:person => {:id => 4, :name => 'Sandra'}}
144
144
  last_response.should be_ok
145
145
  Person.find(4).name.should == 'SANDRA'
146
146
  end
147
-
147
+
148
+ end
149
+
150
+ class RenderTemplateThroughResourceApp < Sinatra::Base
151
+ register Sinatra::Resource
152
+
153
+ resource Person do
154
+ index.wants.html { erb '<%= 3 * 3 %>' }
155
+ end
148
156
  end
149
157
 
158
+ describe "rendering template through a resource" do
159
+ def app
160
+ RenderTemplateThroughResourceApp
161
+ end
162
+
163
+ it "displays the erb rendered output" do
164
+ get '/people'
165
+ last_response.body.should == '9'
166
+ end
167
+ end
168
+
169
+ class RestrictWritingUnderActions < Sinatra::Base
170
+ register Sinatra::Resource
171
+
172
+ resource Person do
173
+ index_attrs :name, :phone, :kitty
174
+ show_attrs :id, :name
175
+ create_attrs :id, :name
176
+ update_attrs :phone
177
+ end
178
+ end
179
+
180
+ describe "restricting attributes based on action", :focused => true do
181
+ def app
182
+ RestrictWritingUnderActions
183
+ end
184
+
185
+ before :each do
186
+ Person.reset!
187
+ end
188
+
189
+ it "restricts the output for the index action" do
190
+ Person.clear!
191
+ Person.new(1, "Astro", '555-5555').save
192
+ get '/people.json'
193
+ last_response.should be_ok
194
+ last_response.body.should_not =~ /"id":1/
195
+ end
196
+
197
+ it "restricts the output for the show action" do
198
+ Person.clear!
199
+ Person.new(1, "Astro", '555-5555').save
200
+ get '/people/1.json'
201
+ last_response.should be_ok
202
+ last_response.body.should_not =~ /555\-5555/
203
+ end
204
+
205
+ it "restricts saved attributes for the create action" do
206
+ post '/people.json', {:person => {:id => 4, :name => 'Adam', :phone => '555-9999'}}
207
+ last_response.should be_ok
208
+ Person.find(4).phone.should == nil
209
+ Person.find(4).name.should == 'Adam'
210
+ end
211
+
212
+ it "restricts saved attributes for the update action" do
213
+ name = Person.find(1).name
214
+ put '/people/1.json', {:person => {:name => 'Adam', :phone => '555-9999'}}
215
+ last_response.should be_ok
216
+ Person.find(1).phone.should == '555-9999'
217
+ Person.find(1).name.should == name
218
+ end
219
+ end
150
220
  end
data/examples/models.rb CHANGED
@@ -1,17 +1,20 @@
1
- # Shamelessly take from sinatra-rest, adjusted for JSON
1
+ # Shamelessly taken from sinatra-rest, adjusted for JSON
2
2
  require 'active_support/json'
3
3
 
4
4
  class Person
5
5
  attr_accessor :id
6
6
  attr_accessor :name
7
+ attr_accessor :phone
7
8
 
8
9
  def initialize(*args)
9
10
  if args.size == 0
10
11
  @id = nil
11
12
  @name = nil
12
- elsif args.size == 2
13
+ @phone = nil
14
+ elsif args.size == 3
13
15
  @id = args[0].to_i
14
16
  @name = args[1]
17
+ @phone = args[2]
15
18
  else args.size == 1
16
19
  update_attributes(args[0])
17
20
  end
@@ -36,11 +39,22 @@ class Person
36
39
  unless hash.empty?
37
40
  @id = hash['id'].to_i if hash.include?('id')
38
41
  @name = hash['name'] if hash.include?('name')
42
+ @phone = hash['phone'] if hash.include?('phone')
39
43
  end
40
44
  end
41
45
 
42
- def to_json(_=nil, _=nil)
43
- "{\"id\":#{id.to_json},\"name\":#{name.to_json}}"
46
+ def to_json(options={})
47
+ ret = {}
48
+ puts options
49
+ if !options[:only].nil?
50
+ options[:only].each { |key| ret[key] = self.send(key) }
51
+ else
52
+ ret[:id] = self.id
53
+ ret[:name] = self.name
54
+ ret[:phone] = self.phone
55
+ end
56
+
57
+ ret.to_json
44
58
  end
45
59
  alias_method :as_json, :to_json
46
60
 
@@ -68,9 +82,9 @@ class Person
68
82
 
69
83
  def self.reset!
70
84
  clear!
71
- Person.new(1, 'Al').save
72
- Person.new(2, 'Sol').save
73
- Person.new(3, 'Alma').save
85
+ Person.new(1, 'Al', '555-1234').save
86
+ Person.new(2, 'Sol', '555-6666').save
87
+ Person.new(3, 'Alma', '555-5555').save
74
88
  end
75
89
  end
76
90
 
@@ -1,12 +1,12 @@
1
1
  module ResourceMapper
2
2
  module Actions
3
-
3
+
4
4
  def index
5
5
  load_collection
6
6
  before :index
7
7
  response_for :index
8
8
  end
9
-
9
+
10
10
  def show
11
11
  load_object
12
12
  before :show
@@ -16,7 +16,7 @@ module ResourceMapper
16
16
  end
17
17
 
18
18
  def create
19
- build_object
19
+ build_object(create_attrs)
20
20
  load_object
21
21
  before :create
22
22
  if object.save
@@ -31,7 +31,7 @@ module ResourceMapper
31
31
  def update
32
32
  load_object
33
33
  before :update
34
- if object.update_attributes object_params
34
+ if object.update_attributes object_params(update_attrs)
35
35
  after :update
36
36
  response_for :update
37
37
  else
@@ -51,6 +51,6 @@ module ResourceMapper
51
51
  response_for :destroy_fails
52
52
  end
53
53
  end
54
-
54
+
55
55
  end
56
56
  end
@@ -45,21 +45,61 @@ module ResourceMapper
45
45
  end
46
46
  end
47
47
 
48
- def read_params(*args)
48
+ def read_attrs(*args)
49
49
  class_eval <<-"end_eval", __FILE__, __LINE__
50
- def read_params
51
- {:only => #{args}}
50
+ def index_attrs
51
+ #{args}
52
+ end
53
+
54
+ def show_attrs
55
+ #{args}
56
+ end
57
+ end_eval
58
+ end
59
+
60
+ def index_attrs(*args)
61
+ class_eval <<-"end_eval", __FILE__, __LINE__
62
+ def index_attrs
63
+ #{args}
64
+ end
65
+ end_eval
66
+ end
67
+
68
+ def show_attrs(*args)
69
+ class_eval <<-"end_eval", __FILE__, __LINE__
70
+ def show_attrs
71
+ #{args}
52
72
  end
53
73
  end_eval
54
74
  end
55
75
 
56
- def write_params(*args)
76
+ def write_attrs(*args)
57
77
  class_eval <<-"end_eval", __FILE__, __LINE__
58
- def write_params
78
+ def create_attrs
79
+ #{args}
80
+ end
81
+
82
+ def update_attrs
83
+ #{args}
84
+ end
85
+ end_eval
86
+ end
87
+
88
+ def create_attrs(*args)
89
+ class_eval <<-"end_eval", __FILE__, __LINE__
90
+ def create_attrs
91
+ #{args}
92
+ end
93
+ end_eval
94
+ end
95
+
96
+ def update_attrs(*args)
97
+ class_eval <<-"end_eval", __FILE__, __LINE__
98
+ def update_attrs
59
99
  #{args}
60
100
  end
61
101
  end_eval
62
102
  end
63
-
103
+
64
104
  end
65
105
  end
@@ -6,7 +6,7 @@ module ResourceMapper
6
6
  include ResourceMapper::Actions
7
7
  extend ResourceMapper::Accessors
8
8
  extend ResourceMapper::ClassMethods
9
-
9
+
10
10
  class_reader_writer :belongs_to, *NAME_ACCESSORS
11
11
  NAME_ACCESSORS.each { |accessor| send(accessor, controller_name.singularize.underscore) }
12
12
 
@@ -20,29 +20,70 @@ module ResourceMapper
20
20
 
21
21
  private
22
22
  def self.init_default_actions(klass)
23
+ not_found = lambda { throw(:halt, [404, 'Not found.']) }
24
+ unprocessable_entity = lambda { throw(:halt, [422, 'Unprocessable entity.']) }
25
+
23
26
  klass.class_eval do
24
- index.wants.json { collection.to_json(read_params) }
25
-
27
+ index do
28
+ # wants.xml { collection.to_xml }
29
+ wants.json { collection.to_json(:only => index_attrs) }
30
+ # wants.yaml { collection.to_yaml }
31
+ # wants.plist { collection.to_plist }
32
+ end
33
+
26
34
  show do
27
- wants.json { object.to_json(read_params) }
28
- failure.wants.json {
29
- throw(:halt, [404, 'Not found.'])
30
- }
35
+ # wants.xml { object.to_xml }
36
+ wants.json { object.to_json(:only => show_attrs) }
37
+ # wants.yaml { object.to_yaml }
38
+ # wants.plist { object.to_plist }
39
+
40
+ failure.wants.html &not_found
41
+ # failure.wants.xml &not_found
42
+ failure.wants.json &not_found
43
+ # failure.wants.yaml &not_found
44
+ # failure.wants.plist &not_found
31
45
  end
32
46
 
33
47
  create do
34
- wants.json { object.to_json(read_params) }
35
- failure.wants.json { "BOOOM!!!" }
48
+ wants.html { object.to_json(:only => show_attrs) }
49
+ # wants.xml { object.to_xml }
50
+ wants.json { object.to_json(:only => show_attrs) }
51
+ # wants.yaml { object.to_xml }
52
+ # wants.plist { object.to_json }
53
+
54
+ failure.wants.html &unprocessable_entity
55
+ # failure.wants.xml &unprocessable_entity
56
+ failure.wants.json &unprocessable_entity
57
+ # failure.wants.yaml &unprocessable_entity
58
+ # failure.wants.plist &unprocessable_entity
36
59
  end
37
60
 
38
61
  update do
39
- wants.json { object.to_json(read_params) }
40
- failure.wants.json { "BOOOM!!!" }
62
+ wants.html { object.to_json(:only => show_attrs) }
63
+ # wants.xml { object.to_xml }
64
+ wants.json { object.to_json(:only => show_attrs) }
65
+ # wants.yaml { object.to_xml }
66
+ # wants.plist { object.to_json }
67
+
68
+ failure.wants.html &unprocessable_entity
69
+ # failure.wants.xml &unprocessable_entity
70
+ failure.wants.json &unprocessable_entity
71
+ # failure.wants.yaml &unprocessable_entity
72
+ # failure.wants.plist &unprocessable_entity
41
73
  end
42
74
 
43
75
  destroy do
76
+ wants.html { "" }
77
+ # wants.xml { "" }
44
78
  wants.json { "" }
45
- failure.wants.json { "BOOM!!!" }
79
+ # wants.yaml { "" }
80
+ # wants.plist { "" }
81
+
82
+ failure.wants.html &unprocessable_entity
83
+ # failure.wants.xml &unprocessable_entity
84
+ failure.wants.json &unprocessable_entity
85
+ # failure.wants.yaml &unprocessable_entity
86
+ # failure.wants.plist &unprocessable_entity
46
87
  end
47
88
 
48
89
  class << self
@@ -2,13 +2,13 @@ module ResourceMapper
2
2
  module Helpers
3
3
  module CurrentObjects
4
4
  protected
5
- # Used internally to return the model for your resource.
5
+ # Used internally to return the model for your resource.
6
6
  #
7
7
  def model
8
8
  model_name.to_s.camelize.constantize
9
9
  end
10
10
 
11
-
11
+
12
12
  # Used to fetch the collection for the index method
13
13
  #
14
14
  # In order to customize the way the collection is fetched, to add something like pagination, for example, override this method.
@@ -16,20 +16,20 @@ module ResourceMapper
16
16
  def collection
17
17
  end_of_association_chain.all
18
18
  end
19
-
19
+
20
20
  # Returns the current param for key.
21
- #
21
+ #
22
22
  # Override this method if you'd like to use an alternate param name.
23
23
  #
24
24
  def param
25
25
  params[:id]
26
26
  end
27
-
27
+
28
28
  # Returns the key used for finding.
29
29
  def key
30
30
  :id
31
31
  end
32
-
32
+
33
33
  # Used to fetch the current member object in all of the singular methods that operate on an existing member.
34
34
  #
35
35
  # Override this method if you'd like to fetch your objects in some alternate way, like using a permalink.
@@ -45,38 +45,41 @@ module ResourceMapper
45
45
  @object ||= end_of_association_chain.first({key => param}) unless param.nil?
46
46
  @object
47
47
  end
48
-
48
+
49
49
  # Used internally to load the member object in to an instance variable @#{model_name} (i.e. @post)
50
50
  #
51
51
  def load_object
52
52
  instance_variable_set "@#{parent_type}", parent_object if parent?
53
53
  instance_variable_set "@#{object_name}", object
54
54
  end
55
-
55
+
56
56
  # Used internally to load the collection in to an instance variable @#{model_name.pluralize} (i.e. @posts)
57
57
  #
58
58
  def load_collection
59
59
  instance_variable_set "@#{parent_type}", parent_object if parent?
60
60
  instance_variable_set "@#{object_name.to_s.pluralize}", collection
61
61
  end
62
-
62
+
63
63
  # Returns the form params. Defaults to params[model_name] (i.e. params["post"])
64
64
  #
65
- def object_params
65
+ def object_params(write_attrs = nil)
66
66
  ret = params["#{object_name}"]
67
- ret.delete_if { |k, v| write_params.index(k.to_sym).nil? } unless write_params.nil?
67
+ ret.delete_if { |k, v| write_attrs.index(k.to_sym).nil? } unless write_attrs.nil? || ret.nil?
68
68
  ret
69
69
  end
70
-
70
+
71
71
  # Builds the object, but doesn't save it, during the new, and create action.
72
72
  #
73
- def build_object
74
- @object = end_of_association_chain.send parent? ? :build : :new, object_params
73
+ def build_object(write_attrs = nil)
74
+ @object = end_of_association_chain.send parent? ? :build : :new, object_params(write_attrs)
75
75
  end
76
76
 
77
- def read_params ; nil end
78
- def write_params ; nil end
79
-
77
+ def index_attrs ; nil end
78
+ def show_attrs ; nil end
79
+
80
+ def create_attrs ; nil end
81
+ def update_attrs ; nil end
82
+
80
83
  end
81
84
  end
82
85
  end
@@ -3,7 +3,7 @@ require 'active_support/inflector'
3
3
 
4
4
  module Sinatra
5
5
  module Resource
6
- DEFAULT_FORMAT = :json
6
+ DEFAULT_FORMAT = :html
7
7
 
8
8
  def get_with_formats(path, options = {}, &block)
9
9
  route_method_for_formats :get, path, options, &block
@@ -27,6 +27,8 @@ module Sinatra
27
27
  klass.class_eval <<-"end_eval", __FILE__, __LINE__
28
28
  attr_accessor :app, :wants
29
29
  delegate :request, :response, :params, :session, :to => :app
30
+ # Link in the various view renderers
31
+ delegate :haml, :sass, :erb, :erubris, :builder, :less, :to => :app
30
32
 
31
33
  def self.controller_name
32
34
  "#{model.to_s.demodulize.downcase.pluralize}"
@@ -35,7 +37,7 @@ module Sinatra
35
37
  def self.model_name
36
38
  "#{model.to_s.demodulize.downcase}"
37
39
  end
38
-
40
+
39
41
  def self.model
40
42
  model
41
43
  end
@@ -68,10 +70,15 @@ module Sinatra
68
70
  block.bind(self).call(wants)
69
71
  halt 404 if wants[format].nil?
70
72
 
73
+ # TODO: Add support for data in format's other than form-data
74
+ # params['person'] = case format
75
+ # when :json ; ActiveSupport::JSON.decode(request.body)
76
+ # end
77
+
71
78
  wants[format].call
72
79
  end
73
80
  end
74
-
81
+
75
82
  def route_handler(resource_klass, method)
76
83
  lambda do |wants|
77
84
  resource = resource_klass.new
@@ -80,15 +87,15 @@ module Sinatra
80
87
  resource.method(method).call
81
88
  end
82
89
  end
83
-
90
+
84
91
  def setup_routes(model, resource)
85
92
  name = model.to_s.demodulize.downcase
86
93
 
87
- get_with_formats "/#{name.pluralize}", {}, &route_handler(resource, :index) unless resource.instance_methods.index(:index).nil?
88
- get_with_formats "/#{name}/:id", {}, &route_handler(resource, :show) unless resource.instance_methods.index(:show).nil?
89
- post_with_formats "/#{name}", {}, &route_handler(resource, :create) unless resource.instance_methods.index(:create).nil?
90
- put_with_formats "/#{name}/:id", {}, &route_handler(resource, :update) unless resource.instance_methods.index(:update).nil?
91
- delete_with_formats "/#{name}/:id", {}, &route_handler(resource, :destroy) unless resource.instance_methods.index(:destroy).nil?
94
+ get_with_formats "/#{name.pluralize}", {}, &route_handler(resource, :index) unless resource.instance_methods.index(:index).nil?
95
+ get_with_formats "/#{name.pluralize}/:id", {}, &route_handler(resource, :show) unless resource.instance_methods.index(:show).nil?
96
+ post_with_formats "/#{name.pluralize}", {}, &route_handler(resource, :create) unless resource.instance_methods.index(:create).nil?
97
+ put_with_formats "/#{name.pluralize}/:id", {}, &route_handler(resource, :update) unless resource.instance_methods.index(:update).nil?
98
+ delete_with_formats "/#{name.pluralize}/:id", {}, &route_handler(resource, :destroy) unless resource.instance_methods.index(:destroy).nil?
92
99
  end
93
100
  end
94
101
 
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{resource_mapper}
8
- s.version = "0.0.1"
8
+ s.version = "0.0.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Adam Elliot"]
12
- s.date = %q{2010-06-24}
12
+ s.date = %q{2010-10-28}
13
13
  s.description = %q{Creates a resource for a model in sinatra}
14
14
  s.email = %q{adam@adamelliot.com}
15
15
  s.extra_rdoc_files = [
@@ -58,23 +58,29 @@ Gem::Specification.new do |s|
58
58
 
59
59
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
60
60
  s.add_runtime_dependency(%q<sinatra>, [">= 1.0"])
61
- s.add_runtime_dependency(%q<activesupport>, [">= 2.3.5"])
62
- s.add_runtime_dependency(%q<mongo_mapper>, [">= 0.7.6"])
61
+ s.add_runtime_dependency(%q<plist>, [">= 3.1.0"])
62
+ s.add_runtime_dependency(%q<builder>, [">= 2.1.2"])
63
+ s.add_runtime_dependency(%q<activesupport>, [">= 3.0.0"])
64
+ s.add_runtime_dependency(%q<mongo_mapper>, [">= 0.8.4"])
63
65
  s.add_development_dependency(%q<micronaut>, [">= 0.3.0"])
64
- s.add_development_dependency(%q<rack-test>, [">= 0.5.3"])
66
+ s.add_development_dependency(%q<rack-test>, [">= 0.5.5"])
65
67
  else
66
68
  s.add_dependency(%q<sinatra>, [">= 1.0"])
67
- s.add_dependency(%q<activesupport>, [">= 2.3.5"])
68
- s.add_dependency(%q<mongo_mapper>, [">= 0.7.6"])
69
+ s.add_dependency(%q<plist>, [">= 3.1.0"])
70
+ s.add_dependency(%q<builder>, [">= 2.1.2"])
71
+ s.add_dependency(%q<activesupport>, [">= 3.0.0"])
72
+ s.add_dependency(%q<mongo_mapper>, [">= 0.8.4"])
69
73
  s.add_dependency(%q<micronaut>, [">= 0.3.0"])
70
- s.add_dependency(%q<rack-test>, [">= 0.5.3"])
74
+ s.add_dependency(%q<rack-test>, [">= 0.5.5"])
71
75
  end
72
76
  else
73
77
  s.add_dependency(%q<sinatra>, [">= 1.0"])
74
- s.add_dependency(%q<activesupport>, [">= 2.3.5"])
75
- s.add_dependency(%q<mongo_mapper>, [">= 0.7.6"])
78
+ s.add_dependency(%q<plist>, [">= 3.1.0"])
79
+ s.add_dependency(%q<builder>, [">= 2.1.2"])
80
+ s.add_dependency(%q<activesupport>, [">= 3.0.0"])
81
+ s.add_dependency(%q<mongo_mapper>, [">= 0.8.4"])
76
82
  s.add_dependency(%q<micronaut>, [">= 0.3.0"])
77
- s.add_dependency(%q<rack-test>, [">= 0.5.3"])
83
+ s.add_dependency(%q<rack-test>, [">= 0.5.5"])
78
84
  end
79
85
  end
80
86
 
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resource_mapper
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
7
  - 0
9
- - 1
10
- version: 0.0.1
8
+ - 4
9
+ version: 0.0.4
11
10
  platform: ruby
12
11
  authors:
13
12
  - Adam Elliot
@@ -15,7 +14,7 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-06-24 00:00:00 -06:00
17
+ date: 2010-10-28 00:00:00 -06:00
19
18
  default_executable:
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
@@ -26,7 +25,6 @@ dependencies:
26
25
  requirements:
27
26
  - - ">="
28
27
  - !ruby/object:Gem::Version
29
- hash: 15
30
28
  segments:
31
29
  - 1
32
30
  - 0
@@ -34,69 +32,95 @@ dependencies:
34
32
  type: :runtime
35
33
  version_requirements: *id001
36
34
  - !ruby/object:Gem::Dependency
37
- name: activesupport
35
+ name: plist
38
36
  prerelease: false
39
37
  requirement: &id002 !ruby/object:Gem::Requirement
40
38
  none: false
41
39
  requirements:
42
40
  - - ">="
43
41
  - !ruby/object:Gem::Version
44
- hash: 9
45
42
  segments:
46
- - 2
47
43
  - 3
48
- - 5
49
- version: 2.3.5
44
+ - 1
45
+ - 0
46
+ version: 3.1.0
50
47
  type: :runtime
51
48
  version_requirements: *id002
52
49
  - !ruby/object:Gem::Dependency
53
- name: mongo_mapper
50
+ name: builder
54
51
  prerelease: false
55
52
  requirement: &id003 !ruby/object:Gem::Requirement
56
53
  none: false
57
54
  requirements:
58
55
  - - ">="
59
56
  - !ruby/object:Gem::Version
60
- hash: 15
61
57
  segments:
62
- - 0
63
- - 7
64
- - 6
65
- version: 0.7.6
58
+ - 2
59
+ - 1
60
+ - 2
61
+ version: 2.1.2
66
62
  type: :runtime
67
63
  version_requirements: *id003
68
64
  - !ruby/object:Gem::Dependency
69
- name: micronaut
65
+ name: activesupport
70
66
  prerelease: false
71
67
  requirement: &id004 !ruby/object:Gem::Requirement
72
68
  none: false
73
69
  requirements:
74
70
  - - ">="
75
71
  - !ruby/object:Gem::Version
76
- hash: 19
72
+ segments:
73
+ - 3
74
+ - 0
75
+ - 0
76
+ version: 3.0.0
77
+ type: :runtime
78
+ version_requirements: *id004
79
+ - !ruby/object:Gem::Dependency
80
+ name: mongo_mapper
81
+ prerelease: false
82
+ requirement: &id005 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ segments:
88
+ - 0
89
+ - 8
90
+ - 4
91
+ version: 0.8.4
92
+ type: :runtime
93
+ version_requirements: *id005
94
+ - !ruby/object:Gem::Dependency
95
+ name: micronaut
96
+ prerelease: false
97
+ requirement: &id006 !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
77
102
  segments:
78
103
  - 0
79
104
  - 3
80
105
  - 0
81
106
  version: 0.3.0
82
107
  type: :development
83
- version_requirements: *id004
108
+ version_requirements: *id006
84
109
  - !ruby/object:Gem::Dependency
85
110
  name: rack-test
86
111
  prerelease: false
87
- requirement: &id005 !ruby/object:Gem::Requirement
112
+ requirement: &id007 !ruby/object:Gem::Requirement
88
113
  none: false
89
114
  requirements:
90
115
  - - ">="
91
116
  - !ruby/object:Gem::Version
92
- hash: 13
93
117
  segments:
94
118
  - 0
95
119
  - 5
96
- - 3
97
- version: 0.5.3
120
+ - 5
121
+ version: 0.5.5
98
122
  type: :development
99
- version_requirements: *id005
123
+ version_requirements: *id007
100
124
  description: Creates a resource for a model in sinatra
101
125
  email: adam@adamelliot.com
102
126
  executables: []
@@ -144,7 +168,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
144
168
  requirements:
145
169
  - - ">="
146
170
  - !ruby/object:Gem::Version
147
- hash: 3
148
171
  segments:
149
172
  - 0
150
173
  version: "0"
@@ -153,7 +176,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
153
176
  requirements:
154
177
  - - ">="
155
178
  - !ruby/object:Gem::Version
156
- hash: 3
157
179
  segments:
158
180
  - 0
159
181
  version: "0"