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