nocms 0.1.4 → 0.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.
@@ -1,18 +1,29 @@
1
- = nocms
1
+ = NOCMS
2
2
 
3
- NOCMS is a web service that allows you to add basic Content Management to any website. It provides wiki-style editing with a
4
- few lines of Javascript, and server-sdie rendering and user authentication support with just some simple server-side integration.
3
+ NOCMS is a web service that allows you to add basic Content Management to any website.
4
+ It provides wiki-style editing with a few lines of Javascript, and server-side rendering
5
+ and user authentication support with just some simple server-side integration.
5
6
 
6
- If you've ever been involved in hand-to-hand combat with a big, ugly, hard to customize Content Management System (CMS), then NOCMS might be right for your.
7
+ If you've ever been involved in hand-to-hand combat with a big, ugly, hard to customize
8
+ Content Management System (CMS), then NOCMS might be right for you.
9
+
10
+ Website: http://www.nocms.org
11
+ Mailing List: http://groups.google.com/group/nocms
12
+ Twitter: http://twitter.com/powcloud
13
+
14
+ == Changes
15
+
16
+ * 0.2.0
17
+ * Added Rails support incl. caching
18
+ * First stab at unit tests
19
+ * 0.1.0 First prototype of the ruby gem - Sinatra support
7
20
 
8
- http://www.nocms.org/
9
21
 
10
22
  == Note on Patches/Pull Requests
11
23
 
12
24
  * Fork the project.
13
25
  * Make your feature addition or bug fix.
14
- * Add tests for it. This is important so I don't break it in a
15
- future version unintentionally.
26
+ * Add tests for it. This is important so I don't break it in a future version unintentionally.
16
27
  * Commit, do not mess with rakefile, version, or history.
17
28
  (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
18
29
  * Send me a pull request. Bonus points for topic branches.
data/Rakefile CHANGED
@@ -10,7 +10,7 @@ begin
10
10
  gem.email = "nocms@powcloud.com"
11
11
  gem.homepage = "http://github.com/powcloud/nocms"
12
12
  gem.authors = ["Darren Rush"]
13
- gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
13
+ gem.add_development_dependency "shoulda"
14
14
  gem.add_dependency "activesupport"
15
15
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
16
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.4
1
+ 0.2.0
@@ -3,38 +3,141 @@ require 'net/http'
3
3
  require 'uri'
4
4
  require 'cgi'
5
5
 
6
- @@nocms_pages = nil
7
6
 
8
7
  # This is a default, that might be override by the app
9
- @@nocms_lang_default = 'en'
10
8
 
11
- def nocms_can_edit?()
12
- settings.environment != :production
9
+ module NoCMS
10
+ class Cache < Hash
11
+ def read(key)
12
+ self[key]
13
+ end
14
+
15
+ def write(key, value)
16
+ self[key] = value.to_s
17
+ end
18
+ end
19
+
20
+ class Base
21
+ class << self
22
+ attr_accessor :site
23
+ attr_accessor :lang_default
24
+
25
+ NoCMS::Base.lang_default = 'en'
26
+
27
+ #@@nocms_lang_default = 'en'
28
+ @@nocms_cache = NoCMS::Cache.new
29
+
30
+ def environment
31
+ return RAILS_ENV if rails?
32
+ return (!!defined? settings && !settings.environment.nil?) ? settings.environment : 'development-nocms-test'
33
+ end
34
+
35
+ def rails?
36
+ !!defined? Rails
37
+ end
38
+
39
+ def diagnostic
40
+ buffer = ''
41
+ buffer += "NoCMS Diagnostics\n"
42
+ buffer += " Rails: #{rails?}\n"
43
+ if rails?
44
+ buffer += " Cache Store: #{ActionController::Base.cache_store}\n"
45
+ buffer += " Cache (Object): #{Rails.cache}\n"
46
+ end
47
+
48
+ buffer += " Cache: #{cache.class}\n"
49
+ buffer += " Environment: #{environment}\n"
50
+ buffer += " Site Key: #{site}\n"
51
+ buffer += " Default Language: #{lang_default}\n"
52
+ buffer
53
+ end
54
+
55
+ def build_key(path, xpath)
56
+ "NOCMS:#{path}:#{xpath}"
57
+ end
58
+
59
+ def cache()
60
+ rails? ? Rails.cache : @@nocms_cache
61
+ end
62
+
63
+ def ensure_cache()
64
+ tmp = cache.read("NOCMS:#{site}:updated_at")
65
+ updated_at = Marshal.load(tmp) if !tmp.nil?
66
+ load_cache if updated_at.nil? || updated_at < Time.now - 5*60
67
+ end
68
+
69
+ def load_cache
70
+ start_time = Time.now
71
+ raise '[NOCMS] Must specify a site' if NoCMS::Base.site.nil?
72
+
73
+ cache.write("NOCMS:#{site}:updated_at", Marshal.dump(Time.now))
74
+
75
+ # save this for a bit
76
+ tmp = cache.read("NOCMS:#{site}:keys")
77
+ old_keys = !tmp.nil? ? ActiveSupport::JSON.decode(tmp) : {}
78
+
79
+ # load the new stuff
80
+ rq = "http://api.nocms.org/nocms/1.0/export?site=#{site}"
81
+ json = Net::HTTP.get(URI.parse(rq))
82
+ new_blocks = ActiveSupport::JSON.decode(json)
83
+ #Rails.cache["NOCMS:#{site}:json"] = json
84
+ cache.write("NOCMS:#{site}:keys", new_blocks.collect {|block| build_key(block['block']['path'], block['block']['xpath'])} )
85
+ # add new keys and update existing
86
+ new_blocks.each do |block|
87
+ p = block['block']
88
+ #@@nocms_pages["#{p['path']}:#{p['xpath']}"] = p['content']
89
+ key = build_key(p['path'], p['xpath'])
90
+ cache.write(key, p['content'])
91
+ old_keys.delete(key)
92
+ end
93
+
94
+ # purge keys that have been deleted
95
+ old_keys.each {|key| cache.delete(key)}
96
+
97
+ updated_count = new_blocks.length
98
+ deleted_count = old_keys.length
99
+
100
+ puts "Loaded #{updated_count} blocks and deleted #{deleted_count} in #{Time.now-start_time}"
101
+ end
102
+
103
+ def can_edit?()
104
+ environment != :production
105
+ end
106
+
107
+ end
108
+
109
+ end
110
+
13
111
  end
14
112
 
113
+ #module ActionView
114
+ # class Base
115
+
116
+ # def nocms_block2(id, options = {})
117
+ # "NOCMS WAS HERE!"
118
+ # end
119
+ # end
120
+ #end
121
+
122
+
123
+
15
124
  def nocms_block(id, options = {})
16
125
  raise 'Must specify an element id as the first parameter. :tag and :content are optional params' if id.nil?
17
-
126
+
127
+ #request = ActionController::Base.request ||= Sinatra::Base.request
128
+
18
129
  tag = options[:tag] ||= 'div'
19
- site = options[:site] ||= settings.nocms_site ||= request.host_with_port
20
- path = options[:path] ||= request.path_info
130
+ site = options[:site] ||= NoCMS::Base.site # ||= request.host_with_port
131
+ path = options[:path] ||= request.path ||= request.path_info
21
132
  lang = options[:lang] ||= request.env['HTTP_ACCEPT_LANGUAGE'].nil? ? nil : request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first ||= 'en'
133
+ lang_default = NoCMS::Base.lang_default
22
134
 
23
- if @@nocms_pages.nil? || @@nocms_pages_updated_at < Time.now - 3*60
24
- @@nocms_pages_updated_at = Time.now
25
- rq = "http://api.nocms.org/nocms/1.0/export?site=#{site}"
26
- json = Net::HTTP.get(URI.parse(rq))
27
- results = ActiveSupport::JSON.decode(json)
28
- @@nocms_pages = Hash.new
29
- results.each do |block|
30
- p = block['block']
31
- @@nocms_pages["#{p['path']}:#{p['xpath']}"] = p['content']
32
- end
33
- puts "Loaded #{results.length} blocks"
34
- end
135
+ NoCMS::Base.ensure_cache()
35
136
 
36
- content = @@nocms_pages["/#{lang}#{path}:#{id}"] ||= @@nocms_pages["/#{@@nocms_lang_default}:#{path}:#{id}"] ||= options[:default] ||= 'Lorem ipsum'
137
+ ## TODO: exception throw when these are consolidated????
138
+ content = NoCMS::Base.cache.read(NoCMS::Base.build_key("/#{lang}#{path}", id))
139
+ content = content ||= NoCMS::Base.cache.read(NoCMS::Base.build_key("/#{lang_default}#{path}", id)) if lang != lang_default
140
+ content = content ||= options[:default] ||= 'Lorem ipsum'
37
141
 
38
- # "%#{tag}\##{id}.edit #{content}"
39
142
  "<#{tag} id='#{id}' class='nocms_edit'>#{content}</#{tag}>"
40
143
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{nocms}
8
- s.version = "0.1.4"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Darren Rush"]
12
- s.date = %q{2010-08-18}
12
+ s.date = %q{2010-08-20}
13
13
  s.description = %q{A Ruby client for the NOCMS.org web service API. Provides server-side helpers for Rails/Sinatra/Rack applications. keywords: ruby, rails, sinatra, rack, CMS, content management systems, search, cloud, SAAS, JSON, web service}
14
14
  s.email = %q{nocms@powcloud.com}
15
15
  s.extra_rdoc_files = [
@@ -43,14 +43,14 @@ Gem::Specification.new do |s|
43
43
  s.specification_version = 3
44
44
 
45
45
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
46
- s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
46
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
47
47
  s.add_runtime_dependency(%q<activesupport>, [">= 0"])
48
48
  else
49
- s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
49
+ s.add_dependency(%q<shoulda>, [">= 0"])
50
50
  s.add_dependency(%q<activesupport>, [">= 0"])
51
51
  end
52
52
  else
53
- s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
53
+ s.add_dependency(%q<shoulda>, [">= 0"])
54
54
  s.add_dependency(%q<activesupport>, [">= 0"])
55
55
  end
56
56
  end
@@ -1,7 +1,13 @@
1
1
  require 'helper'
2
2
 
3
- class TestNocms < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
3
+ class NocmsTests < Test::Unit::TestCase
4
+ NoCMS::Base.site = 'powcloud.com:not-so-secret'
5
+
6
+ should "run diagnostics" do
7
+ puts NoCMS::Base.diagnostic
8
+ end
9
+
10
+ should "load cache" do
11
+ NoCMS::Base.ensure_cache()
6
12
  end
7
13
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nocms
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 4
10
- version: 0.1.4
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Darren Rush
@@ -15,11 +15,11 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-18 00:00:00 -07:00
18
+ date: 2010-08-20 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: thoughtbot-shoulda
22
+ name: shoulda
23
23
  prerelease: false
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
25
  none: false