configure_me 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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 %>