class Locomotive::Wagon::PullContentEntriesCommand
Public Instance Methods
_pull()
click to toggle source
# File lib/locomotive/wagon/commands/pull_sub_commands/pull_content_entries_command.rb, line 5 def _pull fetch_content_types do |content_type| # delete the previous file reset_file(content_entry_filepath(content_type)) instrument :writing, label: content_type.name fetch_content_entries(content_type) do |entries| # entries is a list of max 10 elements (pagination) write_content_entries(content_type, entries) end instrument :write_with_success end end
write_content_entries(content_type, entries)
click to toggle source
# File lib/locomotive/wagon/commands/pull_sub_commands/pull_content_entries_command.rb, line 21 def write_content_entries(content_type, entries) _entries = entries.map do |entry| yaml_attributes(content_type, entry) end write_to_file(content_entry_filepath(content_type), dump(_entries), 'a') end
Private Instance Methods
content_entry_filepath(content_type)
click to toggle source
# File lib/locomotive/wagon/commands/pull_sub_commands/pull_content_entries_command.rb, line 98 def content_entry_filepath(content_type) File.join('data', env, 'content_entries', "#{content_type.slug}.yml") end
fetch_content_entries(content_type) { |values| ... }
click to toggle source
# File lib/locomotive/wagon/commands/pull_sub_commands/pull_content_entries_command.rb, line 62 def fetch_content_entries(content_type, &block) page = 1 while page do entries, _next_page = {}, nil locales.each do |locale| next if locale != default_locale && content_type.localized_names.empty? (_entries = api_client.content_entries(content_type).all(nil, { page: page, order_by: 'created asc' }, locale)).each do |entry| (entries[entry._id] ||= {})[locale] = entry end _next_page = _entries._next_page if _next_page.nil? end yield(entries.values) page = _next_page end end
fetch_content_types() { |content_type| ... }
click to toggle source
# File lib/locomotive/wagon/commands/pull_sub_commands/pull_content_entries_command.rb, line 54 def fetch_content_types(&block) api_client.content_types.all.each do |content_type| content_type.attributes['localized_names'] = content_type.fields.map { |f| f['localized'] ? f['name'] : nil }.compact content_type.attributes['urls_names'] = content_type.fields.map { |f| %w(file string text).include?(f['type']) ? f['name'] : nil }.compact yield(content_type) end end
value_of(content_type, entry, locale, name)
click to toggle source
# File lib/locomotive/wagon/commands/pull_sub_commands/pull_content_entries_command.rb, line 83 def value_of(content_type, entry, locale, name) # attribute not translated return nil if entry[locale].nil? if value = entry[locale].attributes[name] if content_type.attributes['urls_names'].try(:include?, name) replace_asset_urls(value) else value end else nil end end
yaml_attributes(content_type, entry)
click to toggle source
# File lib/locomotive/wagon/commands/pull_sub_commands/pull_content_entries_command.rb, line 31 def yaml_attributes(content_type, entry) fields = %w(_slug) + content_type.fields.map { |f| f['name'] } + %w(seo_title meta_description meta_keywords) localized_fields = (content_type.attributes['localized_names'] || []) + %w(_slug seo_title meta_description meta_keywords) attributes = {} fields.each do |name| attributes[name] = if localized_fields.include?(name) && locales.size > 1 && !content_type.attributes['localized_names'].empty? clean_attributes({}.tap do |translations| locales.each { |l| translations[l] = value_of(content_type, entry, l, name) } end) else value_of(content_type, entry, default_locale, name) end end attributes['_id'] = [entry[default_locale].attributes['_id'], entry[default_locale].attributes['_slug']] attributes['_visible'] = false unless entry[default_locale].attributes['_visible'] == true { entry[default_locale].attributes[content_type.label_field_name].to_s => clean_attributes(attributes) } end