flex 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.2.0
@@ -5,8 +5,10 @@ require 'multi_json'
5
5
  require 'flex/logger'
6
6
  require 'flex/errors'
7
7
  require 'flex/utils'
8
+
8
9
  require 'flex/structure/indifferent_access'
9
10
  require 'flex/structure/mergeable'
11
+
10
12
  require 'flex/result'
11
13
  require 'flex/result/collection'
12
14
  require 'flex/result/document'
@@ -14,7 +16,9 @@ require 'flex/result/source_document'
14
16
  require 'flex/result/search'
15
17
  require 'flex/result/source_search'
16
18
  require 'flex/result/bulk'
19
+
17
20
  require 'flex/variables'
21
+
18
22
  require 'flex/template/base'
19
23
  require 'flex/template/partial'
20
24
  require 'flex/template'
@@ -22,16 +26,23 @@ require 'flex/template/search'
22
26
  require 'flex/template/slim_search'
23
27
  require 'flex/template/tags'
24
28
  require 'flex/template/info'
25
- require 'flex/class_proxy'
29
+
30
+ require 'flex/model_manager'
31
+
32
+ require 'flex/class_proxy/base'
33
+ require 'flex/class_proxy/loader'
34
+ require 'flex/class_proxy/model_sync'
35
+ require 'flex/class_proxy/model'
36
+ require 'flex/class_proxy/related_model'
37
+
38
+ require 'flex/instance_proxy/base'
39
+ require 'flex/instance_proxy/model'
40
+ require 'flex/instance_proxy/related_model'
41
+
26
42
  require 'flex/loader'
27
- require 'flex/model/manager'
28
43
  require 'flex/related_model'
29
- require 'flex/related_model/class_sync'
30
- require 'flex/related_model/class_proxy'
31
- require 'flex/related_model/instance_proxy'
32
44
  require 'flex/model'
33
- require 'flex/model/class_proxy'
34
- require 'flex/model/instance_proxy'
45
+
35
46
  require 'flex/http_clients/patron'
36
47
  require 'flex/http_clients/rest_client'
37
48
  require 'flex/configuration'
@@ -39,7 +50,9 @@ require 'flex/utility_methods'
39
50
 
40
51
  module Flex
41
52
 
42
- VERSION = File.read(File.expand_path('../../VERSION', __FILE__)).strip
53
+ VERSION = File.read(File.expand_path('../../VERSION', __FILE__)).strip
54
+ LIB_PATH = __FILE__.sub(/flex.rb$/, '')
55
+
43
56
 
44
57
  # The following lines are autogenerated by Flex.info
45
58
 
@@ -0,0 +1,15 @@
1
+ module Flex
2
+ module ClassProxy
3
+
4
+ class Base
5
+ attr_reader :host_class
6
+ attr_accessor :variables
7
+
8
+ def initialize(host_class)
9
+ @host_class = host_class
10
+ @variables = Variables.new
11
+ end
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,102 @@
1
+ module Flex
2
+ module ClassProxy
3
+ class Loader < Base
4
+ attr_reader :templates, :partials
5
+
6
+ include Template::Info
7
+
8
+ def initialize(base)
9
+ super
10
+ @sources = []
11
+ @templates = {}
12
+ @partials = {}
13
+ end
14
+
15
+ # accepts a path to a file or YAML string
16
+ def load_source_for(klass, source, source_vars)
17
+ if source.nil? || source != /\n/
18
+ paths = [ "#{Configuration.flex_dir}/#{source}.yml",
19
+ "#{Configuration.flex_dir}/#{ModelManager.class_name_to_type(host_class.name)}.yml",
20
+ source ]
21
+ source = paths.find {|p| File.exist?(p)}
22
+ end
23
+ raise ArgumentError, "expected a string (got #{source.inspect})." \
24
+ unless source.is_a?(String)
25
+ @sources << [klass, source, source_vars]
26
+ do_load_source(klass, source, source_vars)
27
+ end
28
+
29
+ # loads a Generic Template source
30
+ def load_source(source=nil, source_vars=nil)
31
+ load_source_for(Template, source, source_vars)
32
+ end
33
+
34
+ # loads a Search Template source
35
+ def load_search_source(source=nil, source_vars=nil)
36
+ load_source_for(Template::Search, source, source_vars)
37
+ end
38
+
39
+ # loads a SlimSearch Template source
40
+ def load_slim_search_source(source=nil, source_vars=nil)
41
+ load_source_for(Template::SlimSearch, source, source_vars)
42
+ end
43
+
44
+ # reloads the sources (useful in the console and used internally)
45
+ def reload!
46
+ @sources.each {|k,s,v| do_load_source(k,s,v)}
47
+ end
48
+
49
+ # adds a template instance and defines the template method in the host class
50
+ def add_template(name, template)
51
+ templates[name] = template
52
+ # no define_singleton_method in 1.8.7
53
+ host_class.instance_eval <<-ruby, __FILE__, __LINE__ + 1
54
+ def #{name}(vars={})
55
+ raise ArgumentError, "#{host_class}.#{name} expects a Hash (got \#{vars.inspect})" unless vars.is_a?(Hash)
56
+ #{host_class.respond_to?(:preprocess_variables) && 'preprocess_variables(vars)'}
57
+ flex.templates[:#{name}].render(vars)
58
+ end
59
+ ruby
60
+ end
61
+
62
+ # http://www.elasticsearch.org/guide/reference/api/multi-search.html
63
+ # request may be a hash with the templates names as keys and the variable hash as value
64
+ # or you can also use an array of arrays.
65
+ # The variables are an hash of variables that will be used to render the msearch template
66
+ def multi_search(requests, variables={})
67
+ lines = requests.map { |name, vars| templates[name].to_msearch(vars) }.join()
68
+ template = Template.new('GET', '/<<index>>/<<type>>/_msearch')
69
+ template.send(:do_render, variables.merge(:data => lines)) do |http_response|
70
+ responses = []
71
+ es_response = MultiJson.decode(http_response.body)
72
+ es_response['responses'].each_with_index do |result, i|
73
+ responses << Result.new(templates[requests[i].first], requests[i].last, http_response, result)
74
+ end
75
+ es_response['responses'] = responses
76
+ def es_response.responses
77
+ self['responses']
78
+ end
79
+ es_response
80
+ end
81
+ end
82
+
83
+ private
84
+
85
+ def do_load_source(klass, source, source_vars)
86
+ source = Utils.erb_process(source) unless source.match("\n") # skips non-path
87
+ hash = Utils.data_from_source(source)
88
+ hash.delete('ANCHORS')
89
+ hash.each do |name, structure|
90
+ if name.to_s =~ /^_/ # partial
91
+ partial = Template::Partial.new(structure, self)
92
+ partials[name.to_sym] = partial
93
+ else
94
+ template = klass.new(*structure).setup(self, name, source_vars)
95
+ add_template(name.to_sym, template)
96
+ end
97
+ end
98
+ end
99
+
100
+ end
101
+ end
102
+ end
@@ -1,15 +1,15 @@
1
1
  module Flex
2
- module Model
3
- class ClassProxy < Flex::ClassProxy
2
+ module ClassProxy
3
+ class Model < Base
4
4
 
5
- include RelatedModel::ClassSync
5
+ include ModelSync
6
6
 
7
7
  attr_reader :parent_association, :parent_child_map
8
8
 
9
9
  def initialize(base)
10
10
  super
11
11
  variables.add :index => Configuration.variables[:index],
12
- :type => Manager.class_name_to_type(host_class.name)
12
+ :type => ModelManager.class_name_to_type(host_class.name)
13
13
  end
14
14
 
15
15
  def index
@@ -30,7 +30,7 @@ module Flex
30
30
 
31
31
  def parent(parent_association, map)
32
32
  @parent_association = parent_association
33
- Manager.parent_types |= map.keys.map(&:to_s)
33
+ ModelManager.parent_types |= map.keys.map(&:to_s)
34
34
  self.type = map.values.map(&:to_s)
35
35
  @parent_child_map = map
36
36
  @is_child = true
@@ -1,6 +1,6 @@
1
1
  module Flex
2
- module RelatedModel
3
- module ClassSync
2
+ module ClassProxy
3
+ module ModelSync
4
4
 
5
5
  def self.included(base)
6
6
  base.class_eval do
@@ -12,7 +12,7 @@ module Flex
12
12
  @synced = synced
13
13
  host_class.class_eval do
14
14
  raise NotImplementedError, "the class #{self} must implement :after_save and :after_destroy callbacks" \
15
- unless respond_to?(:after_save) && respond_to?(:after_destroy)
15
+ unless respond_to?(:after_save) && respond_to?(:after_destroy)
16
16
  after_save { flex.sync }
17
17
  after_destroy { flex.sync }
18
18
  end
@@ -1,6 +1,6 @@
1
1
  module Flex
2
- module RelatedModel
3
- class ClassProxy
2
+ module ClassProxy
3
+ class RelatedModel
4
4
 
5
5
  attr_reader :host_class
6
6
 
@@ -8,7 +8,7 @@ module Flex
8
8
  @host_class = host_class
9
9
  end
10
10
 
11
- include RelatedModel::ClassSync
11
+ include ModelSync
12
12
 
13
13
  alias_method :full_sync, :sync
14
14
 
@@ -1,6 +1,7 @@
1
1
  module Flex
2
- module RelatedModel
3
- class InstanceProxy
2
+ module InstanceProxy
3
+
4
+ class Base
4
5
  attr_reader :instance, :class_flex
5
6
 
6
7
  def initialize(instance)
@@ -1,6 +1,6 @@
1
1
  module Flex
2
- module Model
3
- class InstanceProxy < RelatedModel::InstanceProxy
2
+ module InstanceProxy
3
+ class Model < Base
4
4
 
5
5
  # indexes the document
6
6
  # usually called from after_save, you can eventually call it explicitly for example from another callback
@@ -65,21 +65,21 @@ module Flex
65
65
  end
66
66
 
67
67
  def is_parent?
68
- @is_parent ||= Manager.parent_types.include?(type)
68
+ @is_parent ||= ModelManager.parent_types.include?(type)
69
69
  end
70
70
 
71
71
  def metainfo
72
72
  @metainfo ||= begin
73
- meta = { :index => index, :type => type, :id => id }
74
- params = {}
75
- params[:routing] = routing if routing
76
- params[:parent] = parent_instance.id if is_child?
77
- meta.merge!(:params => params) unless params.empty?
78
- meta
79
- end
73
+ meta = { :index => index, :type => type, :id => id }
74
+ params = {}
75
+ params[:routing] = routing if routing
76
+ params[:parent] = parent_instance.id if is_child?
77
+ meta.merge!(:params => params) unless params.empty?
78
+ meta
79
+ end
80
80
  end
81
81
 
82
- private
82
+ private
83
83
 
84
84
  BASE62_DIGITS = %w(0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z)
85
85
 
@@ -0,0 +1,7 @@
1
+ module Flex
2
+ module InstanceProxy
3
+ class RelatedModel < Base
4
+
5
+ end
6
+ end
7
+ end
@@ -8,109 +8,11 @@ module Flex
8
8
  def self.included(base)
9
9
  base.class_eval do
10
10
  Flex::Loader.host_classes |= [base]
11
- class << self; attr_reader :flex end
12
- @flex = Flex::Loader::ClassProxy.new(base)
11
+ @flex ||= ClassProxy::Loader.new(base)
12
+ def self.flex; @flex end
13
13
  end
14
14
  end
15
15
 
16
- class ClassProxy < Flex::ClassProxy
17
- attr_reader :templates, :partials
18
-
19
- include Template::Info
20
-
21
- def initialize(base)
22
- super
23
- @sources = []
24
- @templates = {}
25
- @partials = {}
26
- end
27
-
28
- # accepts a path to a file or YAML string
29
- def load_source_for(klass, source, source_vars)
30
- if source.nil? || source != /\n/
31
- paths = [ "#{Configuration.flex_dir}/#{source}.yml",
32
- "#{Configuration.flex_dir}/#{Model::Manager.class_name_to_type(host_class.name)}.yml",
33
- source ]
34
- source = paths.find {|p| File.exist?(p)}
35
- end
36
- raise ArgumentError, "expected a string (got #{source.inspect})." \
37
- unless source.is_a?(String)
38
- @sources << [klass, source, source_vars]
39
- do_load_source(klass, source, source_vars)
40
- end
41
-
42
- # loads a Generic Template source
43
- def load_source(source=nil, source_vars=nil)
44
- load_source_for(Template, source, source_vars)
45
- end
46
-
47
- # loads a Search Template source
48
- def load_search_source(source=nil, source_vars=nil)
49
- load_source_for(Template::Search, source, source_vars)
50
- end
51
-
52
- # loads a SlimSearch Template source
53
- def load_slim_search_source(source=nil, source_vars=nil)
54
- load_source_for(Template::SlimSearch, source, source_vars)
55
- end
56
-
57
- # reloads the sources (useful in the console and used internally)
58
- def reload!
59
- @sources.each {|k,s,v| do_load_source(k,s,v)}
60
- end
61
-
62
- # adds a template instance and defines the template method in the host class
63
- def add_template(name, template)
64
- templates[name] = template
65
- # no define_singleton_method in 1.8.7
66
- host_class.instance_eval <<-ruby, __FILE__, __LINE__ + 1
67
- def #{name}(vars={})
68
- raise ArgumentError, "#{host_class}.#{name} expects a Hash (got \#{vars.inspect})" unless vars.is_a?(Hash)
69
- #{host_class.respond_to?(:preprocess_variables) && 'preprocess_variables(vars)'}
70
- flex.templates[:#{name}].render(vars)
71
- end
72
- ruby
73
- end
74
-
75
- # http://www.elasticsearch.org/guide/reference/api/multi-search.html
76
- # request may be a hash with the templates names as keys and the variable hash as value
77
- # or you can also use an array of arrays.
78
- # The variables are an hash of variables that will be used to render the msearch template
79
- def multi_search(requests, variables={})
80
- lines = requests.map { |name, vars| templates[name].to_msearch(vars) }.join()
81
- template = Template.new('GET', '/<<index>>/<<type>>/_msearch')
82
- template.send(:do_render, variables.merge(:data => lines)) do |http_response|
83
- responses = []
84
- es_response = MultiJson.decode(http_response.body)
85
- es_response['responses'].each_with_index do |result, i|
86
- responses << Result.new(templates[requests[i].first], requests[i].last, http_response, result)
87
- end
88
- es_response['responses'] = responses
89
- def es_response.responses
90
- self['responses']
91
- end
92
- es_response
93
- end
94
- end
95
-
96
- private
97
-
98
- def do_load_source(klass, source, source_vars)
99
- source = Utils.erb_process(source) unless source.match("\n") # skips non-path
100
- hash = Utils.data_from_source(source)
101
- hash.delete('ANCHORS')
102
- hash.each do |name, structure|
103
- if name.to_s =~ /^_/ # partial
104
- partial = Template::Partial.new(structure, self)
105
- partials[name.to_sym] = partial
106
- else
107
- template = klass.new(*structure).setup(self, name, source_vars)
108
- add_template(name.to_sym, template)
109
- end
110
- end
111
- end
112
-
113
- end
114
16
  end
115
17
  end
116
18
 
@@ -3,13 +3,13 @@ module Flex
3
3
 
4
4
  def self.included(base)
5
5
  base.class_eval do
6
- class << self; attr_reader :flex end
7
- @flex ||= Flex::Model::ClassProxy.new(base)
6
+ @flex ||= ClassProxy::Model.new(base)
7
+ def self.flex; @flex end
8
8
  end
9
9
  end
10
10
 
11
11
  def flex
12
- @flex ||= InstanceProxy.new(self)
12
+ @flex ||= InstanceProxy::Model.new(self)
13
13
  end
14
14
 
15
15
  def flex_source
@@ -0,0 +1,65 @@
1
+ module Flex
2
+ module ModelManager
3
+
4
+ extend self
5
+
6
+ attr_accessor :parent_types
7
+ @parent_types = []
8
+
9
+ def init
10
+ Configuration.flex_models.each {|m| eval"::#{m}" if m.is_a?(String) }
11
+ end
12
+
13
+ # arrays of all the types
14
+ def types
15
+ type_class_map.keys.map{|k| k.split('/').last}
16
+ end
17
+
18
+ # sets the default parent/child mappings and merges with the config_file
19
+ # returns the indices structure used for creating the indices
20
+ def indices(file=Configuration.config_file)
21
+ @indices ||= begin
22
+ default = {}.extend Structure::Mergeable
23
+ Configuration.flex_models.each do |m|
24
+ m = eval"::#{m}" if m.is_a?(String)
25
+ next unless m.flex.is_child?
26
+ index = m.flex.index
27
+ m.flex.parent_child_map.each do |parent, child|
28
+ default.add index => {'mappings' => {child => {'_parent' => {'type' => parent }}}}
29
+ end
30
+ end
31
+ hash = YAML.load(Utils.erb_process(file))
32
+ hash.delete('ANCHORS')
33
+ default.deep_merge(hash)
34
+ end
35
+ end
36
+
37
+ # maps all the index/types to the ruby class
38
+ def type_class_map
39
+ @type_class_map ||= begin
40
+ map = {}
41
+ Configuration.flex_models.each do |m|
42
+ m = eval("::#{m}") if m.is_a?(String)
43
+ types = m.flex.type.is_a?(Array) ? m.flex.type : [m.flex.type]
44
+ types.each do |t|
45
+ map["#{m.flex.index}/#{t}"] = m
46
+ end
47
+ end
48
+ map
49
+ end
50
+ end
51
+
52
+ def class_name_to_type(class_name)
53
+ type = class_name.tr(':', '_')
54
+ type.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
55
+ type.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
56
+ type.downcase!
57
+ type
58
+ end
59
+
60
+ def type_to_class_name(type)
61
+ type.gsub(/__(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
62
+ end
63
+
64
+ end
65
+ end
@@ -2,11 +2,11 @@ require 'flex'
2
2
  require 'rails'
3
3
  require 'flex/rails/helper'
4
4
 
5
- if Rails.version.match /^3/
5
+ if ::Rails.respond_to?(:version) && ::Rails.version.to_i == 3
6
6
  require 'flex/rails/engine'
7
7
  else
8
8
  Flex::Configuration.configure do |c|
9
- c.config_file = Rails.root.join('config', 'flex.yml').to_s
10
- c.flex_dir = Rails.root.join('app', 'flex').to_s
9
+ c.config_file = ::Rails.root.join('config', 'flex.yml').to_s
10
+ c.flex_dir = ::Rails.root.join('app', 'flex').to_s
11
11
  end
12
12
  end
@@ -8,7 +8,7 @@ module Flex
8
8
  Flex::Configuration.logger = ::Rails.logger
9
9
  # we need to reload the flex API methods with the new variables
10
10
  Flex.reload!
11
- Flex::Model::Manager.init
11
+ Flex::ModelManager.init
12
12
  end
13
13
 
14
14
  end
@@ -3,13 +3,13 @@ module Flex
3
3
 
4
4
  def self.included(base)
5
5
  base.class_eval do
6
- class << self; attr_reader :flex end
7
- @flex ||= Flex::RelatedModel::ClassProxy.new(base)
6
+ @flex ||= ClassProxy::RelatedModel.new(base)
7
+ def self.flex; @flex end
8
8
  end
9
9
  end
10
10
 
11
11
  def flex
12
- @flex ||= InstanceProxy.new(self)
12
+ @flex ||= InstanceProxy::RelatedModel.new(self)
13
13
  end
14
14
 
15
15
  end
@@ -23,7 +23,7 @@ module Flex
23
23
  end
24
24
 
25
25
  def mapped_class(should_raise=false)
26
- @mapped_class ||= Model::Manager.type_class_map["#{_index}/#{_type}"]
26
+ @mapped_class ||= ModelManager.type_class_map["#{_index}/#{_type}"]
27
27
  rescue NameError
28
28
  raise DocumentMappingError, "the '#{_index}/#{_type}' document cannot be mapped to any class." \
29
29
  if should_raise
@@ -110,7 +110,7 @@ module Flex
110
110
  'Please, use CONFIG_FILE=/path/to/index.yml ' +
111
111
  'or set the Flex::Configuration.config_file properly' \
112
112
  unless File.exist?(@indices_yaml)
113
- Model::Manager.indices(@indices_yaml)
113
+ ModelManager.indices(@indices_yaml)
114
114
  end
115
115
  end
116
116
 
@@ -105,7 +105,7 @@ module Flex
105
105
 
106
106
  def caller_line
107
107
  method_name = @host_flex && @name && "#{@host_flex.host_class}.#@name"
108
- line = caller.find{|l| l !~ %r|/flex/lib/flex/[^\.]+\.rb|}
108
+ line = caller.find{|l| l !~ /#{LIB_PATH}/}
109
109
  ll = ''
110
110
  ll << "#{method_name} from " if method_name
111
111
  ll << "#{line}"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-24 00:00:00.000000000 Z
12
+ date: 2012-08-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: multi_json
@@ -125,24 +125,26 @@ files:
125
125
  - flex.gemspec
126
126
  - lib/flex.rb
127
127
  - lib/flex/api_methods.yml
128
- - lib/flex/class_proxy.rb
128
+ - lib/flex/class_proxy/base.rb
129
+ - lib/flex/class_proxy/loader.rb
130
+ - lib/flex/class_proxy/model.rb
131
+ - lib/flex/class_proxy/model_sync.rb
132
+ - lib/flex/class_proxy/related_model.rb
129
133
  - lib/flex/configuration.rb
130
134
  - lib/flex/errors.rb
131
135
  - lib/flex/http_clients/patron.rb
132
136
  - lib/flex/http_clients/rest_client.rb
137
+ - lib/flex/instance_proxy/base.rb
138
+ - lib/flex/instance_proxy/model.rb
139
+ - lib/flex/instance_proxy/related_model.rb
133
140
  - lib/flex/loader.rb
134
141
  - lib/flex/logger.rb
135
142
  - lib/flex/model.rb
136
- - lib/flex/model/class_proxy.rb
137
- - lib/flex/model/instance_proxy.rb
138
- - lib/flex/model/manager.rb
143
+ - lib/flex/model_manager.rb
139
144
  - lib/flex/rails.rb
140
145
  - lib/flex/rails/engine.rb
141
146
  - lib/flex/rails/helper.rb
142
147
  - lib/flex/related_model.rb
143
- - lib/flex/related_model/class_proxy.rb
144
- - lib/flex/related_model/class_sync.rb
145
- - lib/flex/related_model/instance_proxy.rb
146
148
  - lib/flex/result.rb
147
149
  - lib/flex/result/bulk.rb
148
150
  - lib/flex/result/collection.rb
@@ -1,12 +0,0 @@
1
- module Flex
2
- class ClassProxy
3
- attr_reader :host_class
4
- attr_accessor :variables
5
-
6
- def initialize(host_class)
7
- @host_class = host_class
8
- @variables = Variables.new
9
- end
10
-
11
- end
12
- end
@@ -1,67 +0,0 @@
1
- module Flex
2
- module Model
3
- module Manager
4
-
5
- extend self
6
-
7
- attr_accessor :parent_types
8
- @parent_types = []
9
-
10
- def init
11
- Configuration.flex_models.each {|m| eval"::#{m}" if m.is_a?(String) }
12
- end
13
-
14
- # arrays of all the types
15
- def types
16
- type_class_map.keys.map{|k| k.split('/').last}
17
- end
18
-
19
- # sets the default parent/child mappings and merges with the config_file
20
- # returns the indices structure used for creating the indices
21
- def indices(file=Configuration.config_file)
22
- @indices ||= begin
23
- default = {}.extend Structure::Mergeable
24
- Configuration.flex_models.each do |m|
25
- m = eval"::#{m}" if m.is_a?(String)
26
- next unless m.flex.is_child?
27
- index = m.flex.index
28
- m.flex.parent_child_map.each do |parent, child|
29
- default.add index => {'mappings' => {child => {'_parent' => {'type' => parent }}}}
30
- end
31
- end
32
- hash = YAML.load(Utils.erb_process(file))
33
- hash.delete('ANCHORS')
34
- default.deep_merge(hash)
35
- end
36
- end
37
-
38
- # maps all the index/types to the ruby class
39
- def type_class_map
40
- @type_class_map ||= begin
41
- map = {}
42
- Configuration.flex_models.each do |m|
43
- m = eval("::#{m}") if m.is_a?(String)
44
- types = m.flex.type.is_a?(Array) ? m.flex.type : [m.flex.type]
45
- types.each do |t|
46
- map["#{m.flex.index}/#{t}"] = m
47
- end
48
- end
49
- map
50
- end
51
- end
52
-
53
- def class_name_to_type(class_name)
54
- type = class_name.tr(':', '_')
55
- type.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
56
- type.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
57
- type.downcase!
58
- type
59
- end
60
-
61
- def type_to_class_name(type)
62
- type.gsub(/__(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
63
- end
64
-
65
- end
66
- end
67
- end