configure_me 0.3.2 → 0.4.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.
Files changed (40) hide show
  1. data/.rspec +1 -1
  2. data/{README.md → README.rdoc} +7 -7
  3. data/Rakefile +1 -7
  4. data/configure_me.gemspec +3 -7
  5. data/lib/configure_me/attribute_methods.rb +88 -0
  6. data/lib/configure_me/base.rb +58 -62
  7. data/lib/configure_me/caching.rb +19 -14
  8. data/lib/configure_me/identity.rb +15 -0
  9. data/lib/configure_me/loading.rb +57 -0
  10. data/lib/configure_me/naming.rb +18 -0
  11. data/lib/configure_me/nesting.rb +30 -24
  12. data/lib/configure_me/persistence.rb +29 -0
  13. data/lib/configure_me/persisting.rb +33 -20
  14. data/lib/configure_me/setting.rb +61 -12
  15. data/lib/configure_me/validations.rb +33 -0
  16. data/lib/configure_me/version.rb +1 -1
  17. data/lib/configure_me.rb +25 -3
  18. data/lib/generators/configure_me/setup_generator.rb +21 -0
  19. data/lib/generators/configure_me/templates/initializer.rb +1 -0
  20. data/lib/generators/{templates → configure_me/templates}/migration.rb +0 -0
  21. data/lib/generators/{templates/model.rb → configure_me/templates/model.erb} +0 -0
  22. data/lib/generators/configure_me/templates/model.rb +2 -0
  23. data/spec/configure_me/attribute_methods_spec.rb +113 -0
  24. data/spec/configure_me/base_spec.rb +43 -88
  25. data/spec/configure_me/caching_spec.rb +75 -0
  26. data/spec/configure_me/identity_spec.rb +30 -0
  27. data/spec/configure_me/loading_spec.rb +84 -0
  28. data/spec/configure_me/naming_spec.rb +23 -0
  29. data/spec/configure_me/nesting_spec.rb +36 -0
  30. data/spec/configure_me/persistence_spec.rb +62 -0
  31. data/spec/configure_me/persisting_spec.rb +123 -0
  32. data/spec/configure_me/setting_spec.rb +180 -13
  33. data/spec/spec_helper.rb +6 -0
  34. data/spec/support/active_model_lint.rb +16 -0
  35. metadata +52 -81
  36. data/features/memory.feature +0 -16
  37. data/features/step_definitions/base_steps.rb +0 -33
  38. data/lib/configure_me/settings.rb +0 -101
  39. data/lib/generators/configure_me_generator.rb +0 -19
  40. data/lib/generators/templates/initializer.rb +0 -1
@@ -1,33 +0,0 @@
1
- require 'configure_me'
2
-
3
- Given /^a (.*) class that derives from ConfigureMe::Base$/ do |name|
4
- @klass = Class.new(ConfigureMe::Base)
5
- end
6
-
7
- Given /^I add a "([^"]*)" setting with a type of "([^"]*)" and a default of "([^"]*)"$/ do |name, type, default|
8
- @klass.send :setting, name.to_sym, type.to_sym, :default => default
9
- end
10
-
11
- When /^I create an instance of the class$/ do
12
- @obj = @klass.new
13
- end
14
-
15
- When /^I create another instance of the class$/ do
16
- @obj2 = @klass.new
17
- end
18
-
19
- When /^I read the "([^"]*)" setting$/ do |name|
20
- @result = @obj.send name.to_sym
21
- end
22
-
23
- When /^I read the new class's "([^"]*)" setting$/ do |name|
24
- @result = @obj2.send name.to_sym
25
- end
26
-
27
- When /^I set the "([^"]*)" setting to "([^"]*)"$/ do |name, value|
28
- @obj.send "#{name}=".to_sym, value
29
- end
30
-
31
- Then /^the result should be "([^"]*)"$/ do |value|
32
- @result.should eql(value)
33
- end
@@ -1,101 +0,0 @@
1
- require 'active_support/concern'
2
-
3
- module ConfigureMe
4
- module Settings
5
- extend ActiveSupport::Concern
6
-
7
- included do
8
- attribute_method_suffix('', '=')
9
- end
10
-
11
- module ClassMethods
12
- def setting(name, type, options = {})
13
- new_setting = Setting.new(self, name, type, options)
14
- class_settings[name] = new_setting
15
- new_setting.define_methods!
16
- end
17
-
18
- def class_settings
19
- @class_settings ||= {}.with_indifferent_access
20
- end
21
-
22
- def define_attribute_methods(force = false)
23
- return unless class_settings
24
- undefine_attribute_methods if force
25
- super(class_settings.keys)
26
- end
27
- end
28
-
29
- def settings_from_class_settings
30
- self.class.class_settings.inject({}.with_indifferent_access) do |settings, (name, setting)|
31
- settings[name] = setting.default
32
- settings
33
- end
34
- end
35
-
36
- def read_setting(name)
37
- value = nil
38
- if self.class.caching?
39
- value = Rails.cache.read(cache_key(name))
40
- end
41
-
42
- if self.class.persisting? && value.nil?
43
- setting = ConfigureMe.persistence_klass.find_by_key(persistence_key(name))
44
- unless setting.nil?
45
- value = YAML::load(setting.value)
46
- if self.class.caching?
47
- Rails.cache.write(cache_key(name), value)
48
- end
49
- @settings[name.to_sym] = value
50
- end
51
- end
52
-
53
- value = @settings[name.to_sym] if value.nil?
54
- self.class.class_settings[name.to_sym].convert(value)
55
- end
56
-
57
- def write_setting(name, value)
58
- if self.class.class_settings[name]
59
- @settings[name.to_sym] = value
60
- else
61
- raise NoMethodError, "ConfigureMe: Unknown setting: #{name.inspect}"
62
- end
63
-
64
- if self.class.caching?
65
- Rails.cache.write(cache_key(name), value)
66
- end
67
-
68
- if self.class.persisting?
69
- setting = ConfigureMe.persistence_klass.find_or_create_by_key(persistence_key(name))
70
- setting.value = value.to_yaml
71
- setting.save!
72
- end
73
-
74
- end
75
-
76
- protected
77
-
78
- def attribute_method?(name)
79
- self.class.class_settings.key?(name)
80
- end
81
-
82
- private
83
-
84
- def settings=(new_settings)
85
- return unless new_settings.is_a?(Hash)
86
- settings = new_settings.stringify_keys
87
-
88
- settings.each do |k, v|
89
- respond_to?("#{k}=".to_sym) ? send("#{k}=".to_sym, v) : raise(UnknownMethodError, "Unknown setting: #{k}")
90
- end
91
- end
92
-
93
- def attribute(name)
94
- read_setting(name.to_sym)
95
- end
96
-
97
- def attribute=(name, value)
98
- write_setting(name.to_sym, value)
99
- end
100
- end
101
- end
@@ -1,19 +0,0 @@
1
- require 'rails/generators/active_record'
2
-
3
- class ConfigureMeGenerator < ActiveRecord::Generators::Base #Rails::Generators::NamedBase
4
- include Rails::Generators::Migration
5
-
6
- source_root File.expand_path('../templates', __FILE__)
7
-
8
- def generate_model
9
- template 'model.rb', "app/models/#{singular_name}.rb"
10
- end
11
-
12
- def generate_migration
13
- migration_template 'migration.rb', "db/migrate/create_#{plural_name}.rb"
14
- end
15
-
16
- def generate_initializer
17
- template 'initializer.rb', 'config/initializers/init_configure_me.rb'
18
- end
19
- end
@@ -1 +0,0 @@
1
- ConfigureMe.persist_with <%= class_name %>