platanus 0.1.1 → 0.1.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.
@@ -0,0 +1,69 @@
1
+ # api_boilerplate.rb : ActiveRecord Activable mod.
2
+ #
3
+ # Copyright July 2012, Ignacio Baixas +mailto:ignacio@platan.us+.
4
+
5
+ module Platanus
6
+
7
+ # # Boilerplate for platanus json api controllers
8
+ #
9
+ # Provides base error handling and rendering methods.
10
+ # Also provides a couple of opt-in behaviours..
11
+ #
12
+ module ModelShims
13
+
14
+ def self.included(base)
15
+ base.extend ClassMethods
16
+ end
17
+
18
+ module ClassMethods
19
+
20
+ def shims_for(_name, _options={})
21
+
22
+ # TODO: detect if _name is an association and use the association's settings.
23
+ # TODO: separate in attr_composite_writer and attr_composite_reader
24
+
25
+ name = _name.to_s
26
+ model = _options.fetch(:class_name, name.camelize).constantize
27
+ prefix = _options.fetch :prefix, name
28
+ cache_var = _options.fetch :into, "@_#{name}_shims"
29
+
30
+ model.accessible_attributes.each do |attr_name|
31
+
32
+ full_attr_name = if prefix then "#{prefix}_#{attr_name}" else attr_name end
33
+
34
+ unless method_defined? "#{full_attr_name}="
35
+ define_method "#{full_attr_name}=" do |value|
36
+ cache = instance_variable_get(cache_var)
37
+ cache = instance_variable_set(cache_var, {}) if cache.nil?
38
+ cache[attr_name] = value
39
+ end
40
+ attr_accessible full_attr_name
41
+ else
42
+ Rails.logger.warn "shims_for: failed to generate setter for #{full_attr_name} in #{self.to_s}"
43
+ end
44
+
45
+ unless method_defined? full_attr_name
46
+ define_method full_attr_name do
47
+ cache = instance_variable_get(cache_var)
48
+ return cache[attr_name] if cache and cache.has_key? attr_name
49
+ child = send(name)
50
+ if child then child.send(attr_name) else nil end
51
+ end
52
+ else
53
+ Rails.logger.warn "shims_for: failed to generate getter for #{full_attr_name} in #{self.to_s}"
54
+ end
55
+ end
56
+
57
+ define_method("#{name}_shims_changed?") do
58
+ not instance_variable_get(cache_var).nil?
59
+ end
60
+
61
+ define_method("#{name}_shims_flush") do
62
+ cache = instance_variable_get(cache_var)
63
+ instance_variable_set(cache_var, nil)
64
+ return cache
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -1,3 +1,3 @@
1
1
  module Platanus
2
- VERSION = "0.1.1" # 0.2 will come with tests!
2
+ VERSION = "0.1.2" # 0.2 will come with tests!
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: platanus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -65,6 +65,7 @@ files:
65
65
  - lib/platanus/gcontroller.rb
66
66
  - lib/platanus/http_helpers.rb
67
67
  - lib/platanus/layered.rb
68
+ - lib/platanus/model_shims.rb
68
69
  - lib/platanus/onetime.rb
69
70
  - lib/platanus/serializers/json_sym.rb
70
71
  - lib/platanus/stacked.rb