benhoskings-hammock 0.3.5 → 0.3.7

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/History.txt CHANGED
@@ -1,3 +1,14 @@
1
+ == 0.3.7 2009-06-05
2
+ Rewrote hammock loading code to use nestable dependencies instead of the LoadFirst constant.
3
+ Replaced Hammock::Aliases with the Hammock:LambdaAlias component.
4
+
5
+
6
+ == 0.3.6 2009-06-04
7
+ Call initialize_for_load after requiring components, so Hammock::Aliases is defined.
8
+ Replaced MixInto reference with more appropriate base reference in Hammock::ActiveRecord.included.
9
+ Added exception message to model const_get error message.
10
+
11
+
1
12
  == 0.3.5 2009-06-03
2
13
  Converted README back to rdoc, for rubyforge rake tasks.
3
14
 
data/hammock.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{hammock}
5
- s.version = "0.3.5"
5
+ s.version = "0.3.7"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Ben Hoskings"]
9
- s.date = %q{2009-06-03}
9
+ s.date = %q{2009-06-05}
10
10
  s.description = %q{Hammock is a Rails plugin that eliminates redundant code in a very RESTful manner. It does this in lots in lots of different places, but in one manner: it encourages specification in place of implementation.
11
11
 
12
12
 
@@ -20,12 +20,11 @@ It makes more sense when you see how it works though. There's a screencast comin
20
20
  s.email = ["ben@hoskings.net"]
21
21
  s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.rdoc", "misc/scaffold.txt"]
22
22
  s.files = ["History.txt", "LICENSE", "Manifest.txt", "README.rdoc", "Rakefile", "hammock.gemspec", "lib/hammock.rb", "lib/hammock/ajaxinate.rb", "lib/hammock/callback.rb", "lib/hammock/callbacks.rb", "lib/hammock/canned_scopes.rb", "lib/hammock/constants.rb", "lib/hammock/controller_attributes.rb", "lib/hammock/export_scope.rb", "lib/hammock/hamlink_to.rb", "lib/hammock/javascript_buffer.rb", "lib/hammock/logging.rb", "lib/hammock/model_attributes.rb", "lib/hammock/model_logging.rb", "lib/hammock/monkey_patches/action_pack.rb", "lib/hammock/monkey_patches/active_record.rb", "lib/hammock/monkey_patches/array.rb", "lib/hammock/monkey_patches/hash.rb", "lib/hammock/monkey_patches/logger.rb", "lib/hammock/monkey_patches/module.rb", "lib/hammock/monkey_patches/numeric.rb", "lib/hammock/monkey_patches/object.rb", "lib/hammock/monkey_patches/route_set.rb", "lib/hammock/monkey_patches/string.rb", "lib/hammock/overrides.rb", "lib/hammock/resource_mapping_hooks.rb", "lib/hammock/resource_retrieval.rb", "lib/hammock/restful_actions.rb", "lib/hammock/restful_rendering.rb", "lib/hammock/restful_support.rb", "lib/hammock/route_drawing_hooks.rb", "lib/hammock/route_for.rb", "lib/hammock/route_node.rb", "lib/hammock/route_step.rb", "lib/hammock/scope.rb", "lib/hammock/suggest.rb", "lib/hammock/utils.rb", "misc/scaffold.txt", "misc/template.rb", "tasks/hammock_tasks.rake", "test/hammock_test.rb"]
23
- s.has_rdoc = true
24
23
  s.homepage = %q{http://github.com/benhoskings/hammock}
25
24
  s.rdoc_options = ["--main", "README.rdoc"]
26
25
  s.require_paths = ["lib"]
27
26
  s.rubyforge_project = %q{hammock}
28
- s.rubygems_version = %q{1.3.2}
27
+ s.rubygems_version = %q{1.3.4}
29
28
  s.summary = %q{Hammock is a Rails plugin that eliminates redundant code in a very RESTful manner}
30
29
 
31
30
  if s.respond_to? :specification_version then
data/lib/hammock.rb CHANGED
@@ -4,12 +4,12 @@ require 'ambition'
4
4
  require 'ambition/adapters/active_record'
5
5
 
6
6
  module Hammock
7
- VERSION = '0.3.5'
7
+ VERSION = '0.3.7'
8
+ IncludeTarget = ActionController::Base
8
9
 
9
10
  def self.included base # :nodoc:
10
- puts "Loading Hammock from #{loaded_from_gem? ? 'gem' : 'plugin'}"
11
- initialize_for_load
12
- load_hammock_components base
11
+ puts "Loading Hammock #{Hammock::VERSION} from #{loaded_from_gem? ? 'gem' : 'plugin'}"
12
+ load_hammock_components
13
13
  end
14
14
 
15
15
  def self.loaded_from_gem?
@@ -33,13 +33,9 @@ module Hammock
33
33
 
34
34
  private
35
35
 
36
- def self.initialize_for_load
37
- Hammock::Aliases.alias_lambda
38
- end
39
-
40
- def self.load_hammock_components base
36
+ def self.load_hammock_components
41
37
  require_hammock_components
42
- mixin_hammock_components base
38
+ mixin_hammock_components
43
39
  end
44
40
 
45
41
  def self.require_hammock_components
@@ -48,20 +44,31 @@ module Hammock
48
44
  }
49
45
  end
50
46
 
51
- def self.mixin_hammock_components base
52
- Hammock.constants.map {|constant_name|
53
- Hammock.const_get constant_name
54
- }.select {|constant|
55
- constant.is_a?(Module) && !constant.is_a?(Class)
56
- }.partition {|mod|
57
- mod.constants.include?('LoadFirst') && mod::LoadFirst
58
- }.flatten.each {|mod|
59
- target = mod.constants.include?('MixInto') ? mod::MixInto : base
60
- target.send :include, mod
61
- }
47
+ def self.mixin_hammock_components
48
+ Hammock.constants.each &method(:mixin_hammock_component)
49
+ end
50
+
51
+ def self.mixin_hammock_component mod
52
+ (get_constant_from(mod, :Deps) || []).each &method(:mixin_hammock_component)
53
+ do_module_mixin module_for mod
54
+ end
55
+
56
+ def self.do_module_mixin mod
57
+ (get_constant_from(mod, :MixInto) || IncludeTarget).send :include, mod unless mod.nil?
58
+ end
59
+
60
+ def self.module_for obj
61
+ const = obj.is_a?(Module) ? obj : const_get(obj)
62
+ const if const.is_a?(Module) && !const.is_a?(Class)
63
+ end
64
+
65
+ def self.get_constant_from module_name, constant_name
66
+ unless (mod = module_for module_name).nil?
67
+ mod.const_get constant_name.to_s if mod.constants.include?(constant_name.to_s)
68
+ end
62
69
  end
63
70
 
64
71
  end
65
72
 
66
73
  # This is done in init.rb when Hammock is loaded as a plugin.
67
- ActionController::Base.send :include, Hammock if Hammock.loaded_from_gem?
74
+ Hammock::IncludeTarget.send :include, Hammock if Hammock.loaded_from_gem?
@@ -1,6 +1,5 @@
1
1
  module Hammock
2
2
  module Callbacks
3
- LoadFirst = true
4
3
 
5
4
  def self.included base # :nodoc:
6
5
  base.send :include, InstanceMethods
@@ -2,9 +2,9 @@ module Hammock
2
2
  PleaseFileABug = "Ack, that shouldn't have happened. Please email the full stacktrace to <ben@hoskings.net>, so the problem you uncovered can be addressed. Thanks!"
3
3
 
4
4
  module Constants
5
-
5
+
6
6
  ImpliedVerbs = [:index, :create, :show, :update, :destroy]
7
7
  ImpliedUnsafeActions = [:new, :edit, :destroy]
8
-
8
+
9
9
  end
10
10
  end
@@ -7,7 +7,7 @@ module Hammock
7
7
  base.send :extend, ClassMethods # TODO maybe include in the metaclass instead of extending the class?
8
8
 
9
9
  %w[before_undestroy after_undestroy].each {|callback_name|
10
- MixInto.define_callbacks callback_name
10
+ base.define_callbacks callback_name
11
11
  # base.send :define_method, callback_name, lambda { }
12
12
  }
13
13
  base.class_eval {
@@ -1,7 +1,6 @@
1
1
  module Hammock
2
2
  module ModulePatches
3
3
  MixInto = Module
4
- LoadFirst = true
5
4
 
6
5
  def self.included base # :nodoc:
7
6
  base.send :include, InstanceMethods
@@ -1,6 +1,7 @@
1
1
  module Hammock
2
2
  module ResourceMappingHooks
3
3
  MixInto = ActionController::Resources
4
+ Deps = [ModulePatches]
4
5
 
5
6
  def self.included base # :nodoc:
6
7
  base.send :include, Methods
@@ -1,5 +1,7 @@
1
1
  module Hammock
2
2
  module RestfulSupport
3
+ Deps = [Callbacks]
4
+
3
5
  def self.included base # :nodoc:
4
6
  base.send :include, InstanceMethods
5
7
  base.send :extend, ClassMethods
@@ -19,7 +21,7 @@ module Hammock
19
21
  def mdl
20
22
  @hammock_cached_mdl ||= Object.const_get to_s.sub('Controller', '').classify
21
23
  rescue
22
- log "No such model '#{to_s.sub('Controller', '').classify}'."
24
+ log "Error loading '#{to_s.sub('Controller', '').classify}': #{$!}."
23
25
  nil
24
26
  end
25
27
  # The lowercase name of the model this controller operates on. For example, for +GelatinousBlobsController+, this will return "gelatinous_blob".
@@ -1,6 +1,7 @@
1
1
  module Hammock
2
2
  module RouteDrawingHooks
3
3
  MixInto = ActionController::Routing::RouteSet
4
+ Deps = [ModulePatches]
4
5
 
5
6
  def self.included base # :nodoc:
6
7
  base.send :include, Methods
data/misc/template.rb CHANGED
@@ -1,8 +1,7 @@
1
1
  module Hammock
2
2
  module Lol
3
3
  MixInto = Lol::Lul
4
- # LoadFirst = false
5
-
4
+
6
5
  def self.included base # :nodoc:
7
6
  base.send :include, InstanceMethods
8
7
  base.send :extend, ClassMethods
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: benhoskings-hammock
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.3.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Hoskings
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-03 00:00:00 -07:00
12
+ date: 2009-06-05 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -111,7 +111,7 @@ files:
111
111
  - misc/template.rb
112
112
  - tasks/hammock_tasks.rake
113
113
  - test/hammock_test.rb
114
- has_rdoc: true
114
+ has_rdoc: false
115
115
  homepage: http://github.com/benhoskings/hammock
116
116
  post_install_message:
117
117
  rdoc_options: