axle_attributes 1.13.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +4 -0
- data/.travis.yml +16 -0
- data/Gemfile +15 -0
- data/README.md +10 -0
- data/Rakefile +18 -0
- data/app/models/attribute_customization.rb +7 -0
- data/app/models/attribute_customization/local_cache.rb +28 -0
- data/app/models/attribute_mapping.rb +15 -0
- data/app/models/attribute_mapping/local_cache.rb +40 -0
- data/axle_attributes.gemspec +22 -0
- data/bin/rails +8 -0
- data/db/migrate/20131118042651_create_attribute_customizations.rb +16 -0
- data/db/migrate/20131121013237_create_attribute_mappings.rb +17 -0
- data/db/migrate/20151120160522_add_editable_to_attribute_customizations.rb +7 -0
- data/lib/axle_attributes.rb +30 -0
- data/lib/axle_attributes/child_definition.rb +42 -0
- data/lib/axle_attributes/conversions.rb +36 -0
- data/lib/axle_attributes/definition.rb +118 -0
- data/lib/axle_attributes/definition/callbacks.rb +34 -0
- data/lib/axle_attributes/definition/customization.rb +51 -0
- data/lib/axle_attributes/definition/formatted.rb +57 -0
- data/lib/axle_attributes/definition/indexed.rb +41 -0
- data/lib/axle_attributes/definition/mappings.rb +48 -0
- data/lib/axle_attributes/dumper.rb +54 -0
- data/lib/axle_attributes/engine.rb +4 -0
- data/lib/axle_attributes/format.rb +74 -0
- data/lib/axle_attributes/has_attributes.rb +104 -0
- data/lib/axle_attributes/has_attributes/json_reader.rb +87 -0
- data/lib/axle_attributes/model.rb +34 -0
- data/lib/axle_attributes/null_definition.rb +11 -0
- data/lib/axle_attributes/parent_definition.rb +37 -0
- data/lib/axle_attributes/provided.rb +67 -0
- data/lib/axle_attributes/regex.rb +4 -0
- data/lib/axle_attributes/segmented.rb +30 -0
- data/lib/axle_attributes/serializations.rb +147 -0
- data/lib/axle_attributes/serializations/builder/serialization.rb +83 -0
- data/lib/axle_attributes/serializations/builder/serialize_many.rb +17 -0
- data/lib/axle_attributes/serializations/builder/serialize_one.rb +7 -0
- data/lib/axle_attributes/serializations/reflection.rb +40 -0
- data/lib/axle_attributes/serializations/serialization.rb +88 -0
- data/lib/axle_attributes/serializations/serialize_many.rb +88 -0
- data/lib/axle_attributes/serializations/serialize_one.rb +34 -0
- data/lib/axle_attributes/serialized_child.rb +58 -0
- data/lib/axle_attributes/validations.rb +29 -0
- data/lib/axle_attributes/versioned.rb +21 -0
- data/test/dummy/README.rdoc +6 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/images/.keep +0 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/controllers/concerns/.keep +0 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/mailers/.keep +0 -0
- data/test/dummy/app/models/.keep +0 -0
- data/test/dummy/app/models/concerns/.keep +0 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +12 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +13 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +29 -0
- data/test/dummy/config/environments/production.rb +80 -0
- data/test/dummy/config/environments/test.rb +38 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +12 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +56 -0
- data/test/dummy/db/schema.rb +50 -0
- data/test/dummy/lib/assets/.keep +0 -0
- data/test/dummy/log/.keep +0 -0
- data/test/dummy/public/404.html +58 -0
- data/test/dummy/public/422.html +58 -0
- data/test/dummy/public/500.html +57 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/factories/all.rb +14 -0
- data/test/helper.rb +25 -0
- data/test/lib/child_definition_test.rb +43 -0
- data/test/lib/conversions_test.rb +39 -0
- data/test/lib/definition/customization_test.rb +36 -0
- data/test/lib/definition/formatted_test.rb +75 -0
- data/test/lib/definition/indexed_test.rb +57 -0
- data/test/lib/definition/mappings_test.rb +26 -0
- data/test/lib/definition_test.rb +84 -0
- data/test/lib/dumper_test.rb +38 -0
- data/test/lib/format_test.rb +64 -0
- data/test/lib/has_attributes/json_reader_test.rb +46 -0
- data/test/lib/has_attributes_test.rb +69 -0
- data/test/lib/model_test.rb +44 -0
- data/test/lib/null_definition_test.rb +27 -0
- data/test/lib/parent_definition_test.rb +75 -0
- data/test/lib/provided_test.rb +46 -0
- data/test/lib/segmented_test.rb +27 -0
- data/test/lib/serializations/reflection_test.rb +24 -0
- data/test/lib/serializations/serialize_many_test.rb +194 -0
- data/test/lib/serializations/serialize_one_test.rb +122 -0
- data/test/lib/serializations_test.rb +24 -0
- data/test/lib/serialized_child_test.rb +91 -0
- data/test/lib/timestamp_attributes_test.rb +14 -0
- data/test/lib/validations_test.rb +8 -0
- data/test/lib/versioned_test.rb +35 -0
- data/test/models/attribute_customization/local_cache_test.rb +16 -0
- data/test/models/attribute_customization_test.rb +8 -0
- data/test/models/attribute_mapping/local_cache_test.rb +31 -0
- data/test/models/attribute_mapping_test.rb +20 -0
- data/test/support/business.rb +22 -0
- data/test/support/pg.rb +9 -0
- data/test/support/vegetable.rb +8 -0
- metadata +215 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d25fdf60b1d16bd313d249594d4347b277dd304e
|
4
|
+
data.tar.gz: 5bb4786bc0b1e5ad172fbaf743077fabd08d4fc1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 23b04c254bbc1003e231301531ea18e78a89d3b8986391927fe79abb037b2c53282aefa4e2a9370502502d53bc9f4b349b1c6bca9e22b33e17c880dfe8d07160
|
7
|
+
data.tar.gz: a7d1c499bda8c070077a5318493ad16f731dd300eff0aa8595e487fa9ccc96fb958c2921b3fe211320d499e6d1266a1da4cf605a5168e864e0f954f555b9ec37
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
language: ruby
|
2
|
+
rvm: 2.2.2
|
3
|
+
sudo: false
|
4
|
+
cache: bundler
|
5
|
+
addons:
|
6
|
+
postgresql: '9.4'
|
7
|
+
env:
|
8
|
+
global:
|
9
|
+
secure: KODrG44n8gXbtBJc+8U2KtMsVlG/SLgddpR2AquKbYI/ZKe1xsTkb79Qdnh1jBVWdVcUb1DCbxnPH7dt9aoAsiqwZdqc9Tz87EAFv3vM0EnGITBUWM5glsohBriE1+c8kZRh/9ciH4c+SvnwyJKQe/ON9I+He6o+luyZVxvBEQg=
|
10
|
+
|
11
|
+
before_script:
|
12
|
+
- bundle exec rake app:db:setup
|
13
|
+
|
14
|
+
after_success:
|
15
|
+
- if [[ -n "$TRAVIS_TAG" ]]; then export GEM_FILENAME=$(gem build axle_attributes.gemspec | grep File | awk '{print $2}'); fi
|
16
|
+
- if [[ -n "$TRAVIS_TAG" ]]; then curl -F package=@$GEM_FILENAME $GEMFURY_REPO; fi
|
data/Gemfile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
gemspec
|
2
|
+
|
3
|
+
gem 'superstore', github: 'data-axle/superstore'
|
4
|
+
|
5
|
+
source 'http://rubygems.org' do
|
6
|
+
group :test do
|
7
|
+
gem 'rake'
|
8
|
+
gem 'pg'
|
9
|
+
gem 'factory_girl'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
source 'https://Wp3MVhqmqjJmqddBEsSG@repo.fury.io/dataaxle' do
|
14
|
+
gem 'axle_traveller'
|
15
|
+
end
|
data/README.md
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
|
3
|
+
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
4
|
+
load 'rails/tasks/engine.rake'
|
5
|
+
|
6
|
+
Bundler::GemHelper.install_tasks
|
7
|
+
|
8
|
+
desc 'Default: run unit tests.'
|
9
|
+
task default: :test
|
10
|
+
|
11
|
+
require 'rake/testtask'
|
12
|
+
desc 'Test.'
|
13
|
+
Rake::TestTask.new(:test) do |t|
|
14
|
+
t.libs << 'lib'
|
15
|
+
t.libs << 'test'
|
16
|
+
t.pattern = 'test/**/*_test.rb'
|
17
|
+
t.verbose = true
|
18
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class AttributeCustomization
|
2
|
+
module LocalCache
|
3
|
+
class NamespaceCache < Struct.new(:namespace)
|
4
|
+
include Traveller::LocalCache
|
5
|
+
|
6
|
+
def fetch_value
|
7
|
+
AttributeCustomization.where(namespace: namespace).index_by(&:name)
|
8
|
+
end
|
9
|
+
|
10
|
+
def cache_name
|
11
|
+
"attribute_customizations_#{namespace}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
extend ActiveSupport::Concern
|
16
|
+
|
17
|
+
included do
|
18
|
+
after_save { self.class.namespace_cache_for(namespace).expire! }
|
19
|
+
after_destroy { self.class.namespace_cache_for(namespace).expire! }
|
20
|
+
end
|
21
|
+
|
22
|
+
module ClassMethods
|
23
|
+
def namespace_cache_for(namespace)
|
24
|
+
(@namespace_cache ||= {})[namespace] ||= NamespaceCache.new(namespace)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class AttributeMapping < ActiveRecord::Base
|
2
|
+
include AttributeMapping::LocalCache
|
3
|
+
|
4
|
+
def definition
|
5
|
+
target_class.attributes[attribute_name]
|
6
|
+
end
|
7
|
+
|
8
|
+
def target_class
|
9
|
+
@target_class ||= namespace.constantize
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_option
|
13
|
+
[label, value]
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class AttributeMapping
|
2
|
+
module LocalCache
|
3
|
+
class MappingCache < Struct.new(:namespace)
|
4
|
+
include Traveller::LocalCache
|
5
|
+
|
6
|
+
def fetch_value
|
7
|
+
sql = %{
|
8
|
+
SELECT attribute_name, value, label
|
9
|
+
FROM attribute_mappings
|
10
|
+
WHERE namespace = #{AttributeMapping.connection.quote(namespace)}
|
11
|
+
ORDER BY value;
|
12
|
+
}.squish!
|
13
|
+
|
14
|
+
AttributeMapping.connection.select_rows(sql).each_with_object({}) do |a, result|
|
15
|
+
name, value, label = a
|
16
|
+
result[name] ||= {}
|
17
|
+
result[name][value] = label
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def cache_name
|
22
|
+
"attribute_mapping_#{namespace}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
extend ActiveSupport::Concern
|
27
|
+
|
28
|
+
included do
|
29
|
+
after_save { self.class.cached_mapping_for(namespace).expire! }
|
30
|
+
after_destroy { self.class.cached_mapping_for(namespace).expire! }
|
31
|
+
end
|
32
|
+
|
33
|
+
module ClassMethods
|
34
|
+
def cached_mapping_for(namespace)
|
35
|
+
@cached_mappings ||= {}
|
36
|
+
@cached_mappings[namespace] ||= MappingCache.new(namespace)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = 'axle_attributes'
|
5
|
+
s.version = "1.13.2"
|
6
|
+
s.summary = 'Attribute framework for Data Axle'
|
7
|
+
s.description = 'Why'
|
8
|
+
|
9
|
+
s.required_ruby_version = '>= 2.0.0'
|
10
|
+
s.required_rubygems_version = '>= 1.8.0'
|
11
|
+
|
12
|
+
s.author = 'Matthew Higgins'
|
13
|
+
s.email = 'developer@matthewhiggins.com'
|
14
|
+
s.homepage = 'http://github.com/data-axle/axle_attributes'
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
|
18
|
+
s.add_dependency "rails", ">= 4.0"
|
19
|
+
s.add_dependency 'elastic_record'
|
20
|
+
s.add_dependency 'axle_traveller'
|
21
|
+
s.add_dependency 'superstore', '>= 1.0.10'
|
22
|
+
end
|
data/bin/rails
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# This command will automatically be run when you run "rails" with Rails 4 gems installed from the root of your application.
|
3
|
+
|
4
|
+
ENGINE_ROOT = File.expand_path('../..', __FILE__)
|
5
|
+
ENGINE_PATH = File.expand_path('../../lib/axle_attributes/engine', __FILE__)
|
6
|
+
|
7
|
+
require 'rails/all'
|
8
|
+
require 'rails/engine/commands'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class CreateAttributeCustomizations < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :attribute_customizations do |t|
|
4
|
+
t.string :namespace, null: false
|
5
|
+
t.string :name, null: false
|
6
|
+
t.text :aliases_csv
|
7
|
+
t.date :deprecated_on
|
8
|
+
t.string :display_name
|
9
|
+
t.text :description
|
10
|
+
t.string :instructions
|
11
|
+
t.text :notes
|
12
|
+
t.index [:namespace, :name], unique: true
|
13
|
+
t.timestamps
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class CreateAttributeMappings < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :attribute_mappings do |t|
|
4
|
+
t.string :label
|
5
|
+
t.string :value
|
6
|
+
t.string :attribute_name, null: false
|
7
|
+
t.string :namespace, null: false
|
8
|
+
t.string :default # ?
|
9
|
+
t.integer :mapped_value # ?
|
10
|
+
t.float :fill_rate # ?
|
11
|
+
t.string :status # ?
|
12
|
+
t.timestamps
|
13
|
+
|
14
|
+
t.index [:namespace, :attribute_name, :value], name: 'index_attribute_mappings'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'active_support/dependencies/autoload'
|
2
|
+
require 'active_support/concern'
|
3
|
+
|
4
|
+
require 'active_model'
|
5
|
+
require 'elastic_record'
|
6
|
+
require 'superstore'
|
7
|
+
require 'axle_traveller'
|
8
|
+
|
9
|
+
require 'axle_attributes/engine'
|
10
|
+
|
11
|
+
module AxleAttributes
|
12
|
+
extend ActiveSupport::Autoload
|
13
|
+
|
14
|
+
autoload :ChildDefinition
|
15
|
+
autoload :Conversions
|
16
|
+
autoload :Definition
|
17
|
+
autoload :Dumper
|
18
|
+
autoload :Format
|
19
|
+
autoload :HasAttributes
|
20
|
+
autoload :Model
|
21
|
+
autoload :NullDefinition
|
22
|
+
autoload :ParentDefinition
|
23
|
+
autoload :Provided
|
24
|
+
autoload :Regex
|
25
|
+
autoload :Segmented
|
26
|
+
autoload :Serializations
|
27
|
+
autoload :SerializedChild
|
28
|
+
autoload :Validations
|
29
|
+
autoload :Versioned
|
30
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module AxleAttributes
|
2
|
+
class ChildDefinition < ::AxleAttributes::Definition
|
3
|
+
attr_accessor :nested_path
|
4
|
+
|
5
|
+
setup do
|
6
|
+
setup_storage! unless name == 'id'
|
7
|
+
setup_versioning!
|
8
|
+
end
|
9
|
+
|
10
|
+
def display_name
|
11
|
+
human = model.model_name.human
|
12
|
+
human = human.pluralize if nested_path
|
13
|
+
"#{human}: #{super}"
|
14
|
+
end
|
15
|
+
|
16
|
+
def canonical_name
|
17
|
+
@canonical_name ||= "#{model.model_name.send(nested_path ? :plural : :singular)}.#{name}"
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def setup_storage!
|
23
|
+
if type
|
24
|
+
storage_options = case type
|
25
|
+
when :text
|
26
|
+
{type: :string}
|
27
|
+
else
|
28
|
+
options.slice(:type, :default)
|
29
|
+
end
|
30
|
+
|
31
|
+
model.attribute(name, storage_options)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def setup_versioning!
|
36
|
+
if versioned?
|
37
|
+
model.add_versioned_attribute name
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module AxleAttributes
|
2
|
+
module Conversions
|
3
|
+
def self.included(base)
|
4
|
+
if base.is_a? Class
|
5
|
+
base.class_eval do
|
6
|
+
cattr_accessor :target_class
|
7
|
+
def self.use_target_class(target_class)
|
8
|
+
self.target_class = target_class
|
9
|
+
end
|
10
|
+
end
|
11
|
+
else
|
12
|
+
base.class_eval do
|
13
|
+
mattr_accessor :target_class
|
14
|
+
def self.use_target_class(target_class)
|
15
|
+
self.target_class = target_class
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class ConversionError < RuntimeError; end
|
22
|
+
|
23
|
+
module_function
|
24
|
+
|
25
|
+
def to_definition(*args)
|
26
|
+
case args.first
|
27
|
+
when AxleAttributes::Definition
|
28
|
+
args.first
|
29
|
+
when String
|
30
|
+
target_class.attributes[args.first] || AxleAttributes::NullDefinition.new(target_class, args.first)
|
31
|
+
else
|
32
|
+
raise ConversionError.new "Can't convert #{args}.inspect to Field"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
require 'axle_attributes/definition/callbacks'
|
2
|
+
require 'axle_attributes/definition/customization'
|
3
|
+
require 'axle_attributes/definition/formatted'
|
4
|
+
require 'axle_attributes/definition/indexed'
|
5
|
+
require 'axle_attributes/definition/mappings'
|
6
|
+
|
7
|
+
module AxleAttributes
|
8
|
+
class Definition
|
9
|
+
include AxleAttributes::Definition::Callbacks
|
10
|
+
|
11
|
+
include AxleAttributes::Definition::Indexed
|
12
|
+
include AxleAttributes::Definition::Mappings
|
13
|
+
include AxleAttributes::Definition::Formatted
|
14
|
+
include AxleAttributes::Definition::Customization
|
15
|
+
|
16
|
+
attr_accessor :model, :name, :options
|
17
|
+
delegate :description, to: :customization, allow_nil: true
|
18
|
+
|
19
|
+
def initialize(model, name, options = {})
|
20
|
+
@model = model
|
21
|
+
@name = name.to_s
|
22
|
+
@options = options
|
23
|
+
end
|
24
|
+
|
25
|
+
class << self
|
26
|
+
def reset_caches
|
27
|
+
cached_customizations.clear
|
28
|
+
cached_attribute_mappings.clear
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def setup!
|
33
|
+
run_callbacks :setup
|
34
|
+
end
|
35
|
+
|
36
|
+
def canonical_name
|
37
|
+
name
|
38
|
+
end
|
39
|
+
|
40
|
+
FILTER_CONTROL_DEFAULTS = {
|
41
|
+
float: 'range',
|
42
|
+
integer: 'range',
|
43
|
+
string: 'text',
|
44
|
+
text: 'text',
|
45
|
+
boolean: 'radio',
|
46
|
+
time: 'daterange'
|
47
|
+
}
|
48
|
+
def filter_control
|
49
|
+
if mapping_model
|
50
|
+
mapping_model.respond_to?(:code_hierarchy_lengths) ? 'hierarchy' : 'combo'
|
51
|
+
elsif mappings.any?
|
52
|
+
'checkbox'
|
53
|
+
else
|
54
|
+
FILTER_CONTROL_DEFAULTS.fetch(type, 'text')
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
EDIT_CONTROL_DEFAULTS = {
|
59
|
+
float: 'text',
|
60
|
+
integer: 'text',
|
61
|
+
text: 'textarea',
|
62
|
+
string: 'text',
|
63
|
+
time: 'filter',
|
64
|
+
boolean: 'combo',
|
65
|
+
}
|
66
|
+
def edit_control
|
67
|
+
if mappings.any?
|
68
|
+
'combo'
|
69
|
+
else
|
70
|
+
EDIT_CONTROL_DEFAULTS[type]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def aliases
|
75
|
+
result = [name, display_name, options[:mmdb_name], customization.try(:aliases)]
|
76
|
+
result.flatten!
|
77
|
+
result.compact!
|
78
|
+
result
|
79
|
+
end
|
80
|
+
|
81
|
+
def to_param
|
82
|
+
name
|
83
|
+
end
|
84
|
+
|
85
|
+
def namespace
|
86
|
+
model.name
|
87
|
+
end
|
88
|
+
|
89
|
+
def type
|
90
|
+
options[:type]
|
91
|
+
end
|
92
|
+
|
93
|
+
def format
|
94
|
+
options[:format]
|
95
|
+
end
|
96
|
+
|
97
|
+
def readonly?
|
98
|
+
!editable?
|
99
|
+
end
|
100
|
+
|
101
|
+
def editable?
|
102
|
+
editable_customization && !deprecated? && options.fetch(:editable, true)
|
103
|
+
end
|
104
|
+
|
105
|
+
def indexed?
|
106
|
+
options[:index]
|
107
|
+
end
|
108
|
+
|
109
|
+
def versioned?
|
110
|
+
options[:version]
|
111
|
+
end
|
112
|
+
|
113
|
+
def default
|
114
|
+
options[:default]
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
end
|