ixtlan-core 0.6.1 → 0.7.0

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.
@@ -1,46 +1,74 @@
1
+ require 'slf4r'
1
2
  module Ixtlan
2
3
  module Core
3
- module ConfigurationManager
4
-
5
- def self.included(model)
6
- model.send :include, Slf4r::Logger
7
- model.after_save :fire_on_change
8
- raise "configuration class must have instance method" unless model.respond_to? :instance
9
- model.class_eval do
10
- class << self
11
- alias :instance_old :instance
12
- def instance
13
- Thread.current[:ixtlan_configuration] ||= instance_old
4
+ module Configuration
5
+ module Module
6
+ def self.included(model)
7
+ raise "configuration class must have instance method" unless model.respond_to? :instance
8
+ model.class_eval do
9
+ class << self
10
+ alias :instance_old :instance
11
+ def instance
12
+ Thread.current[:ixtlan_configuration] ||= instance_old
13
+ end
14
+ def clear_instance
15
+ Thread.current[:ixtlan_configuration] = nil
16
+ end
14
17
  end
15
- def clear_instance
16
- Thread.current[:ixtlan_configuration] = nil
18
+ end
19
+ end
20
+ end
21
+
22
+ class Manager
23
+
24
+ include Slf4r::Logger
25
+
26
+ private
27
+
28
+ def self.registry
29
+ @registry ||= {}
30
+ end
31
+
32
+ def registry
33
+ self.class.registry
34
+ end
35
+
36
+ def model
37
+ unless @model
38
+ if @model_name
39
+ @model = @model_name.constantize
40
+ else
41
+ @model = ::Configuration
17
42
  end
43
+ @model.send :include, Module unless @model.respond_to? :clear_instance
18
44
  end
45
+ @model
46
+ end
19
47
 
20
- private
21
- def self.registry
22
- @registry ||= {}
48
+ public
49
+
50
+ def setup(model)
51
+ if model
52
+ @model_name = model.to_s.classify
23
53
  end
24
54
  end
25
- end
26
-
27
- def register(name, &block)
28
- raise "need block" unless block
29
- logger.info{"register config for: #{name}"}
30
- registry[name.to_sym] = block
31
- end
32
-
33
- def fire_on_change
34
- registry.each do |name, callback|
35
- logger.debug{ "configure #{name}" }
36
- callback.call(self)
55
+
56
+ def register(name, &block)
57
+ raise "need block" unless block
58
+ logger.info{"register config for: #{name}"}
59
+ registry[name.to_sym] = block
60
+ end
61
+
62
+ def cleanup
63
+ model.clear_instance
64
+ end
65
+
66
+ def configure
67
+ registry.each do |name, callback|
68
+ logger.debug{ "configure #{name}" }
69
+ callback.call(model.instance)
70
+ end
37
71
  end
38
- end
39
-
40
- private
41
-
42
- def registry
43
- self.class.registry
44
72
  end
45
73
  end
46
74
  end
@@ -1,16 +1,16 @@
1
1
  module Ixtlan
2
2
  module Core
3
3
  class ConfigurationRack
4
- def initialize(app)
4
+ def initialize(app, config_manager)
5
5
  @app = app
6
+ @manager = config_manager
6
7
  end
7
8
 
8
9
  def call(env)
9
- model = Rails.application.config.configuration_model
10
10
  # configure all registered components with current config
11
- model.instance.fire_on_change if model
11
+ @manager.configure
12
12
  result = @app.call(env)
13
- model.clear_instance if model
13
+ @manager.cleanup
14
14
  result
15
15
  end
16
16
 
@@ -22,7 +22,7 @@ module Ixtlan
22
22
  alias :available_views_old :available_views
23
23
  def available_views
24
24
  if options[:singleton]
25
- %w(new create edit show destroy _form)
25
+ %w(edit show _form)
26
26
  else
27
27
  available_views_old
28
28
  end
@@ -47,22 +47,20 @@ module Ixtlan
47
47
  end
48
48
 
49
49
  config.before_initialize do |app|
50
- app.config.class.class_eval do
51
- attr_accessor :configuration_model
52
- def configuration_model=(clazz)
53
- clazz.send(:include, Ixtlan::Core::ConfigurationManager) #unless clazz.kind_of?(Ixtlan::Core::ConfigurationManager)
54
- @configuration_model = clazz
55
- end
56
- end
50
+ app.config.configuration_manager = Configuration::Manager.new
51
+
57
52
  ::ActionController::Base.send(:include, Ixtlan::Core::ExtraHeaders)
58
53
  ::ActionController::Base.send(:include, Ixtlan::Core::XFrameHeaders)
59
54
  ::ActionController::Base.send(:include, Ixtlan::Core::XContentTypeHeaders)
60
55
  ::ActionController::Base.send(:include, Ixtlan::Core::XXssProtectionHeaders)
61
56
  ::ActionController::Base.send(:include, Ixtlan::Core::CacheHeaders)
62
57
 
63
- app.config.middleware.use Ixtlan::Core::ConfigurationRack
58
+ app.config.middleware.use(Ixtlan::Core::ConfigurationRack, app.config.configuration_manager)
64
59
  end
60
+
65
61
  config.after_initialize do |app|
62
+ app.config.configuration_manager.setup(app.config.configuration_model) if app.config.respond_to? :configuration_model
63
+
66
64
  if defined? ::DataMapper
67
65
 
68
66
  ::DataMapper::Resource.send(:include,
@@ -1,5 +1,6 @@
1
1
  require 'ixtlan/core/configuration_manager'
2
2
  require 'slf4r/ruby_logger'
3
+ require 'active_support/core_ext/string'
3
4
 
4
5
  class ConfigModel
5
6
 
@@ -25,19 +26,23 @@ class ConfigModel
25
26
  end
26
27
  end
27
28
 
28
- describe Ixtlan::Core::ConfigurationManager do
29
+ describe Ixtlan::Core::Configuration::Manager do
29
30
 
30
31
  before :all do
31
- ConfigModel.send :include, Ixtlan::Core::ConfigurationManager
32
+ ConfigModel.send :include, Ixtlan::Core::Configuration::Module
32
33
  end
33
34
 
34
35
  it "should register listeners and fire change events" do
35
36
  count = 0
36
- ConfigModel.instance.register("counter") do
37
+ clazz = nil
38
+ subject.register("counter") do |c|
37
39
  count += 1
40
+ clazz = c.class
38
41
  end
39
- ConfigModel.instance.save
42
+ subject.setup(:config_model)
43
+ subject.configure
40
44
  count.should == 1
45
+ clazz.should == ConfigModel
41
46
  end
42
47
 
43
48
  it "should use instance method only once per thread" do
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: ixtlan-core
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.6.1
5
+ version: 0.7.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - mkristian
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-10-15 00:00:00 +05:30
13
+ date: 2011-11-04 00:00:00 +05:30
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency