hammock 0.5.8 → 0.5.9

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.8
1
+ 0.5.9
data/hammock.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{hammock}
8
- s.version = "0.5.8"
8
+ s.version = "0.5.9"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ben Hoskings"]
12
- s.date = %q{2010-02-21}
12
+ s.date = %q{2010-05-12}
13
13
  s.description = %q{}
14
14
  s.email = %q{ben@hoskings.net}
15
15
  s.extra_rdoc_files = [
@@ -75,7 +75,7 @@ Gem::Specification.new do |s|
75
75
  s.homepage = %q{http://github.com/benhoskings/hammock}
76
76
  s.rdoc_options = ["--charset=UTF-8"]
77
77
  s.require_paths = ["lib"]
78
- s.rubygems_version = %q{1.3.5}
78
+ s.rubygems_version = %q{1.3.6}
79
79
  s.summary = %q{Radically RESTful Rails.}
80
80
 
81
81
  if s.respond_to? :specification_version then
@@ -64,6 +64,7 @@ module Hammock
64
64
  end
65
65
 
66
66
  def log_fail *args
67
+ opts = args.extract_options!
67
68
  log *(args << opts.merge(:skip => (opts[:skip] || 0) + 1))
68
69
  false
69
70
  end
@@ -84,7 +85,7 @@ module Hammock
84
85
  args.map(&:inspect).join(', ')
85
86
  end
86
87
 
87
- msg.colorize!('on red') if opts[:error] || opts[:report]
88
+ msg = msg.colorize('on red') if opts[:error] || opts[:report]
88
89
 
89
90
  callpoint = caller[opts[:skip]].sub(rails_root.end_with('/'), '')
90
91
  entry = "#{callpoint}#{msg.blank? ? (opts[:report] ? ' <-- something broke here' : '.') : ' | '}#{msg}"
@@ -19,7 +19,7 @@ module Hammock
19
19
  module ClassMethods
20
20
 
21
21
  def new_with attributes
22
- default_attributes.merge(attributes).inject(new) {|record,(k,v)|
22
+ default_attributes.merge(attributes || {}).inject(new) {|record,(k,v)|
23
23
  record.send "#{k}=", v
24
24
  record
25
25
  }
@@ -22,11 +22,10 @@ module Hammock
22
22
  end
23
23
 
24
24
  def selekt &block
25
- hsh = {}
26
- each_pair {|k,v|
25
+ inject({}) {|hsh,(k,v)|
27
26
  hsh[k] = v if yield(k,v)
27
+ hsh
28
28
  }
29
- hsh
30
29
  end
31
30
 
32
31
  # TODO remove in favour of #slice (in ActiveSupport).
@@ -53,6 +52,19 @@ module Hammock
53
52
  to_param_hash.to_json
54
53
  end
55
54
 
55
+ def reject_r &block
56
+ dup.reject_r! &block
57
+ end
58
+
59
+ def reject_r! &block
60
+ each_pair {|k,v|
61
+ if yield k, v
62
+ self.delete k
63
+ elsif v.is_a? Hash
64
+ self[k] = v.reject_r &block
65
+ end
66
+ }
67
+ end
56
68
  end
57
69
  end
58
70
  end
@@ -19,14 +19,18 @@ module Hammock
19
19
 
20
20
  # The model this controller operates on. Defined as the singularized controller name. For example, for +GelatinousBlobsController+, this will return the +GelatinousBlob+ class.
21
21
  def mdl
22
- @hammock_cached_mdl ||= Object.const_get to_s.sub('Controller', '').classify
22
+ @hammock_cached_mdl ||= Object.const_get controller_ref.to_s.sub('Controller', '').classify
23
23
  rescue
24
24
  log "Error loading '#{to_s.sub('Controller', '').classify}': #{$!}."
25
25
  nil
26
26
  end
27
27
  # The lowercase name of the model this controller operates on. For example, for +GelatinousBlobsController+, this will return "gelatinous_blob".
28
28
  def mdl_name
29
- @hammock_cached_mdl_name ||= to_s.sub('Controller', '').singularize.underscore
29
+ @hammock_cached_mdl_name ||= controller_ref.to_s.sub('Controller', '').singularize.underscore
30
+ end
31
+
32
+ def controller_ref
33
+ self
30
34
  end
31
35
 
32
36
  end
@@ -43,6 +47,10 @@ module Hammock
43
47
  self.class.mdl_name
44
48
  end
45
49
 
50
+ def controller_ref
51
+ self.class.controller_ref
52
+ end
53
+
46
54
  # Returns the node in the Hammock routing map corresponding to the (possibly nested) resource handling the current request.
47
55
  def current_hammock_resource
48
56
  nesting_resources = params.keys.map {|k| k.dup.chomp!('_id') }.compact.map(&:pluralize)
@@ -63,8 +71,8 @@ module Hammock
63
71
  # This is useful for concise nested parameter access. For example, if <tt>params[:account]</tt> is nil:
64
72
  # params[:account][:email] #=> NoMethodError: undefined method `[]' for nil:NilClass
65
73
  # params_for(:account)[:email] #=> nil
66
- def params_for key
67
- params[key] || {}
74
+ def params_for *keys
75
+ keys.inject(params) {|acc,key| acc[key] || {} }
68
76
  end
69
77
 
70
78
  def nested_params_for resource
@@ -97,7 +105,6 @@ module Hammock
97
105
  results.map {|records|
98
106
  records.first
99
107
  }.all? {|record|
100
- log "nested record #{record.concise_inspect} assigned to @#{record.base_model}."
101
108
  add_nested_entity record
102
109
  instance_variable_set "@#{record.base_model}", record
103
110
  }
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hammock
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.8
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 5
8
+ - 9
9
+ version: 0.5.9
5
10
  platform: ruby
6
11
  authors:
7
12
  - Ben Hoskings
@@ -9,29 +14,38 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-02-21 00:00:00 +11:00
17
+ date: 2010-05-12 00:00:00 +10:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: rails
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ~>
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 2
29
+ - 3
30
+ - 0
23
31
  version: 2.3.0
24
- version:
32
+ type: :runtime
33
+ version_requirements: *id001
25
34
  - !ruby/object:Gem::Dependency
26
35
  name: benhoskings-ambitious-activerecord
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
30
38
  requirements:
31
39
  - - ~>
32
40
  - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ - 1
44
+ - 3
45
+ - 7
33
46
  version: 0.1.3.7
34
- version:
47
+ type: :runtime
48
+ version_requirements: *id002
35
49
  description: ""
36
50
  email: ben@hoskings.net
37
51
  executables: []
@@ -109,18 +123,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
109
123
  requirements:
110
124
  - - ">="
111
125
  - !ruby/object:Gem::Version
126
+ segments:
127
+ - 0
112
128
  version: "0"
113
- version:
114
129
  required_rubygems_version: !ruby/object:Gem::Requirement
115
130
  requirements:
116
131
  - - ">="
117
132
  - !ruby/object:Gem::Version
133
+ segments:
134
+ - 0
118
135
  version: "0"
119
- version:
120
136
  requirements: []
121
137
 
122
138
  rubyforge_project:
123
- rubygems_version: 1.3.5
139
+ rubygems_version: 1.3.6
124
140
  signing_key:
125
141
  specification_version: 3
126
142
  summary: Radically RESTful Rails.