Class: TenderImport::Archive
- Inherits:
-
Object
- Object
- TenderImport::Archive
- Includes:
- FileUtils
- Defined in:
- lib/tender_import/archive.rb
Defined Under Namespace
Classes: Error
Instance Attribute Summary collapse
-
#buffer ⇒ Object
readonly
Returns the value of attribute buffer.
-
#report ⇒ Object
readonly
Returns the value of attribute report.
-
#site ⇒ Object
readonly
Returns the value of attribute site.
-
#stats ⇒ Object
readonly
Returns the value of attribute stats.
Instance Method Summary collapse
-
#add_category(params) ⇒ Object
Returns a handle needed for adding discussions.
- #add_discussion(category_key, params) ⇒ Object
-
#add_user(params) ⇒ Object
Returns the params on success, nil on failure.
- #categories ⇒ Object
- #category_id(cat) ⇒ Object
- #category_key(cat) ⇒ Object
- #discussions(category_key) ⇒ Object
-
#initialize(site_name, options = {}) ⇒ Archive
constructor
Options:.
- #users ⇒ Object
- #write_archive ⇒ Object
- #write_categories_and_discussions ⇒ Object
- #write_category(c) ⇒ Object
- #write_discussion(category_id, discussion) ⇒ Object
- #write_discussions(category) ⇒ Object
- #write_user(user) ⇒ Object
- #write_users ⇒ Object
Constructor Details
#initialize(site_name, options = {}) ⇒ Archive
Options:
- buffer
-
When true, don’t flush to disk until the end. Defaults to false.
50 51 52 53 54 55 56 57 58 |
# File 'lib/tender_import/archive.rb', line 50 def initialize site_name, = {} @site = site_name @export_dir = ".#{site_name}-export-#{$$}" @report = [] @import = {} @stats = {} @buffer = .key?(:buffer) ? !![:buffer] : false @category_counter = Hash.new(0) end |
Instance Attribute Details
#buffer ⇒ Object (readonly)
Returns the value of attribute buffer.
44 45 46 |
# File 'lib/tender_import/archive.rb', line 44 def buffer @buffer end |
#report ⇒ Object (readonly)
Returns the value of attribute report.
44 45 46 |
# File 'lib/tender_import/archive.rb', line 44 def report @report end |
#site ⇒ Object (readonly)
Returns the value of attribute site.
44 45 46 |
# File 'lib/tender_import/archive.rb', line 44 def site @site end |
#stats ⇒ Object (readonly)
Returns the value of attribute stats.
44 45 46 |
# File 'lib/tender_import/archive.rb', line 44 def stats @stats end |
Instance Method Details
#add_category(params) ⇒ Object
Returns a handle needed for adding discussions
66 67 68 69 |
# File 'lib/tender_import/archive.rb', line 66 def add_category params cat = validate_and_store :category, params cat ? category_key(cat) : nil end |
#add_discussion(category_key, params) ⇒ Object
71 72 73 74 |
# File 'lib/tender_import/archive.rb', line 71 def add_discussion category_key, params raise Error, "add_discussion: missing category key" if category_key.nil? validate_and_store :discussion, params, :key => category_key end |
#add_user(params) ⇒ Object
Returns the params on success, nil on failure
61 62 63 |
# File 'lib/tender_import/archive.rb', line 61 def add_user params validate_and_store :user, {:state => 'user'}.merge(params) end |
#categories ⇒ Object
84 85 86 |
# File 'lib/tender_import/archive.rb', line 84 def categories @import[:category] end |
#category_id(cat) ⇒ Object
80 81 82 |
# File 'lib/tender_import/archive.rb', line 80 def category_id cat cat[:name].gsub(/\W+/,'_').downcase end |
#category_key(cat) ⇒ Object
76 77 78 |
# File 'lib/tender_import/archive.rb', line 76 def category_key cat "category:#{category_id cat}".downcase end |
#discussions(category_key) ⇒ Object
88 89 90 91 |
# File 'lib/tender_import/archive.rb', line 88 def discussions category_key raise Error, "discussions: missing category key" if category_key.nil? @import[category_key] || [] end |
#users ⇒ Object
93 94 95 |
# File 'lib/tender_import/archive.rb', line 93 def users @import[:user] end |
#write_archive ⇒ Object
97 98 99 100 101 102 103 104 |
# File 'lib/tender_import/archive.rb', line 97 def write_archive write_users if users write_categories_and_discussions if categories export_file = "export_#{site}.tgz" system "tar -zcf #{export_file} -C #{export_dir} ." system "rm -rf #{export_dir}" return export_file end |
#write_categories_and_discussions ⇒ Object
127 128 129 130 131 132 |
# File 'lib/tender_import/archive.rb', line 127 def write_categories_and_discussions categories.each do |c| write_category c write_discussions c end end |
#write_category(c) ⇒ Object
120 121 122 123 124 125 |
# File 'lib/tender_import/archive.rb', line 120 def write_category c mkdir_p export_dir('categories') File.open(File.join(export_dir('categories'), "#{category_id(c)}.json"), "w") do |file| file.puts Yajl::Encoder.encode(c) end end |
#write_discussion(category_id, discussion) ⇒ Object
134 135 136 137 138 139 140 141 |
# File 'lib/tender_import/archive.rb', line 134 def write_discussion category_id, discussion @category_counter[category_id] += 1 dir = File.join(export_dir('categories'), category_id) mkdir_p dir File.open(File.join(dir, "#{@category_counter[category_id]}.json"), "w") do |file| file.puts Yajl::Encoder.encode(discussion) end end |
#write_discussions(category) ⇒ Object
143 144 145 146 147 |
# File 'lib/tender_import/archive.rb', line 143 def write_discussions category discussions(category_key(category)).each do |d| write_discussion category_id(category), d end end |
#write_user(user) ⇒ Object
106 107 108 109 110 111 112 |
# File 'lib/tender_import/archive.rb', line 106 def write_user user return unless user mkdir_p export_dir('users') File.open(File.join(export_dir('users'), "#{user[:email].gsub(/\W+/,'_')}.json"), "w") do |file| file.puts Yajl::Encoder.encode(user) end end |
#write_users ⇒ Object
114 115 116 117 118 |
# File 'lib/tender_import/archive.rb', line 114 def write_users users.each do |u| write_user u end end |