Class: MarkMapper::Plugins::Keys::Key
- Defined in:
- lib/mark_mapper/plugins/keys/key.rb
Constant Summary collapse
- ID_STR =
'_id'- RESERVED_KEYS =
%w( id class object_id )
Instance Attribute Summary collapse
-
#abbr ⇒ Object
Returns the value of attribute abbr.
-
#accessors ⇒ Object
Returns the value of attribute accessors.
-
#default ⇒ Object
Returns the value of attribute default.
-
#ivar ⇒ Object
Returns the value of attribute ivar.
-
#name ⇒ Object
Returns the value of attribute name.
-
#options ⇒ Object
Returns the value of attribute options.
-
#type ⇒ Object
Returns the value of attribute type.
Instance Method Summary collapse
- #==(other) ⇒ Object
- #any_accessor?(arr_opt = []) ⇒ Boolean
- #default? ⇒ Boolean
- #default_value ⇒ Object
- #dynamic? ⇒ Boolean
- #embeddable? ⇒ Boolean
- #get(value) ⇒ Object
-
#initialize(*args) ⇒ Key
constructor
A new instance of Key.
- #number? ⇒ Boolean
- #persisted_name ⇒ Object
- #predicate_accessor? ⇒ Boolean
- #read_accessor? ⇒ Boolean
- #reserved_name? ⇒ Boolean
- #set(value) ⇒ Object
- #valid_ruby_name? ⇒ Boolean
- #write_accessor? ⇒ Boolean
Constructor Details
#initialize(*args) ⇒ Key
Returns a new instance of Key.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 10 def initialize(*args) = args. @name, @type = args.shift.to_s, args.shift self. = ( || {}).symbolize_keys @dynamic = !![:__dynamic] = type.respond_to?(:embeddable?) ? type. : false @is_id = @name == ID_STR @typecast = [:typecast] @accessors = Array([:accessors]).compact.map &:to_s @has_default = !!.key?(:default) self.default = self.[:default] if default? if abbr = [:abbr] || [:alias] || [:field_name] @abbr = abbr.to_s elsif @name.match(/^[A-Z]/) and !dynamic? @abbr = @name @name = @name.gsub(/^([A-Z])/) {|m| m.downcase } Kernel.warn "Key names may not start with uppercase letters. If your field starts " + "with an uppercase letter, use :field_name to specify the real field name. " + "Accessors called `#{@name}` have been created instead." end @ivar = :"@#{name}" if valid_ruby_name? validate_key_name! unless dynamic? or !any_accessor? end |
Instance Attribute Details
#abbr ⇒ Object
Returns the value of attribute abbr.
6 7 8 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 6 def abbr @abbr end |
#accessors ⇒ Object
Returns the value of attribute accessors.
6 7 8 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 6 def accessors @accessors end |
#default ⇒ Object
Returns the value of attribute default.
6 7 8 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 6 def default @default end |
#ivar ⇒ Object
Returns the value of attribute ivar.
6 7 8 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 6 def ivar @ivar end |
#name ⇒ Object
Returns the value of attribute name.
6 7 8 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 6 def name @name end |
#options ⇒ Object
Returns the value of attribute options.
6 7 8 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 6 def end |
#type ⇒ Object
Returns the value of attribute type.
6 7 8 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 6 def type @type end |
Instance Method Details
#==(other) ⇒ Object
39 40 41 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 39 def ==(other) @name == other.name && @type == other.type && @abbr == other.abbr end |
#any_accessor?(arr_opt = []) ⇒ Boolean
113 114 115 116 117 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 113 def any_accessor?(arr_opt = []) return true if @accessors.empty? return false unless (@accessors & ["skip", "none"]).empty? return !(@accessors & arr_opt).empty? end |
#default? ⇒ Boolean
51 52 53 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 51 def default? @has_default end |
#default_value ⇒ Object
81 82 83 84 85 86 87 88 89 90 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 81 def default_value return unless default? if default.instance_of? Proc type.to_marklogic default.call else # Using Marshal is easiest way to get a copy of mutable objects # without getting an error on immutable objects type.to_marklogic Marshal.load(Marshal.dump(default)) end end |
#dynamic? ⇒ Boolean
55 56 57 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 55 def dynamic? @dynamic end |
#get(value) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 59 def get(value) # Special Case: Generate default _id on access value = default_value if @is_id and !value if @typecast klass = typecast_class # Don't make this lookup on every call type.from_marklogic(value).map { |v| klass.from_marklogic(v) } else type.from_marklogic(value) end end |
#number? ⇒ Boolean
47 48 49 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 47 def number? type == Integer || type == Float end |
#persisted_name ⇒ Object
35 36 37 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 35 def persisted_name @abbr || @name end |
#predicate_accessor? ⇒ Boolean
109 110 111 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 109 def predicate_accessor? any_accessor? ["present", "predicate", "boolean"] end |
#read_accessor? ⇒ Boolean
101 102 103 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 101 def read_accessor? any_accessor? ["read"] end |
#reserved_name? ⇒ Boolean
97 98 99 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 97 def reserved_name? RESERVED_KEYS.include?(@name) end |
#set(value) ⇒ Object
71 72 73 74 75 76 77 78 79 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 71 def set(value) # Avoid tap here so we don't have to create a block binding. values = type.to_marklogic(value) if @typecast values.map { |v| typecast_class.to_marklogic(v) } else values end end |
#valid_ruby_name? ⇒ Boolean
92 93 94 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 92 def valid_ruby_name? !!@name.match(/\A[a-z_][a-z0-9_]*\z/i) end |
#write_accessor? ⇒ Boolean
105 106 107 |
# File 'lib/mark_mapper/plugins/keys/key.rb', line 105 def write_accessor? any_accessor? ["write"] end |