towsta 1.1.7 → 1.2.0
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/towsta +2 -1
- data/lib/towsta/kinds/boolean.rb +18 -0
- data/lib/towsta/kinds/date.rb +23 -0
- data/lib/towsta/kinds/datetime.rb +23 -0
- data/lib/towsta/kinds/file.rb +9 -0
- data/lib/towsta/kinds/formated.rb +9 -0
- data/lib/towsta/kinds/gallery.rb +20 -0
- data/lib/towsta/kinds/image.rb +17 -0
- data/lib/towsta/kinds/integer.rb +17 -0
- data/lib/towsta/kinds/link.rb +9 -0
- data/lib/towsta/kinds/list.rb +23 -0
- data/lib/towsta/kinds/main.rb +35 -0
- data/lib/towsta/kinds/money.rb +17 -0
- data/lib/towsta/kinds/password.rb +9 -0
- data/lib/towsta/kinds/text.rb +9 -0
- data/lib/towsta/kinds/user.rb +32 -0
- data/lib/towsta/kinds/vertical.rb +42 -0
- data/lib/towsta/login.rb +19 -0
- data/lib/towsta/memory.rb +5 -5
- data/lib/towsta/sinatra_extension.rb +19 -0
- data/lib/towsta/synchronizer.rb +74 -68
- data/lib/towsta/version.rb +1 -1
- data/lib/towsta/vertical.rb +17 -114
- data/lib/towsta.rb +19 -0
- metadata +21 -4
data/bin/towsta
CHANGED
@@ -37,6 +37,7 @@ if action == 'new'
|
|
37
37
|
index = '%h1 Hello Towsta'
|
38
38
|
File.open("#{project}/views/index.haml", 'w') {|f| f.write(index)}
|
39
39
|
Dir.mkdir "#{project}/models"
|
40
|
+
Dir.mkdir "#{project}/controllers"
|
40
41
|
Dir.mkdir "#{project}/public"
|
41
42
|
Dir.mkdir "#{project}/views/stylesheets"
|
42
43
|
css = "@import compass/reset\n"
|
@@ -51,7 +52,7 @@ if action == 'new'
|
|
51
52
|
File.open("#{project}/views/stylesheets/#{project}.sass", 'w') {|f| f.write(css)}
|
52
53
|
Dir.mkdir "#{project}/views/partials"
|
53
54
|
head = "%title #{project}\n"
|
54
|
-
head += "%meta{'http-equiv'
|
55
|
+
head += "%meta{:'http-equiv' => 'Content-Type', :content => 'text/html', :charset => 'utf-8'}\n"
|
55
56
|
head += "%link{rel: 'stylesheet', type: 'text/css', href: '/stylesheets/#{project}.css'}\n"
|
56
57
|
head += "%link{rel: 'shortcut icon', type: 'image/x-icon', href: '/images/favicon.png'}\n"
|
57
58
|
head += "%script{src: '/js/jquery.js'}\n"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Towsta
|
2
|
+
module Kinds
|
3
|
+
|
4
|
+
class DateKind < MainKind
|
5
|
+
|
6
|
+
def set content
|
7
|
+
return @content = content if content.class == DateTime
|
8
|
+
begin
|
9
|
+
@content = DateTime.strptime(content, '%m/%d/%Y')
|
10
|
+
rescue
|
11
|
+
@content = nil
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def export
|
16
|
+
return @content.strftime('%m/%d/%Y') if content.class == DateTime
|
17
|
+
@content.to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Towsta
|
2
|
+
module Kinds
|
3
|
+
|
4
|
+
class DatetimeKind < MainKind
|
5
|
+
|
6
|
+
def set content
|
7
|
+
return @content = content if content.class == Time
|
8
|
+
begin
|
9
|
+
@content = DateTime.strptime(content, '%m/%d/%Y %H:%M').to_time
|
10
|
+
rescue
|
11
|
+
@content = nil
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def export
|
16
|
+
return @content.strftime('%m/%d/%Y %H:%M') if @content.class == Time
|
17
|
+
@content.to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Towsta
|
2
|
+
module Kinds
|
3
|
+
|
4
|
+
class GalleryKind < MainKind
|
5
|
+
|
6
|
+
def set content
|
7
|
+
return @content = content if content.class == Array
|
8
|
+
begin
|
9
|
+
gal = JSON.parse(content, :symbolize_names => true)
|
10
|
+
@content = []
|
11
|
+
gal.each {|g| @content << Bresson::ImageReference.new(g)}
|
12
|
+
rescue
|
13
|
+
@content = []
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Towsta
|
2
|
+
module Kinds
|
3
|
+
|
4
|
+
class ImageKind < MainKind
|
5
|
+
|
6
|
+
def set content
|
7
|
+
begin
|
8
|
+
@content = Bresson::ImageReference.new JSON.parse(content[1..-2], :symbolize_names => true)
|
9
|
+
rescue
|
10
|
+
@content = nil
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Towsta
|
2
|
+
module Kinds
|
3
|
+
|
4
|
+
class ListKind < MainKind
|
5
|
+
|
6
|
+
def set content
|
7
|
+
return @content = content.join(', ').split(', ') if content.class == Array
|
8
|
+
@content = content.to_s.split(', ')
|
9
|
+
end
|
10
|
+
|
11
|
+
def compare object
|
12
|
+
return @content.include? object if object.class == String
|
13
|
+
@content == object
|
14
|
+
end
|
15
|
+
|
16
|
+
def export
|
17
|
+
@content.join(', ')
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Towsta
|
2
|
+
module Kinds
|
3
|
+
|
4
|
+
class MainKind
|
5
|
+
|
6
|
+
attr_accessor :content
|
7
|
+
|
8
|
+
def initialize content=nil
|
9
|
+
self.set content
|
10
|
+
end
|
11
|
+
|
12
|
+
def get
|
13
|
+
@content
|
14
|
+
end
|
15
|
+
|
16
|
+
def set content
|
17
|
+
@content = content.to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
def compare object
|
21
|
+
self.get == object
|
22
|
+
end
|
23
|
+
|
24
|
+
def export
|
25
|
+
@content.to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
def kind
|
29
|
+
self.class.to_s.split('::').last.gsub('Kind','').downcase
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Towsta
|
2
|
+
module Kinds
|
3
|
+
|
4
|
+
class UserKind < MainKind
|
5
|
+
|
6
|
+
def get
|
7
|
+
return @content if @content.class == User
|
8
|
+
user = User.find @content
|
9
|
+
@content = user if user
|
10
|
+
@content
|
11
|
+
end
|
12
|
+
|
13
|
+
def set content
|
14
|
+
return @content = content if content.class == User
|
15
|
+
return @content = content.to_i if content.to_i != 0
|
16
|
+
@content = nil
|
17
|
+
end
|
18
|
+
|
19
|
+
def compare object
|
20
|
+
return self.get.id.to_i == object.id.to_i if object.class == User
|
21
|
+
self.get.id.to_i == object.to_i
|
22
|
+
end
|
23
|
+
|
24
|
+
def export
|
25
|
+
return @content.id.to_s if @content.class == User
|
26
|
+
@content.to_s
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Towsta
|
2
|
+
module Kinds
|
3
|
+
|
4
|
+
class VerticalKind < MainKind
|
5
|
+
|
6
|
+
def get
|
7
|
+
return @content if @content.class != Fixnum
|
8
|
+
Vertical.all.each do |v|
|
9
|
+
horizontal = v.find_by_id @content
|
10
|
+
if horizontal
|
11
|
+
@content = horizontal
|
12
|
+
return horizontal
|
13
|
+
end
|
14
|
+
end
|
15
|
+
nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def set content
|
19
|
+
return @content = content if klasses.include? content.class
|
20
|
+
@content = content.to_i
|
21
|
+
end
|
22
|
+
|
23
|
+
def compare object
|
24
|
+
self.get.id.to_i == object.id.to_i if klasses.include? object.class
|
25
|
+
self.get == object
|
26
|
+
end
|
27
|
+
|
28
|
+
def export
|
29
|
+
return @content.id.to_s if klasses.include? @content.class
|
30
|
+
@content.to_s
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def klasses
|
36
|
+
Vertical.all + [User]
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
data/lib/towsta/login.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
module Towsta
|
2
|
+
|
3
|
+
class Login
|
4
|
+
|
5
|
+
def self.authenticate params
|
6
|
+
response = Towsta::Synchronizer.authentication_request params
|
7
|
+
session[:current_user] = response[:id] if response[:status]
|
8
|
+
response[:status]
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.rescue
|
12
|
+
return User.find(session[:current_user]) if defined? User
|
13
|
+
session[:current_user]
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
data/lib/towsta/memory.rb
CHANGED
@@ -7,12 +7,12 @@ module Towsta
|
|
7
7
|
def self.recover params
|
8
8
|
md5 = Memory.md5(params)
|
9
9
|
if settings.cache.get(md5)
|
10
|
-
puts
|
11
|
-
Towsta::Synchronizer.new :path => $towsta_path, :cache => settings.cache.get(md5)
|
10
|
+
puts "\nUsing cache to Towst"
|
11
|
+
Towsta::Synchronizer.new :path => $towsta_path, :cache => settings.cache.get(md5), :secret => $towsta_secret
|
12
12
|
else
|
13
|
-
puts
|
13
|
+
puts "\nCreating cache"
|
14
14
|
syn = Towsta::Synchronizer.new :secret => $towsta_secret, :path => $towsta_path, :params => params
|
15
|
-
settings.cache.set(md5,syn.
|
15
|
+
settings.cache.set(md5,syn.response)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
@@ -21,7 +21,7 @@ module Towsta
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def self.md5 params
|
24
|
-
digest = Digest::MD5.hexdigest(params.inspect.to_s)
|
24
|
+
digest = Digest::MD5.hexdigest(params.inspect.to_s + 'Towsta')
|
25
25
|
end
|
26
26
|
|
27
27
|
end
|
@@ -1,7 +1,26 @@
|
|
1
|
+
enable :sessions
|
2
|
+
|
1
3
|
helpers do
|
4
|
+
|
2
5
|
def partial page
|
3
6
|
haml "partials/_#{page}".to_sym
|
4
7
|
end
|
8
|
+
|
9
|
+
def authenticate args
|
10
|
+
response = Towsta::Synchronizer.authentication_request args
|
11
|
+
session[:current_user] = response[:id] if response[:status]
|
12
|
+
response[:status]
|
13
|
+
end
|
14
|
+
|
15
|
+
def current_user
|
16
|
+
return User.find(session[:current_user]) if defined? User
|
17
|
+
session[:current_user]
|
18
|
+
end
|
19
|
+
|
20
|
+
def forget
|
21
|
+
session[:current_user] = nil
|
22
|
+
end
|
23
|
+
|
5
24
|
end
|
6
25
|
|
7
26
|
post '/flush' do
|
data/lib/towsta/synchronizer.rb
CHANGED
@@ -1,105 +1,111 @@
|
|
1
1
|
module Towsta
|
2
2
|
class Synchronizer
|
3
3
|
|
4
|
-
attr_accessor :secret, :
|
4
|
+
attr_accessor :secret, :params, :cache, :response
|
5
5
|
|
6
6
|
def initialize args
|
7
7
|
Vertical.all = []
|
8
8
|
@secret = args[:secret]
|
9
|
-
@path = "#{args[:path]}.json"
|
10
9
|
@params = args[:params]
|
11
10
|
@cache = args[:cache]
|
12
|
-
synchronize
|
13
|
-
|
11
|
+
if synchronize
|
12
|
+
create_verticals
|
13
|
+
puts " Ready to Towst!\n\n"
|
14
|
+
else
|
15
|
+
puts " Unable to keep Towsting!\n\n"
|
16
|
+
end
|
14
17
|
end
|
15
18
|
|
19
|
+
def self.save_request export
|
20
|
+
begin
|
21
|
+
uri = URI.parse("http://manager.towsta.com/synchronizers/#{$towsta_secret}/import.json")
|
22
|
+
return JSON.parse Net::HTTP.post_form(uri, {:code => export.to_json}).body.to_s, :symbolize_names => true
|
23
|
+
rescue
|
24
|
+
return {:status => false}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.authentication_request params
|
29
|
+
begin
|
30
|
+
uri = URI.parse("http://manager.towsta.com/authenticate")
|
31
|
+
return JSON.parse Net::HTTP.post_form(uri, params).body.to_s, :symbolize_names => true
|
32
|
+
rescue
|
33
|
+
return {:status => false}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
16
39
|
def synchronize
|
17
|
-
|
18
|
-
|
40
|
+
if has_secret && (cache_string || remote_string)
|
41
|
+
return false unless validate_secret
|
42
|
+
return false unless validate_response
|
19
43
|
return true
|
20
44
|
end
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
45
|
+
false
|
46
|
+
end
|
47
|
+
|
48
|
+
def create_verticals
|
49
|
+
return false unless parse_json
|
50
|
+
create_vertical({:name => 'User', :slices => {:id => 'integer', :nick => 'text', :email => 'text'}}, @hash[:users])
|
51
|
+
@hash[:structures].each_with_index {|structure, i| create_vertical(structure, @hash[:verticals][i][:horizontals], @hash[:verticals][i][:occurrences])}
|
52
|
+
end
|
53
|
+
|
54
|
+
def remote_string
|
25
55
|
begin
|
26
56
|
uri = "/synchronizers/#{@secret}/#{Time.now.to_i}/export.json"
|
27
57
|
uri += "?query=#{CGI::escape(@params.to_json)}" if @params
|
28
|
-
Net::HTTP.start("manager.towsta.com"){|http| @json = http.get(uri).body}
|
29
|
-
puts
|
30
|
-
|
31
|
-
puts 'Maybe your secret is wrong...'
|
32
|
-
return false
|
33
|
-
elsif @json[0] != "{"
|
34
|
-
puts "something wrong with the server"
|
35
|
-
return false
|
36
|
-
else
|
37
|
-
return true
|
38
|
-
end
|
58
|
+
@response = Net::HTTP.start("manager.towsta.com"){|http| @json = http.get(uri).body}
|
59
|
+
puts "\nSynchronized with Towsta!"
|
60
|
+
return true
|
39
61
|
rescue
|
40
|
-
puts
|
62
|
+
puts "\nFailed to synchronize with Towsta."
|
41
63
|
return false
|
42
64
|
end
|
43
65
|
end
|
44
66
|
|
45
|
-
def
|
46
|
-
|
47
|
-
|
48
|
-
puts "creating a backup in #{@path}"
|
49
|
-
end
|
67
|
+
def cache_string
|
68
|
+
@response = @cache if @cache
|
69
|
+
!!@cache
|
50
70
|
end
|
51
71
|
|
52
|
-
def
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
72
|
+
def validate_secret
|
73
|
+
return true if @response != " "
|
74
|
+
puts " maybe your secret is wrong"
|
75
|
+
false
|
76
|
+
end
|
77
|
+
|
78
|
+
def validate_response
|
79
|
+
return true if @response[0] == "{"
|
80
|
+
puts " something wrong with the server"
|
81
|
+
false
|
59
82
|
end
|
60
83
|
|
61
|
-
def
|
62
|
-
return
|
84
|
+
def has_secret
|
85
|
+
return true if @secret
|
86
|
+
puts "\nyou cant synchronize without a secret..."
|
87
|
+
false
|
88
|
+
end
|
89
|
+
|
90
|
+
def parse_json
|
63
91
|
begin
|
64
|
-
hash = JSON.parse @
|
92
|
+
@hash = JSON.parse @response, :symbolize_names => true
|
93
|
+
return true
|
65
94
|
rescue
|
66
|
-
puts 'Something went wrong tryng to parse JSON.'
|
95
|
+
puts ' Something went wrong tryng to parse JSON.'
|
67
96
|
return false
|
68
97
|
end
|
69
|
-
begin
|
70
|
-
Object.send(:remove_const, :User)
|
71
|
-
rescue;nil;end
|
72
|
-
Vertical.create :name => 'User', :slices => {:id => 'integer', :nick => 'string', :email => 'string'}
|
73
|
-
hash[:users].each {|user| User.new user}
|
74
|
-
hash[:structures].each_with_index do |structure, i|
|
75
|
-
begin
|
76
|
-
Object.send(:remove_const, structure[:name].to_sym)
|
77
|
-
rescue;nil;end
|
78
|
-
Vertical.create structure
|
79
|
-
Vertical.all << eval(structure[:name])
|
80
|
-
hash[:verticals][i][:horizontals].each {|horizontal| Vertical.all.last.new horizontal}
|
81
|
-
puts "vertical #{structure[:name]} was created with #{hash[:verticals][i][:horizontals].size} horizontals"
|
82
|
-
if hash[:verticals][i][:occurrences].any?
|
83
|
-
hash[:verticals][i][:occurrences].each do |occurrence|
|
84
|
-
Vertical.all.last.add_occurrence occurrence
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
true
|
89
|
-
end
|
90
|
-
|
91
|
-
def self.callback json
|
92
|
-
json = JSON.parse json, :symbolize_names => true
|
93
|
-
return eval(json[:vertical]).new json[:attributes] if json[:action] == 'create'
|
94
|
-
return eval(json[:vertical]).update json[:attributes] if json[:action] == 'update'
|
95
|
-
eval(json[:vertical]).destroy json[:attributes][:id]
|
96
98
|
end
|
97
99
|
|
98
|
-
def
|
99
|
-
|
100
|
+
def create_vertical structure, horizontals, occurrences=[]
|
101
|
+
Object.instance_eval{ remove_const structure[:name].to_sym } if Object.const_defined?(structure[:name].to_sym)
|
102
|
+
Vertical.create structure
|
103
|
+
Vertical.all << eval(structure[:name])
|
104
|
+
horizontals.each {|horizontal| eval(structure[:name].to_s).new(horizontal)}
|
105
|
+
occurrences.each {|occurrence| eval(structure[:name].to_s).add_occurrence(occurrence)}
|
106
|
+
puts " class #{structure[:name]} was created with #{horizontals.size} instances"
|
100
107
|
end
|
101
108
|
|
102
109
|
end
|
103
110
|
|
104
111
|
end
|
105
|
-
|
data/lib/towsta/version.rb
CHANGED
data/lib/towsta/vertical.rb
CHANGED
@@ -4,7 +4,6 @@ module Towsta
|
|
4
4
|
|
5
5
|
class << self
|
6
6
|
attr_accessor :all
|
7
|
-
# Vertical.all = []
|
8
7
|
end
|
9
8
|
|
10
9
|
def self.create(args)
|
@@ -15,10 +14,11 @@ module Towsta
|
|
15
14
|
end
|
16
15
|
|
17
16
|
args[:slices].each do |attr, kind|
|
18
|
-
eval "def #{attr}
|
19
|
-
eval "def #{attr};
|
20
|
-
eval "def
|
21
|
-
eval "def self.
|
17
|
+
eval "def object_of_#{attr}; @#{attr}; end;"
|
18
|
+
eval "def #{attr}= value; @#{attr} ||= Towsta::Kinds::#{kind[0].upcase + kind[1..-1]}Kind.new; @#{attr}.set value; end;"
|
19
|
+
eval "def #{attr}; @#{attr}.get; end;"
|
20
|
+
eval "def self.find_by_#{attr} value; self.all.each {|e| return e if e.object_of_#{attr}.compare value}; nil; end;"
|
21
|
+
eval "def self.find_all_by_#{attr} value; found =[]; self.all.each {|e| found << e if e.object_of_#{attr}.compare value}; found; end;"
|
22
22
|
eval "def option_for_#{attr} value; return {value: value, selected: 'selected'} if value == #{attr}; {value: value}; end"
|
23
23
|
end
|
24
24
|
|
@@ -35,7 +35,7 @@ module Towsta
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def initialize args
|
38
|
-
args.each {|k,v| eval "self.#{k}= '#{v}';"}
|
38
|
+
self.attributes.merge(args).each {|k,v| eval "self.#{k}= '#{v}';"}
|
39
39
|
self.class.all << self
|
40
40
|
end
|
41
41
|
|
@@ -44,19 +44,9 @@ module Towsta
|
|
44
44
|
self.save author
|
45
45
|
end
|
46
46
|
|
47
|
-
def self.update args
|
48
|
-
self.find(args[:id]).update(args)
|
49
|
-
end
|
50
|
-
|
51
47
|
def destroy
|
52
|
-
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
def self.destroy id
|
57
|
-
element = self.find id
|
58
|
-
self.all.delete element
|
59
|
-
element
|
48
|
+
# self.class.all.delete self
|
49
|
+
# self
|
60
50
|
end
|
61
51
|
|
62
52
|
def self.to_hash
|
@@ -69,17 +59,16 @@ module Towsta
|
|
69
59
|
creator = author.email if author
|
70
60
|
export = self.attributes
|
71
61
|
export.delete :author
|
72
|
-
export.delete :vertical
|
73
62
|
export.delete :created_at
|
74
63
|
export.delete :updated_at
|
75
64
|
id_aux = export.delete(:id)
|
76
65
|
id_aux ? id_aux : '0'
|
77
66
|
export = {:creator => creator, :vertical => self.class.to_s, :attributes => export, :id => id_aux}
|
78
|
-
|
79
|
-
response = JSON.parse Net::HTTP.post_form(uri, {:code => export.to_json}).body.to_s, :symbolize_names => true
|
67
|
+
response = Towsta::Synchronizer.save_request export
|
80
68
|
self.id = response[:id] if response[:status]
|
69
|
+
self.author = User.find_by_email creator
|
81
70
|
Towsta::Memory.flush if $towsta_cache
|
82
|
-
response
|
71
|
+
response[:status]
|
83
72
|
end
|
84
73
|
|
85
74
|
def self.random
|
@@ -88,38 +77,20 @@ module Towsta
|
|
88
77
|
end
|
89
78
|
|
90
79
|
def self.create args, creator=$towsta_default_author
|
91
|
-
self.new(args.merge(:id => nil))
|
80
|
+
new = self.new(args.merge(:id => nil))
|
81
|
+
new.save creator
|
82
|
+
new
|
92
83
|
end
|
93
84
|
|
94
85
|
def attributes
|
95
|
-
horizontal = {
|
86
|
+
horizontal = {}
|
96
87
|
self.class.attributes.each do |attr|
|
97
|
-
|
98
|
-
|
99
|
-
horizontal[attr] = eval(attr.to_s).id
|
100
|
-
elsif eval(attr.to_s).class == Time
|
101
|
-
horizontal[attr] = eval(attr.to_s).strftime('%m/%d/%Y %H:%M')
|
102
|
-
elsif eval(attr.to_s).class == DateTime
|
103
|
-
horizontal[attr] = eval(attr.to_s).strftime('%m/%d/%Y')
|
104
|
-
elsif eval(attr.to_s).class == TrueClass
|
105
|
-
horizontal[attr] = 1
|
106
|
-
elsif eval(attr.to_s).class == FalseClass
|
107
|
-
horizontal[attr] = 0
|
108
|
-
else
|
109
|
-
horizontal[attr] = eval(attr.to_s).to_s
|
110
|
-
end
|
88
|
+
slice = eval("self.object_of_#{attr.to_s}")
|
89
|
+
horizontal[attr] = slice ? slice.export : nil
|
111
90
|
end
|
112
91
|
horizontal
|
113
92
|
end
|
114
93
|
|
115
|
-
def find_horizontal id
|
116
|
-
Vertical.all.each do |v|
|
117
|
-
horizontal = v.find_by_id id.to_i
|
118
|
-
return horizontal if horizontal
|
119
|
-
end
|
120
|
-
nil
|
121
|
-
end
|
122
|
-
|
123
94
|
def self.add_occurrence occurrence
|
124
95
|
self.send(:define_singleton_method, "occurrences_of_#{occurrence[:name].downcase}") do
|
125
96
|
eval occurrence[:items].inspect
|
@@ -133,74 +104,6 @@ module Towsta
|
|
133
104
|
Object.const_set args[:name], klass
|
134
105
|
end
|
135
106
|
|
136
|
-
private
|
137
|
-
def self.parse_get attr, kind
|
138
|
-
return "@#{attr}.class == String ? self.find_horizontal(@#{attr}) : @#{attr}" if kind == 'vertical'
|
139
|
-
"@#{attr}"
|
140
|
-
end
|
141
|
-
|
142
|
-
def self.parse_set attr, kind
|
143
|
-
return "@#{attr} = \"\#{value.to_s}\"" if ['main','text','formated','password','link'].include? kind
|
144
|
-
return "@#{attr} = value.to_f;" if kind == 'money'
|
145
|
-
return "@#{attr} = value.to_i;" if kind == 'integer'
|
146
|
-
return "@#{attr} = value == '1';" if kind == 'boolean'
|
147
|
-
return "@#{attr} = Vertical.to_dt(value);" if kind == 'datetime'
|
148
|
-
return "@#{attr} = Vertical.to_d(value);" if kind == 'date'
|
149
|
-
return "@#{attr} = Vertical.to_bresson(value);" if kind == 'image'
|
150
|
-
return "@#{attr} = User.find value.to_i;" if kind == 'user'
|
151
|
-
return "@#{attr} = value.split(', ');" if kind == 'list'
|
152
|
-
return "@#{attr} = Vertical.to_gallery(value.to_s);" if kind == 'gallery'
|
153
|
-
"@#{attr} = value;"
|
154
|
-
end
|
155
|
-
|
156
|
-
def self.parse_find attr, kind
|
157
|
-
return "self.all.each {|e| return e if e.#{attr} == value};" unless kind == 'list'
|
158
|
-
"self.all.each {|e| return e if e.#{attr}.include?(value)};"
|
159
|
-
end
|
160
|
-
|
161
|
-
def self.parse_find_all attr, kind
|
162
|
-
return "found =[]; self.all.each {|e| found << e if e.#{attr} == value}; found;" unless kind == 'list'
|
163
|
-
"found =[]; self.all.each {|e| found << e if e.#{attr}.include?(value)}; found;"
|
164
|
-
end
|
165
|
-
|
166
|
-
def self.to_gallery value
|
167
|
-
if value.class == String
|
168
|
-
begin;
|
169
|
-
gal = JSON.parse(value, :symbolize_names => true)
|
170
|
-
arr = []
|
171
|
-
gal.each do |g|
|
172
|
-
arr << Bresson::ImageReference.new(g)
|
173
|
-
end
|
174
|
-
return arr
|
175
|
-
rescue; nil; end
|
176
|
-
else
|
177
|
-
value
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
def self.to_dt value
|
182
|
-
if value.class == String
|
183
|
-
begin; DateTime.strptime(value, '%m/%d/%Y %H:%M').to_time;
|
184
|
-
rescue; nil; end
|
185
|
-
else
|
186
|
-
value
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
def self.to_d value
|
191
|
-
if value.class == String
|
192
|
-
begin; DateTime.strptime(value, '%m/%d/%Y');
|
193
|
-
rescue; nil; end
|
194
|
-
else
|
195
|
-
value
|
196
|
-
end
|
197
|
-
end
|
198
|
-
|
199
|
-
def self.to_bresson value
|
200
|
-
begin; Bresson::ImageReference.new JSON.parse(value[1..-2], :symbolize_names => true)
|
201
|
-
rescue; nil; end
|
202
|
-
end
|
203
|
-
|
204
107
|
end
|
205
108
|
|
206
109
|
end
|
data/lib/towsta.rb
CHANGED
@@ -11,10 +11,29 @@ require 'bresson'
|
|
11
11
|
require 'sinatra'
|
12
12
|
require 'compass'
|
13
13
|
|
14
|
+
require File.expand_path('../towsta/kinds/main', __FILE__)
|
14
15
|
require File.expand_path('../towsta/vertical', __FILE__)
|
15
16
|
require File.expand_path('../towsta/synchronizer', __FILE__)
|
16
17
|
require File.expand_path('../towsta/memory', __FILE__)
|
17
18
|
require File.expand_path('../towsta/sinatra_extension', __FILE__)
|
19
|
+
require File.expand_path('../towsta/login', __FILE__)
|
20
|
+
require File.expand_path('../towsta/kinds/boolean', __FILE__)
|
21
|
+
require File.expand_path('../towsta/kinds/date', __FILE__)
|
22
|
+
require File.expand_path('../towsta/kinds/datetime', __FILE__)
|
23
|
+
require File.expand_path('../towsta/kinds/file', __FILE__)
|
24
|
+
require File.expand_path('../towsta/kinds/formated', __FILE__)
|
25
|
+
require File.expand_path('../towsta/kinds/gallery', __FILE__)
|
26
|
+
require File.expand_path('../towsta/kinds/image', __FILE__)
|
27
|
+
require File.expand_path('../towsta/kinds/integer', __FILE__)
|
28
|
+
require File.expand_path('../towsta/kinds/link', __FILE__)
|
29
|
+
require File.expand_path('../towsta/kinds/list', __FILE__)
|
30
|
+
require File.expand_path('../towsta/kinds/money', __FILE__)
|
31
|
+
require File.expand_path('../towsta/kinds/password', __FILE__)
|
32
|
+
require File.expand_path('../towsta/kinds/text', __FILE__)
|
33
|
+
require File.expand_path('../towsta/kinds/user', __FILE__)
|
34
|
+
require File.expand_path('../towsta/kinds/vertical', __FILE__)
|
35
|
+
|
36
|
+
Dir["./controllers/*.rb"].each {|file| require file}
|
18
37
|
|
19
38
|
module Towsta
|
20
39
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 1
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 1.
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 1.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Mortaro
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-11-
|
17
|
+
date: 2011-11-24 00:00:00 -02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -123,6 +123,23 @@ files:
|
|
123
123
|
- Rakefile
|
124
124
|
- bin/towsta
|
125
125
|
- lib/towsta.rb
|
126
|
+
- lib/towsta/kinds/boolean.rb
|
127
|
+
- lib/towsta/kinds/date.rb
|
128
|
+
- lib/towsta/kinds/datetime.rb
|
129
|
+
- lib/towsta/kinds/file.rb
|
130
|
+
- lib/towsta/kinds/formated.rb
|
131
|
+
- lib/towsta/kinds/gallery.rb
|
132
|
+
- lib/towsta/kinds/image.rb
|
133
|
+
- lib/towsta/kinds/integer.rb
|
134
|
+
- lib/towsta/kinds/link.rb
|
135
|
+
- lib/towsta/kinds/list.rb
|
136
|
+
- lib/towsta/kinds/main.rb
|
137
|
+
- lib/towsta/kinds/money.rb
|
138
|
+
- lib/towsta/kinds/password.rb
|
139
|
+
- lib/towsta/kinds/text.rb
|
140
|
+
- lib/towsta/kinds/user.rb
|
141
|
+
- lib/towsta/kinds/vertical.rb
|
142
|
+
- lib/towsta/login.rb
|
126
143
|
- lib/towsta/memory.rb
|
127
144
|
- lib/towsta/sinatra_extension.rb
|
128
145
|
- lib/towsta/synchronizer.rb
|