lib/intercom-rails/config.rb in intercom-rails-0.1.1 vs lib/intercom-rails/config.rb in intercom-rails-0.2.0
- old
+ new
@@ -1,100 +1,92 @@
-module IntercomRails
+class Module
- module Config
+ def config_accessor(*args, &block)
+ config_reader(*args)
+ config_writer(*args, &block)
+ end
- def self.reset!
- [self, InboxConfig].each do |configer|
- configer.instance_variables.each do |var|
- configer.send(:remove_instance_variable, var)
- end
- end
+ def config_reader(name)
+ self.send(:define_singleton_method, name) do
+ instance_variable_get("@#{name}")
end
+ end
- # Your Intercom app_id
- def self.app_id=(value)
- @app_id = value
+ def config_writer(name, &block)
+ self.send(:define_singleton_method, "#{name}=") do |value|
+ block.call(value) if block
+ instance_variable_set("@#{name}", value)
end
+ end
- def self.app_id
- @app_id
- end
+ def config_group(name, &block)
+ camelized_name = name.to_s.split('_').map { |s| s[0].upcase + s[1..-1] }.join('')
+ group = self.const_set(camelized_name, Module.new)
- # Intercom api secret, for secure mode
- def self.api_secret=(value)
- @api_secret = value
+ self.send(:define_singleton_method, name) do
+ group
end
- def self.api_secret
- @api_secret
- end
+ group.instance_eval(&block)
+ end
- # Intercom API key, for some rake tasks
- def self.api_key=(value)
- @api_key = value
- end
+end
- def self.api_key
- @api_key
- end
+module IntercomRails
- # How is the current logged in user accessed in your controllers?
- def self.current_user=(value)
- raise ArgumentError, "current_user should be a Proc" unless value.kind_of?(Proc)
- @current_user = value
- end
+ module Config
- def self.current_user
- @current_user
- end
+ def self.reset!
+ to_reset = self.constants.map {|c| const_get c}
+ to_reset << self
- # What class defines your user model?
- def self.user_model=(value)
- raise ArgumentError, "user_model should be a Proc" unless value.kind_of?(Proc)
- @user_model = value
+ to_reset.each do |configer|
+ configer.instance_variables.each do |var|
+ configer.send(:remove_instance_variable, var)
+ end
+ end
end
+
+ config_accessor :app_id
+ config_accessor :api_secret
+ config_accessor :api_key
- def self.user_model
- @user_model
- end
+ config_group :user do
+ config_accessor :current do |value|
+ raise ArgumentError, "user.current should be a Proc" unless value.kind_of?(Proc)
+ end
- # Widget options
- def self.inbox
- InboxConfig
- end
-
- def self.custom_data=(value)
- raise ArgumentError, "custom_data should be a hash" unless value.kind_of?(Hash)
- unless value.reject { |_,v| v.kind_of?(Proc) || v.kind_of?(Symbol) }.count.zero?
- raise ArgumentError, "all custom_data attributes should be either a Proc or a symbol"
+ config_accessor :model do |value|
+ raise ArgumentError, "user.model should be a Proc" unless value.kind_of?(Proc)
end
- @custom_data = value
+ config_accessor :custom_data do |value|
+ raise ArgumentError, "user.custom_data should be a hash" unless value.kind_of?(Hash)
+ unless value.reject { |_,v| v.kind_of?(Proc) || v.kind_of?(Symbol) }.count.zero?
+ raise ArgumentError, "all custom_data attributes should be either a Proc or a symbol"
+ end
+ end
end
+
+ config_group :company do
+ config_accessor :current do |value|
+ raise ArgumentError, "company.current should be a Proc" unless value.kind_of?(Proc)
+ end
- def self.custom_data
- @custom_data
+ config_accessor :custom_data do |value|
+ raise ArgumentError, "company.custom_data should be a hash" unless value.kind_of?(Hash)
+ unless value.reject { |_,v| v.kind_of?(Proc) || v.kind_of?(Symbol) }.count.zero?
+ raise ArgumentError, "all custom_data attributes should be either a Proc or a symbol"
+ end
+ end
end
- end
+ config_group :inbox do
+ config_accessor :counter
- module InboxConfig
-
- def self.style=(value)
- raise ArgumentError, "inbox.style must be one of :default or :custom" unless [:default, :custom].include?(value)
- @style = value
- end
-
- def self.style
- @style
- end
-
- def self.counter=(value)
- @counter = value
- end
-
- def self.counter
- @counter
+ config_accessor :style do |value|
+ raise ArgumentError, "inbox.style must be one of :default or :custom" unless [:default, :custom].include?(value)
+ end
end
end
end