On Sunday, September 23, 2012 8:11:43 AM UTC-4, Ilia Bylich wrote:
>
> I am not sure that this way is simple. I usually use for gem configuration 
> this code
>
> require 'active_support/configurable'
> module GemModule
>   include ActiveSupport::Configurable
>
>   class << self
>     def setup
>       yield config
>     end
>   end
> end
>
> And then you can write
>
> GemModule.setup do |config|
>   config.option1 = "value1"
>   config.option2 = 2
> end
>
> And
>
> GemModule.config.option1
> # => "value1"
>
> Moreover, you can define method_missing in you module and delegate unknown 
> methods to self.config. Then you will be able to write
> GemModule.option1
> # => "value1"
>
> http://api.rubyonrails.org/classes/ActiveSupport/Configurable.html
>
>
That works, but it has the following disadvantages over the method I 
described:

1. If you use ActiveSupport::Configurable you are tied to using 
activesupport/Rails. Many times you want to write the Gem so that it isn't 
Rails-specific and want to limit dependencies.
2. I know Rails uses the "pass the config into the block thing", but it 
isn't as DRY as not typing "config." before each parameter.
3. By defining the attr_accessors, you limit the chance that a user will 
mistype/misspell a variable.
4. The way you described allows the user to define config parameters with 
procs and lambdas, but the way I describe allows the user to define "config 
parameters" as procs, lambdas, and methods, i.e. the user can actually just 
define a variable as:

def some_variable_name
  # some really involved implementation here, even refactored into various 
methods, etc. in the block.
end

See more at: 
http://stufftohelpyouout.blogspot.com/2012/09/forget-struct-and-openstruct-flexible.html

Hope that helps.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msg/rubyonrails-talk/-/zcMdqXgj6gYJ.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to