dircat 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/bin/scat CHANGED
@@ -4,6 +4,6 @@ require 'rubygems'
4
4
  cwd = File.expand_path(File.join(File.dirname(__FILE__), %w{.. lib}))
5
5
  $:.unshift(cwd) unless $:.include?(cwd)
6
6
 
7
- require 'simple_cataloger_cli'
8
- # TODO: we need exit befor run?
7
+ require 'dircat_on_sqlite_cli'
8
+ # TODO: we need exit before run?
9
9
  CliCat.run!
@@ -8,7 +8,7 @@ class CreateItems < ActiveRecord::Migration
8
8
  t.string :name, :null => false
9
9
  t.string :path, :null => false
10
10
  t.string :path_from_catalog_root, :null => false
11
- t.integer :size, :null => false
11
+ t.integer :size
12
12
 
13
13
  t.date :added_at, :null => false
14
14
 
@@ -22,3 +22,35 @@ module SimpleCataloger
22
22
  end
23
23
 
24
24
  end
25
+
26
+
27
+ ## -*- coding: utf-8 -*-
28
+ #module SimpleCataloger
29
+ #
30
+ # class Image
31
+ # include DataMapper::Resource
32
+ #
33
+ # property :id, Serial
34
+ # property :path, String
35
+ # property :path_from_catalog_root, String
36
+ #
37
+ # belongs_to :item, :required => false
38
+ # belongs_to :tag, :required => false
39
+ #
40
+ # def to_json(*a)
41
+ # {:item => if item then
42
+ # item.name
43
+ # else
44
+ # nil
45
+ # end,
46
+ # :tag => if tag then
47
+ # tag.name
48
+ # else
49
+ # nil
50
+ # end,
51
+ # :src => path_from_catalog_root}.to_json(*a)
52
+ # end
53
+ #
54
+ # end
55
+ #
56
+ #end
@@ -17,3 +17,29 @@ module SimpleCataloger
17
17
  end
18
18
 
19
19
  end
20
+
21
+
22
+ ## -*- coding: utf-8 -*-
23
+ #module SimpleCataloger
24
+ #
25
+ # class Item
26
+ # include DataMapper::Resource
27
+ # property :id, Serial
28
+ # property :name, String
29
+ #
30
+ # property :added_at, Date
31
+ # property :path, String
32
+ # property :path_from_catalog_root, String
33
+ # property :rating, Integer
34
+ # property :flagged_at, Date
35
+ #
36
+ # has n, :taggings
37
+ # has n, :tags, :through => :taggings
38
+ # has n, :images
39
+ #
40
+ # def to_s
41
+ # @name
42
+ # end
43
+ # end
44
+ #
45
+ #end
@@ -56,3 +56,68 @@ module SimpleCataloger
56
56
  end # class Tag
57
57
 
58
58
  end # module SimpleCatalog
59
+
60
+
61
+
62
+ ## -*- coding: utf-8 -*-
63
+ #module SimpleCataloger
64
+ #
65
+ # class Tag
66
+ # include DataMapper::Resource
67
+ #
68
+ # property :id, Serial
69
+ # property :name, String
70
+ #
71
+ # belongs_to :category, 'Category', :child_key => [:category_id]
72
+ # has n, :taggings
73
+ # has n, :items, :through => :taggings, :order => [:name]
74
+ # has n, :images
75
+ #
76
+ # ##################################################
77
+ # #
78
+ #
79
+ # RE_TAG = /\[([^\]]+)\]/
80
+ #
81
+ # # extracts tags from directory or file name
82
+ # def self.extract_tags(dir_or_file_name)
83
+ # tags = []
84
+ # match_data = dir_or_file_name.match(RE_TAG)
85
+ # while match_data
86
+ # tags << match_data[1]
87
+ # match_data = dir_or_file_name.match(RE_TAG, match_data.end(0))
88
+ # end
89
+ # tags
90
+ # end
91
+ #
92
+ # def self.extract_name(dir_or_file_name)
93
+ # dir_or_file_name.gsub(Tag::RE_TAG, '').strip
94
+ # end
95
+ #
96
+ # RE_RATING = /^\d$/
97
+ # RE_YEAR = /^\d\d\d\d$/
98
+ #
99
+ # MATCHES = [
100
+ # [RE_RATING, "rating", proc { |tag_name| tag_name.to_i }],
101
+ # [RE_YEAR, "year", proc { |tag_name| tag_name.to_i }]
102
+ # ]
103
+ #
104
+ # #
105
+ # # decode standard tags
106
+ # #
107
+ # def self.match_category(tag_name)
108
+ # MATCHES.each do |re, category_name, convert|
109
+ # if re.match tag_name
110
+ # category = Category.first_or_create(:name => category_name)
111
+ # tag = Tag.first_or_create(
112
+ # :name => convert.call(tag_name),
113
+ # :category => category
114
+ # )
115
+ # return tag
116
+ # end
117
+ # end
118
+ # nil
119
+ # end
120
+ #
121
+ # end # class Tag
122
+ #
123
+ #end # module SimpleCatalog
@@ -7,3 +7,16 @@ module SimpleCataloger
7
7
  end
8
8
 
9
9
  end # module
10
+
11
+
12
+ ## -*- coding: utf-8 -*-
13
+ #module SimpleCataloger
14
+ #
15
+ # class Tagging
16
+ # include DataMapper::Resource
17
+ # property :id, Serial
18
+ # belongs_to :item
19
+ # belongs_to :tag
20
+ # end
21
+ #
22
+ #end # module
@@ -14,8 +14,8 @@ module SimpleCataloger
14
14
  end
15
15
 
16
16
  def self.usage
17
- "#{command} <catalog name> <directory>"
18
- "Create a catalog with name <catalog name> starting from structure of <directory>"
17
+ "#{command} <catalog name>\n" +
18
+ "launch a webs server to browse the content of <catalog name>\n"
19
19
  end
20
20
 
21
21
  def defaults(options)
@@ -34,6 +34,10 @@ module SimpleCataloger
34
34
  helpers Sinatra::GroupItems
35
35
  helpers Helpers
36
36
 
37
+ after do
38
+ ActiveRecord::Base.clear_active_connections!
39
+ end
40
+
37
41
  get '/app.css' do
38
42
  content_type 'text/css', :charset => 'utf-8'
39
43
  sass :app
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  module DirCat
3
3
  NAME="dircat"
4
- VERSION="0.2.0"
4
+ VERSION="0.2.1"
5
5
  end
@@ -0,0 +1,8 @@
1
+ ---
2
+ :roots:
3
+ - /home/gf/GioPrj.home/dircat/spec/fixtures/films
4
+ :ignore:
5
+ - sub
6
+ - subtitles
7
+ - images
8
+ :version: 0.2.0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dircat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
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-09-19 00:00:00.000000000 Z
12
+ date: 2012-09-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: tree.rb
@@ -339,16 +339,6 @@ files:
339
339
  - lib/simple_cataloger_dm/core/catalog.rb
340
340
  - lib/simple_cataloger_dm/core/extensions.rb
341
341
  - lib/simple_cataloger_dm/core/directory_visitor.rb
342
- - lib/simple_cataloger_dm/core.rb
343
- - lib/simple_cataloger_dm/cli.rb
344
- - lib/simple_cataloger_dm/models/image.rb
345
- - lib/simple_cataloger_dm/models/tag.rb
346
- - lib/simple_cataloger_dm/models/tagging.rb
347
- - lib/simple_cataloger_dm/models/category.rb
348
- - lib/simple_cataloger_dm/models/item.rb
349
- - lib/simple_cataloger_dm/server/my_static.rb
350
- - lib/simple_cataloger_dm/server/helpers.rb
351
- - lib/simple_cataloger_dm/server/web_server.rb
352
342
  - lib/dircat.rb
353
343
  - lib/dircat_on_sqlite.rb
354
344
  - examples/example.rb
@@ -366,6 +356,8 @@ files:
366
356
  - spec/dircat/cat_on_sqlite_web/web_server_spec.rb
367
357
  - spec/fixtures/tmp/test_ar.sqlite3
368
358
  - spec/fixtures/tmp/test_ar.yml
359
+ - spec/fixtures/tmp/prova.sqlite3
360
+ - spec/fixtures/tmp/prova.yml
369
361
  - spec/fixtures/dir1/subdir/file3.txt
370
362
  - spec/fixtures/dir1/file1.txt
371
363
  - spec/fixtures/dir2/subdir/file3.txt
@@ -426,6 +418,8 @@ test_files:
426
418
  - spec/dircat/cat_on_sqlite_web/web_server_spec.rb
427
419
  - spec/fixtures/tmp/test_ar.sqlite3
428
420
  - spec/fixtures/tmp/test_ar.yml
421
+ - spec/fixtures/tmp/prova.sqlite3
422
+ - spec/fixtures/tmp/prova.yml
429
423
  - spec/fixtures/dir1/subdir/file3.txt
430
424
  - spec/fixtures/dir1/file1.txt
431
425
  - spec/fixtures/dir2/subdir/file3.txt
@@ -1,32 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- #
4
- # rubygems
5
- #
6
- #require 'rubygems'
7
- #begin
8
- # require "bundler/setup"
9
- #rescue LoadError
10
- #end
11
-
12
- require 'sinatra/base'
13
-
14
- gem 'sinatra-group-items', "0.0.1"
15
- require 'sinatra/group_items'
16
-
17
- require 'haml'
18
- require 'sass'
19
- require 'json'
20
-
21
- #
22
- # server
23
- #
24
- require 'simple_cataloger_server/helpers'
25
- require 'simple_cataloger_server/my_static'
26
- require 'simple_cataloger_server/web_server'
27
-
28
- #
29
- # cli
30
- #
31
- require 'simple_cataloger_cli/cli_cat'
32
- Dir[ File.join(File.dirname(__FILE__), "simple_cataloger_cli", "cmd*.rb") ].each { |f|require f }
@@ -1,43 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- #
3
- # std lib
4
- #
5
- require 'pp'
6
- require 'optparse'
7
- require 'fileutils'
8
- require 'ostruct'
9
-
10
- #
11
- # rubygems
12
- #
13
- gem "treevisitor", "0.2.2"
14
- require 'treevisitor'
15
-
16
- gem "optparse-command", "0.1.7"
17
- require 'optparse-command'
18
-
19
- require 'dm-core'
20
- require 'dm-migrations'
21
-
22
- #
23
- # simple catalog
24
- #
25
- require 'simple_cataloger/version'
26
- require 'simple_cataloger/simple_cataloger_error'
27
- require 'simple_cataloger/extensions'
28
-
29
- #
30
- # db models
31
- #
32
- require 'simple_cataloger/models/item'
33
- require 'simple_cataloger/models/tag'
34
- require 'simple_cataloger/models/tagging'
35
- require 'simple_cataloger/models/category'
36
- require 'simple_cataloger/models/image'
37
-
38
- #
39
- # app
40
- #
41
- require 'simple_cataloger/directory_visitor'
42
- require 'simple_cataloger/catalog'
43
-
@@ -1,21 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- module SimpleCataloger
3
-
4
- class Category
5
- include DataMapper::Resource
6
-
7
- property :id, Serial
8
- property :name, String
9
-
10
- has n, :tags, :order => [:name]
11
-
12
- def self.order_by_name
13
- all(:order => [:name])
14
- end
15
-
16
- def items
17
- tags.collect { |t| t.items }.flatten
18
- end
19
- end
20
-
21
- end
@@ -1,30 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- module SimpleCataloger
3
-
4
- class Image
5
- include DataMapper::Resource
6
-
7
- property :id, Serial
8
- property :path, String
9
- property :path_from_catalog_root, String
10
-
11
- belongs_to :item, :required => false
12
- belongs_to :tag, :required => false
13
-
14
- def to_json(*a)
15
- {:item => if item then
16
- item.name
17
- else
18
- nil
19
- end,
20
- :tag => if tag then
21
- tag.name
22
- else
23
- nil
24
- end,
25
- :src => path_from_catalog_root}.to_json(*a)
26
- end
27
-
28
- end
29
-
30
- end
@@ -1,24 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- module SimpleCataloger
3
-
4
- class Item
5
- include DataMapper::Resource
6
- property :id, Serial
7
- property :name, String
8
-
9
- property :added_at, Date
10
- property :path, String
11
- property :path_from_catalog_root, String
12
- property :rating, Integer
13
- property :flagged_at, Date
14
-
15
- has n, :taggings
16
- has n, :tags, :through => :taggings
17
- has n, :images
18
-
19
- def to_s
20
- @name
21
- end
22
- end
23
-
24
- end
@@ -1,62 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- module SimpleCataloger
3
-
4
- class Tag
5
- include DataMapper::Resource
6
-
7
- property :id, Serial
8
- property :name, String
9
-
10
- belongs_to :category, 'Category', :child_key => [:category_id]
11
- has n, :taggings
12
- has n, :items, :through => :taggings, :order => [:name]
13
- has n, :images
14
-
15
- ##################################################
16
- #
17
-
18
- RE_TAG = /\[([^\]]+)\]/
19
-
20
- # extracts tags from directory or file name
21
- def self.extract_tags(dir_or_file_name)
22
- tags = []
23
- match_data = dir_or_file_name.match(RE_TAG)
24
- while match_data
25
- tags << match_data[1]
26
- match_data = dir_or_file_name.match(RE_TAG, match_data.end(0))
27
- end
28
- tags
29
- end
30
-
31
- def self.extract_name(dir_or_file_name)
32
- dir_or_file_name.gsub(Tag::RE_TAG, '').strip
33
- end
34
-
35
- RE_RATING = /^\d$/
36
- RE_YEAR = /^\d\d\d\d$/
37
-
38
- MATCHES = [
39
- [RE_RATING, "rating", proc { |tag_name| tag_name.to_i }],
40
- [RE_YEAR, "year", proc { |tag_name| tag_name.to_i }]
41
- ]
42
-
43
- #
44
- # decode standard tags
45
- #
46
- def self.match_category(tag_name)
47
- MATCHES.each do |re, category_name, convert|
48
- if re.match tag_name
49
- category = Category.first_or_create(:name => category_name)
50
- tag = Tag.first_or_create(
51
- :name => convert.call(tag_name),
52
- :category => category
53
- )
54
- return tag
55
- end
56
- end
57
- nil
58
- end
59
-
60
- end # class Tag
61
-
62
- end # module SimpleCatalog
@@ -1,11 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- module SimpleCataloger
3
-
4
- class Tagging
5
- include DataMapper::Resource
6
- property :id, Serial
7
- belongs_to :item
8
- belongs_to :tag
9
- end
10
-
11
- end # module
@@ -1,60 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- module SimpleCataloger
3
- module Helpers
4
-
5
- def partial(template, *args)
6
- options = args.extract_options!
7
- options.merge!(:layout => false)
8
- if collection = options.delete(:collection) then
9
- collection.inject([]) do |buffer, member|
10
- buffer << haml(template, options.merge(
11
- :layout => false,
12
- :locals => {template.to_sym => member}
13
- )
14
- )
15
- end.join("\n")
16
- else
17
- haml(template, options)
18
- end
19
- end
20
-
21
- def partial_erb(template)
22
- erb template
23
- end
24
-
25
- def base_url
26
- if Sinatra::Application.port == 80
27
- "http://#{Sinatra::Application.host}/"
28
- else
29
- "http://#{Sinatra::Application.host}:#{Sinatra::Application.port}/"
30
- end
31
- end
32
-
33
- def when_updated(time)
34
- days = (Time.now - time) / (60 * 60 * 24)
35
- case days.to_i
36
- when 0
37
- "today"
38
- when 1
39
- "yesterday"
40
- else
41
- "#{sprintf("%i", days) } days ago"
42
- end
43
- end
44
-
45
- def gen_url(field, visible_field = nil)
46
- visible_field ||= field
47
- pos = request.env['REQUEST_URI'].index "?"
48
- url = if pos
49
- request.env['REQUEST_URI'][0...pos]
50
- else
51
- request.env['REQUEST_URI']
52
- end
53
- "<a href='#{url}?order=#{field}'>#{visible_field}</a>"
54
- end
55
-
56
- def rfc_3339(timestamp)
57
- timestamp.strftime("%Y-%m-%dT%H:%M:%SZ")
58
- end
59
- end
60
- end
@@ -1,40 +0,0 @@
1
- module Rack
2
-
3
- # The Rack::Static middleware intercepts requests for static files
4
- # (javascript files, images, stylesheets, etc) based on the url prefixes
5
- # passed in the options, and serves them using a Rack::File object. This
6
- # allows a Rack stack to serve both static and dynamic content.
7
- #
8
- # Examples:
9
- # use Rack::Static, :urls => ["/media"]
10
- # will serve all requests beginning with /media from the "media" folder
11
- # located in the current directory (ie media/*).
12
- #
13
- # use Rack::Static, :urls => ["/css", "/images"], :root => "public"
14
- # will serve all requests beginning with /css or /images from the folder
15
- # "public" in the current directory (ie public/css/* and public/images/*)
16
-
17
- class MyStatic
18
-
19
- def initialize(app, options={})
20
- @app = app
21
- @urls = options[:urls] || ["/favicon.ico"]
22
- root = options[:root] || Dir.pwd
23
- @file_server = Rack::File.new(root)
24
- end
25
-
26
- def call(env)
27
- path = env["PATH_INFO"]
28
- puts "mystatic #{path} #{URI.decode(path)}"
29
- path = URI.decode(path)
30
- can_serve = @urls.any? { |url| path.index(url) == 0 }
31
-
32
- if can_serve
33
- @file_server.call(env)
34
- else
35
- @app.call(env)
36
- end
37
- end
38
-
39
- end
40
- end
@@ -1,171 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- module SimpleCataloger
3
-
4
- class WebServer < Sinatra::Base
5
-
6
- def self.run!(*args)
7
- options = args.last.is_a?(::Hash) ? args.last : {}
8
- catalog = options[:catalog]
9
-
10
- catalog.roots.each do |root|
11
- use Rack::MyStatic,
12
- :urls => ["/#{File.basename(root)}"],
13
- :root => File.dirname(root)
14
- puts "mount #{File.basename(root)} -> #{File.dirname(root)}"
15
- end
16
-
17
- define_method :catalog do
18
- catalog
19
- end
20
- super(*args)
21
- end
22
-
23
- # turns on static file serving for Sinatra::Base apps
24
- enable :static
25
-
26
- server_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'web'))
27
- set :public, File.join(server_dir, 'public')
28
- set :views, File.join(server_dir, 'views')
29
-
30
- helpers do
31
- include Rack::Utils
32
- alias_method :h, :escape_html
33
- end
34
-
35
- helpers Sinatra::GroupItems
36
- helpers Helpers
37
-
38
- get '/app.css' do
39
- content_type 'text/css', :charset => 'utf-8'
40
- sass :app
41
- end
42
-
43
- get "/js/tooltips/tooltips.css" do
44
- content_type 'text/css', :charset => 'utf-8'
45
- sass "/js/tooltips/tooltips".to_sym
46
- end
47
-
48
- get '/' do
49
- @catalog = catalog
50
- @items = Item.all
51
- order = params[:o] || "alpha"
52
-
53
- @render = proc { |item|
54
- "<a href=\"/item/#{item.id}\" rel=\"#{item.id}\">#{item.name}</a>" +
55
- if item.rating then
56
- " (r:#{item.rating})"
57
- else
58
- " (r:unrated)"
59
- end
60
- }
61
-
62
- case order
63
- when "alpha"
64
- @grouped_items = group_items(@items, :group_size => 5)
65
- @title = "Films in alphabetical order (c:#{@items.length})"
66
- when "time"
67
- @grouped_items = group_items(@items, :group_size => 1, :header => proc { |film| film.added_at })
68
- @title = "Films in time added order (c:#{@items.length})"
69
- end
70
- haml :items
71
- end
72
-
73
- get '/item/:id' do
74
- @catalog = catalog
75
- @item = Item.get(params[:id])
76
- @grouped_items = group_items(@item.tags, :group_size => 1, :header => proc { |tag| tag.category.name })
77
- haml :item
78
- end
79
-
80
- get '/categories' do
81
- @catalog = catalog
82
- @categories = Category.all
83
- haml :categories
84
- end
85
-
86
- get "/category/:id" do
87
- @catalog = catalog
88
- @category = Category.get(params[:id])
89
- haml :category
90
- end
91
-
92
- get "/tag/:id" do
93
- @catalog = catalog
94
- @tag = Tag.get(params[:id])
95
- haml :tag
96
- end
97
-
98
- get "/random" do
99
- max_peso = Item.inject.each do |f|
100
- f.peso
101
- end
102
- Random.new.rand(0..maxpeso)
103
- end
104
-
105
- #######################################################################################
106
- # Ajax
107
-
108
- get '/ajax/ajax_item/:id' do
109
- @item = Item.get(params[:id])
110
- haml 'ajax/ajax_item'.to_sym, :layout => false
111
- end
112
-
113
- post '/ajax/open_folder' do
114
- dir = params[:dir] || "/"
115
- system("nautilus", dir)
116
- "ok"
117
- end
118
-
119
- post "/ajax/set-category" do
120
- id = params[:tag_id]
121
- category_name = params[:category_name]
122
- tag = Tag.get(id.to_i)
123
- category = Category.first_or_create(:name => category_name)
124
- tag.category = category
125
- tag.save
126
- catalog.update_categories
127
- catalog.write_config
128
- "ok"
129
- end
130
-
131
- get '/ajax/ajax_set_flag/:id' do
132
- @film = Item.get(params[:id])
133
- if (params[:checked] == "true")
134
- @film.flagged_at = Time.new
135
- else
136
- @film.flagged_at = nil
137
- end
138
- @film.save
139
- "ok"
140
- end
141
-
142
- #######################################################################################
143
- # Tests
144
-
145
- get "/test/resize" do
146
- @catalog = catalog
147
- haml "/test/resize".to_sym
148
- end
149
-
150
- get "/test/jquery" do
151
- @catalog = catalog
152
- haml "/test/jquery".to_sym
153
- end
154
-
155
- get "/test/lightbox" do
156
- @catalog = catalog
157
- haml "/test/lightbox".to_sym
158
- end
159
-
160
- get "/test/select" do
161
- @catalog = catalog
162
- haml "/test/select".to_sym
163
- end
164
-
165
- get "/test/protovis" do
166
- @catalog = catalog
167
- haml "/test/protovis".to_sym
168
- end
169
- end
170
-
171
- end