From 5a956c67e23a11942f8b4b338579176a4f725868 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristijan=20Novoseli=C4=87?= Date: Tue, 17 Mar 2015 14:47:46 +0100 Subject: [PATCH] Field prefix is now configurable --- lib/mongoid/enum.rb | 3 ++- lib/mongoid/enum/configuration.rb | 19 +++++++++++++++++ spec/mongoid/configuration_spec.rb | 11 ++++++++++ spec/mongoid/enum_spec.rb | 33 ++++++++++++++++++++++++++++++ 4 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 lib/mongoid/enum/configuration.rb create mode 100644 spec/mongoid/configuration_spec.rb diff --git a/lib/mongoid/enum.rb b/lib/mongoid/enum.rb index ac9a5f0..19b78b1 100644 --- a/lib/mongoid/enum.rb +++ b/lib/mongoid/enum.rb @@ -1,5 +1,6 @@ require "mongoid/enum/version" require "mongoid/enum/validators/multiple_validator" +require "mongoid/enum/configuration" module Mongoid module Enum @@ -7,7 +8,7 @@ module Mongoid module ClassMethods def enum(name, values, options = {}) - field_name = :"_#{name}" + field_name = :"#{Mongoid::Enum.configuration.field_name_prefix}#{name}" options = default_options(values).merge(options) set_values_constant name, values diff --git a/lib/mongoid/enum/configuration.rb b/lib/mongoid/enum/configuration.rb new file mode 100644 index 0000000..63a2e82 --- /dev/null +++ b/lib/mongoid/enum/configuration.rb @@ -0,0 +1,19 @@ +module Mongoid + module Enum + class Configuration + attr_accessor :field_name_prefix + + def initialize + self.field_name_prefix = '_' + end + end + + def self.configuration + @configuration ||= Configuration.new + end + + def self.configure + yield(configuration) if block_given? + end + end +end diff --git a/spec/mongoid/configuration_spec.rb b/spec/mongoid/configuration_spec.rb new file mode 100644 index 0000000..9ce7987 --- /dev/null +++ b/spec/mongoid/configuration_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe Mongoid::Enum::Configuration do + subject { Mongoid::Enum::Configuration.new } + + describe "field_name_prefix" do + it "has '_' as default value" do + expect(subject.field_name_prefix).to eq '_' + end + end +end diff --git a/spec/mongoid/enum_spec.rb b/spec/mongoid/enum_spec.rb index 6d49ceb..1b70998 100644 --- a/spec/mongoid/enum_spec.rb +++ b/spec/mongoid/enum_spec.rb @@ -1,4 +1,5 @@ require 'spec_helper' +require 'mongoid/enum/configuration' class User include Mongoid::Document @@ -21,6 +22,23 @@ describe Mongoid::Enum do expect(klass).to have_field(field_name) end + it "uses prefix defined in configuration" do + old_field_name_prefix = Mongoid::Enum.configuration.field_name_prefix + Mongoid::Enum.configure do |config| + config.field_name_prefix = '___' + end + UserWithoutPrefix = Class.new do + include Mongoid::Document + include Mongoid::Enum + + enum :status, [:awaiting_approval, :approved, :banned] + end + expect(UserWithoutPrefix).to have_field '___status' + Mongoid::Enum.configure do |config| + config.field_name_prefix = old_field_name_prefix + end + end + it "is aliased" do expect(instance).to respond_to alias_name expect(instance).to respond_to :"#{alias_name}=" @@ -174,4 +192,19 @@ describe Mongoid::Enum do end end end + + describe ".configuration" do + it "returns Configuration object" do + expect(Mongoid::Enum.configuration).to be_instance_of Mongoid::Enum::Configuration + end + it "returns same object when called multiple times" do + expect(Mongoid::Enum.configuration).to be Mongoid::Enum.configuration + end + end + + describe ".configure" do + it "yields configuration if block is given" do + expect { |b| Mongoid::Enum.configure &b }.to yield_with_args Mongoid::Enum.configuration + end + end end