amiba 0.0.2

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.
@@ -0,0 +1,148 @@
1
+ module Amiba
2
+ module Source
3
+
4
+ def self.included(base)
5
+ base.send :include, InstanceMethods
6
+ base.send :extend, ClassMethods
7
+ base.send :attr_reader, :name
8
+ base.send :include, ActiveModel::Validations
9
+ end
10
+
11
+ module ClassMethods
12
+
13
+ def metadata_fields(*names)
14
+ names.each do |name|
15
+ define_metadata_accessor(name)
16
+ end
17
+ end
18
+
19
+ def pluralized_name
20
+ name.demodulize.tableize
21
+ end
22
+
23
+ def define_metadata_accessor(name)
24
+ module_eval <<-STR
25
+ def #{name}
26
+ metadata[:#{name.to_s}]
27
+ end
28
+
29
+ def #{name}=(val)
30
+ metadata[:#{name.to_s}] = val
31
+ end
32
+ STR
33
+ end
34
+
35
+ end
36
+
37
+ module InstanceMethods
38
+ include Amiba::Repo
39
+
40
+ attr_accessor :format
41
+
42
+ def initialize(name, format='haml', metadata = nil, content = nil)
43
+ ext = File.extname name
44
+ fn = File.basename(name, ext)
45
+ dn = File.dirname name
46
+ f = dn == "." ? fn : File.join(dn, fn)
47
+
48
+ self.name = f
49
+ self.format = format
50
+ self.metadata = metadata
51
+ self.content = content
52
+ end
53
+
54
+ def filename
55
+ @filename ||= File.join(self.class.pluralized_name, "#{name}.#{format}")
56
+ end
57
+
58
+ def staged_filename
59
+ File.join Amiba::Configuration.staged_dir, filename
60
+ end
61
+
62
+ def new?
63
+ !File.exist?(filename)
64
+ end
65
+
66
+ def metadata_and_content
67
+ YAML.dump(metadata.to_hash) + YAML.dump(content)
68
+ end
69
+
70
+ def save(&block)
71
+ return false unless valid?
72
+ yield filename, metadata_and_content
73
+ true
74
+ end
75
+
76
+ def content
77
+ @content
78
+ end
79
+
80
+ def metadata
81
+ @metadata ||= source_valid? ? documents.first : {}
82
+ end
83
+
84
+ def pubdate
85
+ @metadata["pubdate"] ||= last_commit_date filename
86
+ end
87
+
88
+ protected
89
+
90
+ def method_missing(method_sym, *args, &block)
91
+ md = method_sym.to_s.gsub(/=$/,'')
92
+ if !metadata[md.to_s].nil?
93
+ self.class.define_metadata_accessor(md)
94
+ send(method_sym, *args, &block)
95
+ else
96
+ super
97
+ end
98
+ end
99
+
100
+ def name=(n)
101
+ @name = n
102
+ end
103
+
104
+ def metadata=(meta)
105
+ m = meta ? metadata.merge(meta) : metadata
106
+ @metadata = HashWithIndifferentAccess.new(m)
107
+ end
108
+
109
+ def content=(c)
110
+ return @content unless @content.nil?
111
+ @content = self.new? ? c : documents.last
112
+ end
113
+
114
+ def documents
115
+ @documents ||= YAML.load_stream(File.read(filename)).documents
116
+ rescue
117
+ nil
118
+ end
119
+
120
+ def source_valid?
121
+ documents.first && documents.last
122
+ rescue
123
+ false
124
+ end
125
+
126
+ end
127
+
128
+ class Page
129
+ include Amiba::Source
130
+ metadata_fields :layout, :title, :description, :category, :state
131
+
132
+ VALID_FORMATS = %w{haml markdown}
133
+ validates_presence_of :layout, :title, :description, :category, :state
134
+
135
+ def output_filename
136
+ File.join(Amiba::Configuration.site_dir, "public/#{name}.html")
137
+ end
138
+ end
139
+
140
+ class Layout
141
+ include Amiba::Source
142
+
143
+ def content=(c)
144
+ @content ||= self.new? ? c : File.read(filename)
145
+ end
146
+ end
147
+ end
148
+ end
data/lib/amiba.rb ADDED
@@ -0,0 +1,90 @@
1
+ module Amiba
2
+
3
+ class Util
4
+ def self.in_amiba_application?
5
+ File.exist? ".amiba"
6
+ end
7
+ end
8
+
9
+ module Generator
10
+
11
+ def self.included(base)
12
+ base.send :include, Thor::Actions
13
+ base.send :extend, ClassMethods
14
+ end
15
+
16
+ module ClassMethods
17
+ def source_root(path = nil)
18
+ default_source_root
19
+ end
20
+
21
+ def default_source_root
22
+ File.dirname(File.expand_path(File.join(__FILE__, "..")))
23
+ end
24
+ end
25
+ end
26
+
27
+ class Create < Thor::Group
28
+ include Generator
29
+
30
+ namespace :create
31
+
32
+ argument :name
33
+ class_option :path
34
+ class_option :default_page, :default => "index"
35
+
36
+ def init_git
37
+ @repo = Grit::Repo.init(target)
38
+ end
39
+
40
+ def create_gitignore
41
+ copy_file File.join("templates",'.gitignore'), File.join(target, '.gitignore')
42
+ end
43
+
44
+ def create_gemfile
45
+ copy_file 'Gemfile', File.join(target, 'Gemfile')
46
+ end
47
+
48
+ def create_project_structure
49
+ copy_file File.join('templates', '.amiba'), File.join(target, ".amiba")
50
+ %w{entries pages layouts}.each {|dirname|
51
+ directory File.join("templates", dirname), File.join(target, dirname)
52
+ }
53
+ end
54
+
55
+ def create_assets_structure
56
+ %w{public/js public/css public/images}.each do |dirname|
57
+ empty_directory File.join(target, dirname)
58
+ end
59
+ end
60
+
61
+ def create_default_page
62
+ inside(target, :verbose => true) do
63
+ invoke(Amiba::Page::Create,
64
+ [options[:default_page]],
65
+ :title => name.titleize,
66
+ :description => "#{name.titleize} Homepage. Please change this to be more descriptive")
67
+ end
68
+ end
69
+
70
+ def commit_to_git
71
+ Dir.chdir(@repo.working_dir) do
72
+ @repo.add %w{.amiba Gemfile layouts pages}
73
+ @repo.commit_all("Initial commit of #{name} project.")
74
+ end
75
+ end
76
+
77
+ private
78
+
79
+ def target
80
+ if options[:path]
81
+ File.expand_path(File.join(options[:path], name))
82
+ else
83
+ name
84
+ end
85
+ end
86
+
87
+ end
88
+ end
89
+
90
+
data/templates/.amiba ADDED
@@ -0,0 +1,4 @@
1
+ staged_dir: staged
2
+ site_dir: site
3
+ default_page_format: haml
4
+ default_entry_format: markdown
File without changes
@@ -0,0 +1,6 @@
1
+ !!! 5
2
+ %html
3
+ %head
4
+
5
+ %body
6
+ = content
File without changes
@@ -0,0 +1,9 @@
1
+ title: <%= @page[:title] %>
2
+ description: <%= @page[:description] %>
3
+ layout: <%= @page[:layout] %>
4
+
5
+ ===
6
+
7
+ %h1 Put your title here
8
+
9
+ %p Put your page body here
@@ -0,0 +1,8 @@
1
+ title: <%= @page[:title] %>
2
+ description: <%= @page[:description] %>
3
+
4
+ ===
5
+
6
+ h1. Put your title here
7
+
8
+ p. Put your page body here
metadata ADDED
@@ -0,0 +1,282 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: amiba
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 2
10
+ version: 0.0.2
11
+ platform: ruby
12
+ authors:
13
+ - Steven Mohapi-Banks
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-03-18 00:00:00 +00:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: thor
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 43
30
+ segments:
31
+ - 0
32
+ - 14
33
+ - 6
34
+ version: 0.14.6
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: tilt
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ hash: 29
46
+ segments:
47
+ - 1
48
+ - 2
49
+ - 1
50
+ version: 1.2.1
51
+ type: :runtime
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ name: haml
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ hash: 53
62
+ segments:
63
+ - 3
64
+ - 0
65
+ - 25
66
+ version: 3.0.25
67
+ type: :runtime
68
+ version_requirements: *id003
69
+ - !ruby/object:Gem::Dependency
70
+ name: activesupport
71
+ prerelease: false
72
+ requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ hash: 15
78
+ segments:
79
+ - 3
80
+ - 0
81
+ - 4
82
+ version: 3.0.4
83
+ type: :runtime
84
+ version_requirements: *id004
85
+ - !ruby/object:Gem::Dependency
86
+ name: activemodel
87
+ prerelease: false
88
+ requirement: &id005 !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ hash: 15
94
+ segments:
95
+ - 3
96
+ - 0
97
+ - 4
98
+ version: 3.0.4
99
+ type: :runtime
100
+ version_requirements: *id005
101
+ - !ruby/object:Gem::Dependency
102
+ name: i18n
103
+ prerelease: false
104
+ requirement: &id006 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ hash: 11
110
+ segments:
111
+ - 0
112
+ - 5
113
+ - 0
114
+ version: 0.5.0
115
+ type: :runtime
116
+ version_requirements: *id006
117
+ - !ruby/object:Gem::Dependency
118
+ name: rdiscount
119
+ prerelease: false
120
+ requirement: &id007 !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ hash: 31
126
+ segments:
127
+ - 1
128
+ - 6
129
+ - 8
130
+ version: 1.6.8
131
+ type: :runtime
132
+ version_requirements: *id007
133
+ - !ruby/object:Gem::Dependency
134
+ name: fog
135
+ prerelease: false
136
+ requirement: &id008 !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ hash: 7
142
+ segments:
143
+ - 0
144
+ - 6
145
+ - 0
146
+ version: 0.6.0
147
+ type: :runtime
148
+ version_requirements: *id008
149
+ - !ruby/object:Gem::Dependency
150
+ name: rspec
151
+ prerelease: false
152
+ requirement: &id009 !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ hash: 3
158
+ segments:
159
+ - 0
160
+ version: "0"
161
+ type: :development
162
+ version_requirements: *id009
163
+ - !ruby/object:Gem::Dependency
164
+ name: rspec_tag_matchers
165
+ prerelease: false
166
+ requirement: &id010 !ruby/object:Gem::Requirement
167
+ none: false
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ hash: 3
172
+ segments:
173
+ - 0
174
+ version: "0"
175
+ type: :development
176
+ version_requirements: *id010
177
+ - !ruby/object:Gem::Dependency
178
+ name: autotest
179
+ prerelease: false
180
+ requirement: &id011 !ruby/object:Gem::Requirement
181
+ none: false
182
+ requirements:
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ hash: 3
186
+ segments:
187
+ - 0
188
+ version: "0"
189
+ type: :development
190
+ version_requirements: *id011
191
+ - !ruby/object:Gem::Dependency
192
+ name: factory_girl
193
+ prerelease: false
194
+ requirement: &id012 !ruby/object:Gem::Requirement
195
+ none: false
196
+ requirements:
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ hash: 62196449
200
+ segments:
201
+ - 2
202
+ - 0
203
+ - 0
204
+ - beta
205
+ - 1
206
+ version: 2.0.0.beta1
207
+ type: :development
208
+ version_requirements: *id012
209
+ description: Description TBD
210
+ email:
211
+ - s.mohapi-banks@digital-science.com
212
+ executables:
213
+ - amiba
214
+ extensions: []
215
+
216
+ extra_rdoc_files: []
217
+
218
+ files:
219
+ - bin/amiba
220
+ - bin/amiba-wp-import
221
+ - lib/amiba/all.rb
222
+ - lib/amiba/configuration.rb
223
+ - lib/amiba/core_ext/file.rb
224
+ - lib/amiba/core_ext/symbol.rb
225
+ - lib/amiba/entry.rb
226
+ - lib/amiba/page.rb
227
+ - lib/amiba/repo.rb
228
+ - lib/amiba/reverse_markdown.rb
229
+ - lib/amiba/scope.rb
230
+ - lib/amiba/site.rb
231
+ - lib/amiba/source/entry.rb
232
+ - lib/amiba/source/entry_finder.rb
233
+ - lib/amiba/source/feed.rb
234
+ - lib/amiba/source/partial.rb
235
+ - lib/amiba/source.rb
236
+ - lib/amiba.rb
237
+ - templates/layouts/default.haml.tt
238
+ - templates/skeletons/page.haml.tt
239
+ - templates/skeletons/page.md.tt
240
+ - templates/entries/.empty_directory
241
+ - templates/pages/.empty_directory
242
+ - Thorfile
243
+ - Gemfile
244
+ - templates/.amiba
245
+ has_rdoc: true
246
+ homepage: http://www.digital-science.com
247
+ licenses: []
248
+
249
+ post_install_message:
250
+ rdoc_options: []
251
+
252
+ require_paths:
253
+ - lib
254
+ required_ruby_version: !ruby/object:Gem::Requirement
255
+ none: false
256
+ requirements:
257
+ - - ">="
258
+ - !ruby/object:Gem::Version
259
+ hash: 3
260
+ segments:
261
+ - 0
262
+ version: "0"
263
+ required_rubygems_version: !ruby/object:Gem::Requirement
264
+ none: false
265
+ requirements:
266
+ - - ">="
267
+ - !ruby/object:Gem::Version
268
+ hash: 23
269
+ segments:
270
+ - 1
271
+ - 3
272
+ - 6
273
+ version: 1.3.6
274
+ requirements: []
275
+
276
+ rubyforge_project:
277
+ rubygems_version: 1.6.2
278
+ signing_key:
279
+ specification_version: 3
280
+ summary: Simple gem to build a static web-site
281
+ test_files: []
282
+