aina 0.2.0.beta
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.
- checksums.yaml +7 -0
- data/README.rdoc +6 -0
- data/aina.rdoc +5 -0
- data/bin/aina +143 -0
- data/lib/aina.rb +53 -0
- data/lib/aina/addable.rb +106 -0
- data/lib/aina/generable.rb +62 -0
- data/lib/aina/generable/base.rb +72 -0
- data/lib/aina/generable/types/post_type.rb +49 -0
- data/lib/aina/globals.rb +3 -0
- data/lib/aina/support.rb +46 -0
- data/lib/aina/version.rb +3 -0
- data/templates/add.php +29 -0
- data/templates/aina_framework.php +138 -0
- data/templates/post_type.php +101 -0
- metadata +122 -0
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: 9bf384084ac4dcc6deb23c59231c73d92fc8676e
         | 
| 4 | 
            +
              data.tar.gz: e1a802445afe753a40e06b6f70d558b92e015a52
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: 759048bad7a66d82e8435a7daa4bd74d4a47ce78fa28166ec11c893d228d1c50ff527464f4896ba292da46ac5c7736b8b4edab6bf7a902ab35e358f42d1cc755
         | 
| 7 | 
            +
              data.tar.gz: 804cb8f919f337a57743ecffd388391ac07cbf32ba542be302586d4505f07955524e09e2bb34f75109886679fe363027b4f38a3a443f12fed19f4c34b0a6b861
         | 
    
        data/README.rdoc
    ADDED
    
    
    
        data/aina.rdoc
    ADDED
    
    
    
        data/bin/aina
    ADDED
    
    | @@ -0,0 +1,143 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
            require 'gli'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require 'aina' 
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            include GLI::App
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            program_desc 'Code generator for WordPress themes'
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            version Aina::VERSION
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            # desc 'Describe some switch here'
         | 
| 13 | 
            +
            # switch [:s,:switch]
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            # desc 'Describe some flag here'
         | 
| 16 | 
            +
            # default_value 'the default'
         | 
| 17 | 
            +
            # arg_name 'The name of the argument'
         | 
| 18 | 
            +
            # flag [:f,:flagname]
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            desc 'Generates a piece of code from a template'
         | 
| 21 | 
            +
            arg_name 'element_type element_name'
         | 
| 22 | 
            +
            command [:generate, :g] do |c|
         | 
| 23 | 
            +
              # c.desc 'Describe a switch to generate'
         | 
| 24 | 
            +
              # c.switch :s
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              c.desc '[post_type] Content fields that a post_type supports, comma separated'
         | 
| 27 | 
            +
              c.default_value PostType::DEFAULT_SUPPORT
         | 
| 28 | 
            +
              c.arg_name 'supports'
         | 
| 29 | 
            +
              c.flag [:s, :supports]
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              c.desc '[post_type] Capability type'
         | 
| 32 | 
            +
              c.default_value PostType::DEFAULT_CAPABILITY
         | 
| 33 | 
            +
              c.arg_name 'capability'
         | 
| 34 | 
            +
              c.flag [:c, :capability]
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              c.desc 'Install Aina framework to easily create custom post_type fields'
         | 
| 37 | 
            +
              c.switch [:i, :install]
         | 
| 38 | 
            +
             | 
| 39 | 
            +
              c.action do |global_options,options,args|
         | 
| 40 | 
            +
                @type = args.shift
         | 
| 41 | 
            +
                @name = args.shift
         | 
| 42 | 
            +
                
         | 
| 43 | 
            +
                if @type.nil?
         | 
| 44 | 
            +
                  raise NoMethodError, 'You need to generate something'
         | 
| 45 | 
            +
                elsif @name.nil?
         | 
| 46 | 
            +
                  raise NoMethodError, 'You need to put a name to what you want tot generate'
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                if Generable.accepts?(@type)
         | 
| 50 | 
            +
                  element = Object.const_get(Generable.class_name_for @type).new(@name, options)
         | 
| 51 | 
            +
                  unless File.exists?(element.file)
         | 
| 52 | 
            +
                    element.generate
         | 
| 53 | 
            +
                  else
         | 
| 54 | 
            +
                    raise Exception, "A #{@type} named #{element.name} already exists. Action aborted."
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
                  
         | 
| 57 | 
            +
                  output = "A #{@type} with name #{element.name} has been succesfully generated"
         | 
| 58 | 
            +
                  if options[:i]
         | 
| 59 | 
            +
                    output += ". Also, Aina's framework has been added.\n"
         | 
| 60 | 
            +
                  end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                  puts output
         | 
| 63 | 
            +
                else
         | 
| 64 | 
            +
                  raise Exception, "#{@type} is not a generable piece of code. Options are: #{Generable.generable_types.join(', ')}"
         | 
| 65 | 
            +
                end
         | 
| 66 | 
            +
              end
         | 
| 67 | 
            +
            end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
            desc 'Destroys a generated piece of code'
         | 
| 70 | 
            +
            arg_name 'element_type element_name'
         | 
| 71 | 
            +
            command [:destroy] do |c|
         | 
| 72 | 
            +
              c.action do |global_options,options,args|
         | 
| 73 | 
            +
                @type = args.shift
         | 
| 74 | 
            +
                @name = args.shift
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                if @type.nil?
         | 
| 77 | 
            +
                  raise NoMethodError, 'You must specify what kind of file you want to destroy (i.e. post_type)'
         | 
| 78 | 
            +
                elsif @name.nil?
         | 
| 79 | 
            +
                  raise NoMethodError, 'You must specify the name of what you want to destroy'
         | 
| 80 | 
            +
                end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                if Generable.accepts?(@type)
         | 
| 83 | 
            +
                  element = Object.const_get(Generable.class_name_for @type).new(@name)
         | 
| 84 | 
            +
                  if element.destroy
         | 
| 85 | 
            +
                    puts "The #{@type} #{element.name} has been succesfully destroyed"
         | 
| 86 | 
            +
                  end
         | 
| 87 | 
            +
                else
         | 
| 88 | 
            +
                  raise Exception, "#{@type} is not a destroyable piece of code. Options are: #{Generable.generable_types.join(', ')}"
         | 
| 89 | 
            +
                end
         | 
| 90 | 
            +
              end
         | 
| 91 | 
            +
            end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
            desc 'Add custom fields to post_types'
         | 
| 94 | 
            +
            arg_name 'element_name field:type'
         | 
| 95 | 
            +
            command [:add] do |c|
         | 
| 96 | 
            +
              c.action do |global_options,options,args|
         | 
| 97 | 
            +
                @name = args.shift
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                if @name.nil?
         | 
| 100 | 
            +
                  raise Exception, "Please, write the name of the post_type"
         | 
| 101 | 
            +
                end
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                unless Aina.is_installed?
         | 
| 104 | 
            +
                  Aina.install
         | 
| 105 | 
            +
                  puts "We have installed Aina's framework for you. Next time, you can run `aina install` yourself ;-)"
         | 
| 106 | 
            +
                end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                add = Addable.new(@name, args)
         | 
| 109 | 
            +
                add.add_custom_fields
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                puts "#{add.fields.map{|f| f[:key]}} fields have been added to #{@name}"
         | 
| 112 | 
            +
              end
         | 
| 113 | 
            +
            end
         | 
| 114 | 
            +
             | 
| 115 | 
            +
            desc 'Installs Aina framework, that allows you to easily create custom fields for post_types'
         | 
| 116 | 
            +
            arg_name 'field:type'
         | 
| 117 | 
            +
            command [:install] do |c|
         | 
| 118 | 
            +
              c.action do |global_options, options, args|
         | 
| 119 | 
            +
                Aina.install(true)
         | 
| 120 | 
            +
              end
         | 
| 121 | 
            +
            end
         | 
| 122 | 
            +
             | 
| 123 | 
            +
            pre do |global,command,options,args|
         | 
| 124 | 
            +
              unless is_wordpress_theme? or tests_being_runned?
         | 
| 125 | 
            +
                puts "This does not look like a WordPress theme"
         | 
| 126 | 
            +
                return false
         | 
| 127 | 
            +
              end
         | 
| 128 | 
            +
              true
         | 
| 129 | 
            +
            end
         | 
| 130 | 
            +
             | 
| 131 | 
            +
            post do |global,command,options,args|
         | 
| 132 | 
            +
              # Post logic here
         | 
| 133 | 
            +
              # Use skips_post before a command to skip this
         | 
| 134 | 
            +
              # block on that command only
         | 
| 135 | 
            +
            end
         | 
| 136 | 
            +
             | 
| 137 | 
            +
            on_error do |exception|
         | 
| 138 | 
            +
              # Error logic here
         | 
| 139 | 
            +
              # return false to skip default error handling
         | 
| 140 | 
            +
              true
         | 
| 141 | 
            +
            end
         | 
| 142 | 
            +
             | 
| 143 | 
            +
            exit run(ARGV)
         | 
    
        data/lib/aina.rb
    ADDED
    
    | @@ -0,0 +1,53 @@ | |
| 1 | 
            +
            # Lib
         | 
| 2 | 
            +
            Dir.glob(File.dirname(__FILE__) + "/aina/*.rb") { |file|  require file }
         | 
| 3 | 
            +
            Dir.glob(File.dirname(__FILE__) + "/aina/generable/*.rb") { |file|  require file }
         | 
| 4 | 
            +
            Dir.glob(File.dirname(__FILE__) + "/aina/generable/types/*.rb") { |file|  require file }
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            # Templates
         | 
| 7 | 
            +
            Dir.glob(File.expand_path('..') + "/templates/*") { |file|  require file }
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            module Aina
         | 
| 10 | 
            +
            	def self.aina_version
         | 
| 11 | 
            +
            		Aina::VERSION
         | 
| 12 | 
            +
            	end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            	def self.install(output = false)
         | 
| 15 | 
            +
            		unless Dir.exists?(Dir.pwd + '/inc')
         | 
| 16 | 
            +
            			Dir.mkdir(Dir.pwd + '/inc')
         | 
| 17 | 
            +
            		end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            		# Install Aina
         | 
| 20 | 
            +
            		unless self.is_installed?
         | 
| 21 | 
            +
            			text = File.read(Aina::TEMPLATES_DIR + '/aina_framework.php')
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            			['{{aina_version}}'].each do |replace|
         | 
| 24 | 
            +
            				attribute = replace.gsub(/[{}]/, '')
         | 
| 25 | 
            +
            				@output = text.gsub!(/#{replace}/, self.send(attribute))
         | 
| 26 | 
            +
            			end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            			File.open(Dir.pwd + "/inc/aina.php", "w") {|file| file.puts @output}
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            			message = "Aina has been installed in your WordPress theme.\n"
         | 
| 31 | 
            +
            			message += "\n\nIf you want your post type to be automatically included, put this is functions.php:\n"
         | 
| 32 | 
            +
            	    message += "function aina_post_types() {\n"
         | 
| 33 | 
            +
            	    message += " return array('your_post_type', 'another_post_type', 'etc');\n"
         | 
| 34 | 
            +
            	    message += "}\n"
         | 
| 35 | 
            +
            		else
         | 
| 36 | 
            +
            			message = "Aina was already installed in your WordPress theme ;-)\n"
         | 
| 37 | 
            +
            		end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            		# Include Aina
         | 
| 40 | 
            +
            		unless functions_php_exists?
         | 
| 41 | 
            +
            			create_empty_functions_php
         | 
| 42 | 
            +
            		end
         | 
| 43 | 
            +
            		File.open(functions_php, "a+") {|file| file.puts aina_inclusion}
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            		if output
         | 
| 46 | 
            +
            	    puts message
         | 
| 47 | 
            +
            	  end
         | 
| 48 | 
            +
            	end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
            	def self.is_installed?
         | 
| 51 | 
            +
            		File.exists?(Dir.pwd + "/inc/aina.php")
         | 
| 52 | 
            +
            	end
         | 
| 53 | 
            +
            end
         | 
    
        data/lib/aina/addable.rb
    ADDED
    
    | @@ -0,0 +1,106 @@ | |
| 1 | 
            +
            class Addable
         | 
| 2 | 
            +
            	attr_accessor :name, :aina_version, :fields
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            	def initialize(name, fields = nil)
         | 
| 5 | 
            +
            		@type = 'post_type'
         | 
| 6 | 
            +
            		@name = validate_name(name)
         | 
| 7 | 
            +
            		@aina_version = Aina::VERSION
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            		parse_fields(fields)
         | 
| 10 | 
            +
            	end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            	def parse_fields(fields)
         | 
| 13 | 
            +
            		@fields = Array.new
         | 
| 14 | 
            +
            		fields.each do |f|
         | 
| 15 | 
            +
            			a = f.split(':')
         | 
| 16 | 
            +
            			# TODO: Validate type against a whitelist
         | 
| 17 | 
            +
            			@fields << {key: a[0], type: a[1]}
         | 
| 18 | 
            +
            		end
         | 
| 19 | 
            +
            	end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            	def fields_php_array
         | 
| 22 | 
            +
            		a = ''
         | 
| 23 | 
            +
            		@fields.each do |f|
         | 
| 24 | 
            +
            			a += "'#{f[:key]}' => array(\n"
         | 
| 25 | 
            +
            			a += "  'label'     => '#{f[:key].capitalize}',\n"
         | 
| 26 | 
            +
            			a += "  'type'      => '#{f[:type]}',\n"
         | 
| 27 | 
            +
            			a += "  'options' 	=> array('option_1', 'option_2', 'etc'),\n" if %w(radio checkbox select).include?(f[:type])
         | 
| 28 | 
            +
            			a += "),\n"
         | 
| 29 | 
            +
            		end
         | 
| 30 | 
            +
            		a
         | 
| 31 | 
            +
            	end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            	def custom_fields
         | 
| 34 | 
            +
            		c = Array.new
         | 
| 35 | 
            +
            		c << "/**"
         | 
| 36 | 
            +
            		c << " * Custom data fields"
         | 
| 37 | 
            +
            		c << " * Add these custom fields to the #{@name} post type"
         | 
| 38 | 
            +
            		c << " * IMPORTANT: Thou shalt not rename this function, or bad things may happen"
         | 
| 39 | 
            +
            		c << " */"
         | 
| 40 | 
            +
            		c << "if ( ! function_exists( '#{@name}_custom_fields' ) ) {"
         | 
| 41 | 
            +
            		c << " function #{@name}_custom_fields() {"
         | 
| 42 | 
            +
            		c << "	 return array("
         | 
| 43 | 
            +
            		c << "     #{fields_php_array}"
         | 
| 44 | 
            +
            		c << "	 );"
         | 
| 45 | 
            +
            		c << " }"
         | 
| 46 | 
            +
            		c << "}"
         | 
| 47 | 
            +
            		c.join("\n")
         | 
| 48 | 
            +
            	end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
            	def add_custom_fields
         | 
| 51 | 
            +
            		@file = Dir.pwd + "/post-types/#{@name}.php"
         | 
| 52 | 
            +
            		
         | 
| 53 | 
            +
            		# The post type wasn't using custom fields yet, 
         | 
| 54 | 
            +
            		# so wrap them with the custom_fields function
         | 
| 55 | 
            +
            		unless File.read(@file).include? "function #{@name}_custom_fields"
         | 
| 56 | 
            +
            			File.open(@file, 'a+') {|file| file.puts custom_fields}
         | 
| 57 | 
            +
            		else
         | 
| 58 | 
            +
            			output = Array.new
         | 
| 59 | 
            +
            			counter = 0 # This will help us keep track of lines
         | 
| 60 | 
            +
             | 
| 61 | 
            +
            			File.open(@file).each do |line|
         | 
| 62 | 
            +
            				output << line
         | 
| 63 | 
            +
             | 
| 64 | 
            +
            				# When we reach a line that includes "function #{@name}_custom_fields"
         | 
| 65 | 
            +
            				# it means that we have to add the items two lines later
         | 
| 66 | 
            +
            				if line.include?("function #{@name}_custom_fields")
         | 
| 67 | 
            +
            					# Negative number, so we know that this + 1 will we the line
         | 
| 68 | 
            +
            					# after which we want to add text
         | 
| 69 | 
            +
            					counter = -2
         | 
| 70 | 
            +
            				end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
            				# Ok! It's ok to add the new items here, after 'return array('
         | 
| 73 | 
            +
            				if counter === -1 and line.include?('return array(')
         | 
| 74 | 
            +
            					output << fields_php_array
         | 
| 75 | 
            +
            				end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
            				counter = counter + 1
         | 
| 78 | 
            +
            			end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
            			File.open(@file, 'w') {|file| file.puts output}
         | 
| 81 | 
            +
            		end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
            		# Make sure they can be saved
         | 
| 84 | 
            +
            		text = File.read(@file)
         | 
| 85 | 
            +
            		unless text.include? "function #{@name}_meta_box"
         | 
| 86 | 
            +
            			template = File.read("#{Aina::TEMPLATES_DIR}/add.php")
         | 
| 87 | 
            +
            			['{{name}}'].each do |replace|
         | 
| 88 | 
            +
            				attribute = replace.gsub(/[{}]/, '')
         | 
| 89 | 
            +
            				@output = template.gsub!(/#{replace}/, self.send(attribute))
         | 
| 90 | 
            +
            			end
         | 
| 91 | 
            +
            			File.open(@file, "a+") {|file| file.puts @output}
         | 
| 92 | 
            +
            		end
         | 
| 93 | 
            +
            	end
         | 
| 94 | 
            +
             | 
| 95 | 
            +
            	def self.accepts?(type)
         | 
| 96 | 
            +
            		Generable.accepts?(type)
         | 
| 97 | 
            +
            	end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
            	protected
         | 
| 100 | 
            +
            		def validate_name(name)
         | 
| 101 | 
            +
            			unless File.exists?(Dir.pwd + "/post-types/#{name}.php")
         | 
| 102 | 
            +
            				raise Exception, "There's no file named /post-types/#{name}.php"
         | 
| 103 | 
            +
            			end
         | 
| 104 | 
            +
            			name
         | 
| 105 | 
            +
            		end
         | 
| 106 | 
            +
            end
         | 
| @@ -0,0 +1,62 @@ | |
| 1 | 
            +
            module Generable
         | 
| 2 | 
            +
            	# List of generable types
         | 
| 3 | 
            +
            	def self.generable_types
         | 
| 4 | 
            +
            		g = Array.new
         | 
| 5 | 
            +
            		Dir.glob(File.dirname(__FILE__) + "/generable/types/*.rb").each do |f|
         | 
| 6 | 
            +
            			g << f.split('/').last.split('.rb').join()
         | 
| 7 | 
            +
            		end
         | 
| 8 | 
            +
            		g
         | 
| 9 | 
            +
            	end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            	def self.class_name_for(type)
         | 
| 12 | 
            +
            		"Generable::#{type.camelcase}"
         | 
| 13 | 
            +
            	end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            	# Is generable?
         | 
| 16 | 
            +
            	def self.accepts?(type)
         | 
| 17 | 
            +
            		generable_types.include?(type)
         | 
| 18 | 
            +
            	end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            	# Does type need to be created in a directory?
         | 
| 21 | 
            +
            	# Then, in type use: 
         | 
| 22 | 
            +
            	# dir 'my-directory'
         | 
| 23 | 
            +
            	def dir(directory)
         | 
| 24 | 
            +
            		@dir = directory
         | 
| 25 | 
            +
            	end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            	def get_dir
         | 
| 28 | 
            +
            		@dir
         | 
| 29 | 
            +
            	end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            	# Does type use a template?
         | 
| 32 | 
            +
            	# Then, in type use: 
         | 
| 33 | 
            +
            	# template 'my-template.php'
         | 
| 34 | 
            +
            	def template(template)
         | 
| 35 | 
            +
            		@template = "#{Aina::TEMPLATES_DIR}/#{template}" if template
         | 
| 36 | 
            +
            	end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            	def get_template
         | 
| 39 | 
            +
            		@template
         | 
| 40 | 
            +
            	end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            	# Does type template need custom replacements?
         | 
| 43 | 
            +
            	# Then, in type use: 
         | 
| 44 | 
            +
            	# replacements %w({{replace_this}} {{and_this_too}})
         | 
| 45 | 
            +
            	def replacements(*replacements)
         | 
| 46 | 
            +
            		@replacements = %w(name aina_version)
         | 
| 47 | 
            +
            		@replacements += replacements.flatten if replacements
         | 
| 48 | 
            +
            		@replacements = @replacements.map { |r| "{{#{r}}}" }
         | 
| 49 | 
            +
            	end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
            	def get_replacements
         | 
| 52 | 
            +
            		@replacements
         | 
| 53 | 
            +
            	end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            	def after_generate(*callbacks)
         | 
| 56 | 
            +
            		@after_generate = callbacks
         | 
| 57 | 
            +
            	end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
            	def get_after_generate
         | 
| 60 | 
            +
            		@after_generate
         | 
| 61 | 
            +
            	end
         | 
| 62 | 
            +
            end
         | 
| @@ -0,0 +1,72 @@ | |
| 1 | 
            +
            # Generable class
         | 
| 2 | 
            +
            class Generable::Base
         | 
| 3 | 
            +
            	extend Generable
         | 
| 4 | 
            +
            	attr_reader :name, :template, :file, :aina_version, :supports
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            	def initialize(name, options=nil)
         | 
| 7 | 
            +
            		@name = name
         | 
| 8 | 
            +
            		@options = options
         | 
| 9 | 
            +
            		@aina_version = Aina::VERSION
         | 
| 10 | 
            +
            		@template = self.template
         | 
| 11 | 
            +
            		@dir = self.dir
         | 
| 12 | 
            +
            		@file = generate_file_name
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            		set_custom_vars
         | 
| 15 | 
            +
            	end
         | 
| 16 | 
            +
            	
         | 
| 17 | 
            +
            	def set_custom_vars
         | 
| 18 | 
            +
            		# Nothing here
         | 
| 19 | 
            +
            		# This can be used in types to parse required instance variables
         | 
| 20 | 
            +
            	end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            	def dir
         | 
| 23 | 
            +
            		self.class.get_dir
         | 
| 24 | 
            +
            	end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            	def template
         | 
| 27 | 
            +
            		self.class.get_template
         | 
| 28 | 
            +
            	end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            	def replacements
         | 
| 31 | 
            +
            		self.class.get_replacements
         | 
| 32 | 
            +
            	end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            	def generate
         | 
| 35 | 
            +
            		text = File.read(@template)
         | 
| 36 | 
            +
            		replacements.each do |replace|
         | 
| 37 | 
            +
            			attribute = replace.gsub(/[{}]/, '')
         | 
| 38 | 
            +
            			@output = text.gsub!(/#{replace}/, self.send(attribute))
         | 
| 39 | 
            +
            		end
         | 
| 40 | 
            +
              	File.open(@file, "w") {|file| file.puts @output}
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              	after_generate
         | 
| 43 | 
            +
            	end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            	def after_generate
         | 
| 46 | 
            +
            		if self.class.get_after_generate
         | 
| 47 | 
            +
            			self.class.get_after_generate.each do |callback|
         | 
| 48 | 
            +
            				self.send(callback)
         | 
| 49 | 
            +
            			end
         | 
| 50 | 
            +
            		end
         | 
| 51 | 
            +
            	end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
            	def destroy
         | 
| 54 | 
            +
            		if File.exists?(@file)
         | 
| 55 | 
            +
            			File.delete(@file)
         | 
| 56 | 
            +
            		else
         | 
| 57 | 
            +
            			raise "No #{self.class} with name #{@name}"
         | 
| 58 | 
            +
            		end
         | 
| 59 | 
            +
            	end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
            	private
         | 
| 62 | 
            +
            		def generate_file_name
         | 
| 63 | 
            +
            			unless @dir.nil?
         | 
| 64 | 
            +
            				unless Dir.exists?(Dir.pwd + '/' + @dir)
         | 
| 65 | 
            +
            					Dir.mkdir(Dir.pwd + '/' + @dir)
         | 
| 66 | 
            +
            				end
         | 
| 67 | 
            +
            				Dir.pwd + "/#{@dir}/#{@name}.php"
         | 
| 68 | 
            +
            			else
         | 
| 69 | 
            +
            				Dir.pwd + "/#{@name}.php"
         | 
| 70 | 
            +
            			end
         | 
| 71 | 
            +
            		end
         | 
| 72 | 
            +
            end
         | 
| @@ -0,0 +1,49 @@ | |
| 1 | 
            +
            class PostType < Generable::Base
         | 
| 2 | 
            +
            	attr_reader :name_capitalize, :capability, :supports
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            	DEFAULT_SUPPORT 	 = 'title,editor,excerpt,thumbnail'
         | 
| 5 | 
            +
            	DEFAULT_CAPABILITY = 'post'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            	template 'post_type.php'
         | 
| 8 | 
            +
            	dir 'post-types'
         | 
| 9 | 
            +
            	replacements %w(name_capitalize capability supports)
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            	after_generate :install_aina_framework?, :include_post_type
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            	def set_custom_vars
         | 
| 14 | 
            +
            		@name_capitalize = self.name.capitalize
         | 
| 15 | 
            +
            		if @options
         | 
| 16 | 
            +
            			@supports = get_supports
         | 
| 17 | 
            +
            			@capability = get_capability
         | 
| 18 | 
            +
            		end
         | 
| 19 | 
            +
            	end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            	def get_supports
         | 
| 22 | 
            +
            		s = @options[:s] ? @options[:s] : DEFAULT_SUPPORT
         | 
| 23 | 
            +
            		s = s.split(',')
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            		supports = Array.new
         | 
| 26 | 
            +
            		s.each do |item|
         | 
| 27 | 
            +
            			supports << "'#{item}'"
         | 
| 28 | 
            +
            		end
         | 
| 29 | 
            +
            		supports.join(',')
         | 
| 30 | 
            +
            	end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            	def get_capability
         | 
| 33 | 
            +
            		@options[:c] ? @options[:c] : DEFAULT_CAPABILITY
         | 
| 34 | 
            +
            	end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            	protected
         | 
| 37 | 
            +
            		def install_aina_framework?
         | 
| 38 | 
            +
            			if @options and @options[:i]
         | 
| 39 | 
            +
            				Aina.install
         | 
| 40 | 
            +
            			end
         | 
| 41 | 
            +
            		end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            		def include_post_type
         | 
| 44 | 
            +
            			unless functions_php_exists?
         | 
| 45 | 
            +
            				create_empty_functions_php
         | 
| 46 | 
            +
            			end
         | 
| 47 | 
            +
            			File.open(functions_php, "a+") {|file| file.puts "\n/* Include #{self.name} */\nrequire_once '#{dir}/#{self.name}.php';\n"}
         | 
| 48 | 
            +
            		end
         | 
| 49 | 
            +
            end
         | 
    
        data/lib/aina/globals.rb
    ADDED
    
    
    
        data/lib/aina/support.rb
    ADDED
    
    | @@ -0,0 +1,46 @@ | |
| 1 | 
            +
            def is_wordpress_theme?
         | 
| 2 | 
            +
            	theme_path = Dir.pwd.split('/')
         | 
| 3 | 
            +
            	theme_path.pop
         | 
| 4 | 
            +
            	theme_path.last(2).join('/') == 'wp-content/themes'
         | 
| 5 | 
            +
            end
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            def tests_being_runned?
         | 
| 8 | 
            +
            	ENV['HOME'] == 'tmp/aruba'
         | 
| 9 | 
            +
            end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            def functions_php
         | 
| 12 | 
            +
            	Dir.pwd + "/functions.php"
         | 
| 13 | 
            +
            end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            def functions_php_exists?
         | 
| 16 | 
            +
              File.exists?(Dir.pwd + "/functions.php")
         | 
| 17 | 
            +
            end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            def create_empty_functions_php
         | 
| 20 | 
            +
            	unless functions_php_exists?
         | 
| 21 | 
            +
            		File.open(functions_php, "w") {|file| file.puts "<?php\n"}
         | 
| 22 | 
            +
            	end
         | 
| 23 | 
            +
            end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            def aina_inclusion
         | 
| 26 | 
            +
            	output = "\n/**\n"
         | 
| 27 | 
            +
            	output += " * Include Aina's framework\n"
         | 
| 28 | 
            +
            	output += " */\n"
         | 
| 29 | 
            +
            	output += "if ( file_exists( dirname(__FILE__) . '/inc/aina.php' ) ) {\n"
         | 
| 30 | 
            +
            	output += "	require_once 'inc/aina.php';\n"
         | 
| 31 | 
            +
            	output += "}\n"
         | 
| 32 | 
            +
            end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            class String
         | 
| 35 | 
            +
            	def camelcase
         | 
| 36 | 
            +
            		r = Array.new
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            		pieces = self.split(' ')
         | 
| 39 | 
            +
            		pieces = self.split('_') unless pieces.length > 1
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            		pieces.each do |p|
         | 
| 42 | 
            +
            			r << p.capitalize
         | 
| 43 | 
            +
            		end
         | 
| 44 | 
            +
            		r.join()
         | 
| 45 | 
            +
            	end
         | 
| 46 | 
            +
            end
         | 
    
        data/lib/aina/version.rb
    ADDED
    
    
    
        data/templates/add.php
    ADDED
    
    | @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            /**
         | 
| 2 | 
            +
             * Add meta box
         | 
| 3 | 
            +
             * add_meta_box( $id, $title, $callback, $post_type, $context, $priority );
         | 
| 4 | 
            +
             */
         | 
| 5 | 
            +
            if ( ! function_exists('{{name}}_meta_box') ) {
         | 
| 6 | 
            +
            	function {{name}}_meta_box(){
         | 
| 7 | 
            +
            	  add_meta_box("{{name}}_meta", "Extra", "add_{{name}}_custom_fields", "{{name}}", "normal", "low");
         | 
| 8 | 
            +
            	}
         | 
| 9 | 
            +
            	add_action("admin_init", "{{name}}_meta_box");
         | 
| 10 | 
            +
            }
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            /**
         | 
| 13 | 
            +
             * Add Custom Fields
         | 
| 14 | 
            +
             */
         | 
| 15 | 
            +
            if ( ! function_exists('add_{{name}}_custom_fields') ) {
         | 
| 16 | 
            +
            	function add_{{name}}_custom_fields() {
         | 
| 17 | 
            +
            	    aina_add_custom_fields('{{name}}');
         | 
| 18 | 
            +
            	}
         | 
| 19 | 
            +
            }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            /**
         | 
| 22 | 
            +
             * Make sure we can save it
         | 
| 23 | 
            +
             */
         | 
| 24 | 
            +
            if ( ! function_exists('save_{{name}}_custom') ) {
         | 
| 25 | 
            +
            	function save_{{name}}_custom() {
         | 
| 26 | 
            +
            	  aina_save_custom('{{name}}');
         | 
| 27 | 
            +
            	}
         | 
| 28 | 
            +
            	add_action('save_post', 'save_{{name}}_custom');
         | 
| 29 | 
            +
            }
         | 
| @@ -0,0 +1,138 @@ | |
| 1 | 
            +
            <?php
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            /**
         | 
| 4 | 
            +
             * Aina
         | 
| 5 | 
            +
             * Generated with Aina. Version {{aina_version}}
         | 
| 6 | 
            +
             */
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            /**
         | 
| 9 | 
            +
             * Include Custom Post-Types
         | 
| 10 | 
            +
             */
         | 
| 11 | 
            +
            if ( function_exists( 'aina_post_types' ) ) {
         | 
| 12 | 
            +
              foreach ( aina_post_types() as $pt ) {
         | 
| 13 | 
            +
                require dirname(dirname(__FILE__)) . '/post-types/' . $pt . '.php';
         | 
| 14 | 
            +
              }
         | 
| 15 | 
            +
            }
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            /**
         | 
| 18 | 
            +
             * Add Post-Type Custom Fields
         | 
| 19 | 
            +
             */
         | 
| 20 | 
            +
            function aina_add_custom_fields($post_type) {
         | 
| 21 | 
            +
                global $post;
         | 
| 22 | 
            +
                $custom = get_post_custom($post->ID);
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                $add_custom_function = $post_type . '_custom_fields';
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                $custom_fields = $add_custom_function();
         | 
| 27 | 
            +
              
         | 
| 28 | 
            +
                foreach ( $custom_fields as $field => $args ) {
         | 
| 29 | 
            +
                    $value  = isset($custom[$field][0]) ? $custom[$field][0] : null;
         | 
| 30 | 
            +
                    echo aina_custom_field_for($field, $value, $args);
         | 
| 31 | 
            +
                }
         | 
| 32 | 
            +
            }
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            /**
         | 
| 35 | 
            +
             * Make sure we can save it
         | 
| 36 | 
            +
             */
         | 
| 37 | 
            +
            function aina_save_custom($post_type) {
         | 
| 38 | 
            +
              global $post;
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              // Is this a new post being created?
         | 
| 41 | 
            +
              if ( ! isset($post->ID) ) return;
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              $add_custom_function = $post_type . '_custom_fields';
         | 
| 44 | 
            +
             | 
| 45 | 
            +
              $save_fields = $add_custom_function();
         | 
| 46 | 
            +
              
         | 
| 47 | 
            +
              foreach ( $save_fields as $field => $args ) {
         | 
| 48 | 
            +
                $value = null;
         | 
| 49 | 
            +
                if ( isset($_POST[$field]) ) {
         | 
| 50 | 
            +
                    if ( is_array($_POST[$field]) ) {
         | 
| 51 | 
            +
                        $value = $_POST[$field][0];
         | 
| 52 | 
            +
                    } else {
         | 
| 53 | 
            +
                        $value = $_POST[$field];
         | 
| 54 | 
            +
                    }
         | 
| 55 | 
            +
                }
         | 
| 56 | 
            +
                update_post_meta($post->ID, $field, $value);
         | 
| 57 | 
            +
              }
         | 
| 58 | 
            +
            }
         | 
| 59 | 
            +
             | 
| 60 | 
            +
            /**
         | 
| 61 | 
            +
             * Get single custom fields
         | 
| 62 | 
            +
             */
         | 
| 63 | 
            +
            function aina_get_field($post_type, $field = '') {
         | 
| 64 | 
            +
                global $post;
         | 
| 65 | 
            +
                $custom_fields = get_post_custom($post->ID);
         | 
| 66 | 
            +
                return isset($custom_fields[$field][0]) ? $custom_fields[$field][0] : false;
         | 
| 67 | 
            +
            }
         | 
| 68 | 
            +
             | 
| 69 | 
            +
            /**
         | 
| 70 | 
            +
             * Echo single custom fields
         | 
| 71 | 
            +
             * This is a wrapper for aina_get_field()
         | 
| 72 | 
            +
             */
         | 
| 73 | 
            +
            function aina_field($post_type, $field = '') {
         | 
| 74 | 
            +
                echo aina_get_field($post_type, $field);
         | 
| 75 | 
            +
            }
         | 
| 76 | 
            +
             | 
| 77 | 
            +
            /**
         | 
| 78 | 
            +
             * Custom Field For
         | 
| 79 | 
            +
             */
         | 
| 80 | 
            +
            function aina_custom_field_for($field, $value, $args = array()) {
         | 
| 81 | 
            +
              
         | 
| 82 | 
            +
              $return = '';
         | 
| 83 | 
            +
             | 
| 84 | 
            +
              if ( isset($args) && is_array($args) ) {
         | 
| 85 | 
            +
                
         | 
| 86 | 
            +
                // Is label set?
         | 
| 87 | 
            +
                if ( isset($args['label']) ) {
         | 
| 88 | 
            +
                  $return .= '<label>' . ucfirst($args['label']) . '</label><br />';
         | 
| 89 | 
            +
                } else {
         | 
| 90 | 
            +
                  $return .= '<label>' . ucfirst($field) . '</label><br />';
         | 
| 91 | 
            +
                }
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                // Options
         | 
| 94 | 
            +
                $placeholder = isset($args['placeholder']) ? $args['placeholder'] : '';
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                // Is type set?
         | 
| 97 | 
            +
                if ( isset($args['type']) ) {
         | 
| 98 | 
            +
                  switch ($args['type']) {
         | 
| 99 | 
            +
                    // Simple inputs
         | 
| 100 | 
            +
                    case 'text':
         | 
| 101 | 
            +
                      $return .= '<input type="text" name="' . $field . '" value="' . $value . '" placeholder="' . $placeholder . '" />';
         | 
| 102 | 
            +
                      break;
         | 
| 103 | 
            +
                    case 'url':
         | 
| 104 | 
            +
                      $return .= '<input type="url" name="' . $field . '" value="' . $value . '" placeholder="' . $placeholder . '" />';
         | 
| 105 | 
            +
                      break;
         | 
| 106 | 
            +
                    case 'email':
         | 
| 107 | 
            +
                      $return .= '<input type="email" name="' . $field . '" value="' . $value . '" placeholder="' . $placeholder . '" />';
         | 
| 108 | 
            +
                      break;
         | 
| 109 | 
            +
                    case 'datetime-local':
         | 
| 110 | 
            +
                    case 'datetime':
         | 
| 111 | 
            +
                      $return .= '<input type="datetime-local" name="' . $field . '" value="' . $value . '" />';
         | 
| 112 | 
            +
                      break;
         | 
| 113 | 
            +
                    case 'textarea':
         | 
| 114 | 
            +
                      $return .= '<textarea name="' . $field . '">' . $value . '</textarea>';
         | 
| 115 | 
            +
                      break;
         | 
| 116 | 
            +
             | 
| 117 | 
            +
                    // With options
         | 
| 118 | 
            +
                    case 'radio':
         | 
| 119 | 
            +
                      if ( isset($args['options']) && is_array($args['options']) ) {
         | 
| 120 | 
            +
                        foreach ($args['options'] as $option) {
         | 
| 121 | 
            +
                          $checked = $option == $value ? true : false;
         | 
| 122 | 
            +
                          $is_checked = $checked == true ? 'checked' : '';
         | 
| 123 | 
            +
                          $return .= '<input type="radio" name=" ' . $field . '[]" value="' . $option . '" ' . $is_checked . '/>' . $option;
         | 
| 124 | 
            +
                        }
         | 
| 125 | 
            +
                      }
         | 
| 126 | 
            +
                      break;
         | 
| 127 | 
            +
                    default:
         | 
| 128 | 
            +
                      # code...
         | 
| 129 | 
            +
                      break;
         | 
| 130 | 
            +
                  }
         | 
| 131 | 
            +
                }
         | 
| 132 | 
            +
              } else {
         | 
| 133 | 
            +
                $return .= '<label>' . ucfirst($field) . '</label><br />';
         | 
| 134 | 
            +
                $return .= '<input type="text" name=" ' . $field . '" value="' . $value . '" />';
         | 
| 135 | 
            +
              }
         | 
| 136 | 
            +
             | 
| 137 | 
            +
              return '<p>' . $return . '</p>';
         | 
| 138 | 
            +
            }
         | 
| @@ -0,0 +1,101 @@ | |
| 1 | 
            +
            <?php
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            /**
         | 
| 4 | 
            +
             * Custom Post Type: {{name_capitalize}}
         | 
| 5 | 
            +
             * Generated with Aina. Version {{aina_version}}
         | 
| 6 | 
            +
             */
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            /* {{name_capitalize}} Properties */
         | 
| 9 | 
            +
            function {{name}}_register() {
         | 
| 10 | 
            +
            	$labels = array(
         | 
| 11 | 
            +
            		'name'                  => _x("{{name_capitalize}}", '{{name}}'),
         | 
| 12 | 
            +
            		'singular_name'         => _x("{{name_capitalize}} Item", '{{name}}'),
         | 
| 13 | 
            +
            		'add_new'               => _x('New {{name_capitalize}} Item', '{{name}}'),
         | 
| 14 | 
            +
            		'add_new_item'          => __('Add New {{name_capitalize}} Item'),
         | 
| 15 | 
            +
            		'edit_item'             => __('Edit {{name_capitalize}} Item'),
         | 
| 16 | 
            +
            		'new_item'              => __('New {{name_capitalize}} Item'),
         | 
| 17 | 
            +
            		'view_item'             => __('View {{name_capitalize}} Item'),
         | 
| 18 | 
            +
            		'search_items'          => __('Search {{name_capitalize}} Items'),
         | 
| 19 | 
            +
            		'not_found'             => __('Nothing found'),
         | 
| 20 | 
            +
            		'not_found_in_trash'    => __('Nothing found in Trash'),
         | 
| 21 | 
            +
            		'parent_item_colon'     => '',
         | 
| 22 | 
            +
            	);
         | 
| 23 | 
            +
            	$args = array(
         | 
| 24 | 
            +
            		'labels'                => $labels,
         | 
| 25 | 
            +
            		'public'                => true,
         | 
| 26 | 
            +
            		'publicly_queryable'    => true,
         | 
| 27 | 
            +
            		'show_ui'               => true,
         | 
| 28 | 
            +
            		'query_var'             => true,
         | 
| 29 | 
            +
            		'menu_icon'             => false, // get_stylesheet_directory_uri() . '/your_pt_icon_here.png'
         | 
| 30 | 
            +
            		'rewrite'               => true,
         | 
| 31 | 
            +
            		'capability_type'       => '{{capability}}',
         | 
| 32 | 
            +
            		'hierarchical'          => true,
         | 
| 33 | 
            +
            		'has_archive'           => true,
         | 
| 34 | 
            +
            		'menu_position'         => null,
         | 
| 35 | 
            +
            		'supports'              => array({{supports}}),
         | 
| 36 | 
            +
            	); 
         | 
| 37 | 
            +
            	register_post_type( '{{name}}' , $args );
         | 
| 38 | 
            +
            }
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            add_action('init', '{{name}}_register');
         | 
| 41 | 
            +
             | 
| 42 | 
            +
             | 
| 43 | 
            +
            /* {{name_capitalize}} Taxonomy */
         | 
| 44 | 
            +
            add_action( 'init', 'register_taxonomy_{{name}}categories' );
         | 
| 45 | 
            +
             | 
| 46 | 
            +
            function register_taxonomy_{{name}}categories() {
         | 
| 47 | 
            +
            	// Taxonomy slug
         | 
| 48 | 
            +
            	${{name}}_taxonomy = '{{name}}categories';
         | 
| 49 | 
            +
             | 
| 50 | 
            +
            	$labels = array( 
         | 
| 51 | 
            +
            		'name'                       => _x( '{{name_capitalize}} Categories', ${{name}}_taxonomy ),
         | 
| 52 | 
            +
            		'singular_name'              => _x( '{{name_capitalize}} Category', ${{name}}_taxonomy ),
         | 
| 53 | 
            +
            		'search_items'               => _x( 'Search {{name_capitalize}} Category', ${{name}}_taxonomy ),
         | 
| 54 | 
            +
            		'popular_items'              => _x( 'Popular {{name_capitalize}} Category', ${{name}}_taxonomy ),
         | 
| 55 | 
            +
            		'all_items'                  => _x( 'All {{name_capitalize}} Category', ${{name}}_taxonomy ),
         | 
| 56 | 
            +
            		'parent_item'                => _x( 'Parent {{name_capitalize}} Category', ${{name}}_taxonomy ),
         | 
| 57 | 
            +
            		'parent_item_colon'          => _x( 'Parent {{name_capitalize}} Category:', ${{name}}_taxonomy ),
         | 
| 58 | 
            +
            		'edit_item'                  => _x( 'Edit {{name_capitalize}} Category', ${{name}}_taxonomy ),
         | 
| 59 | 
            +
            		'update_item'                => _x( 'Update {{name_capitalize}} Category', ${{name}}_taxonomy ),
         | 
| 60 | 
            +
            		'add_new_item'               => _x( 'Add New {{name_capitalize}} Category', ${{name}}_taxonomy ),
         | 
| 61 | 
            +
            		'new_item_name'              => _x( 'New {{name_capitalize}} Category', ${{name}}_taxonomy ),
         | 
| 62 | 
            +
            		'separate_items_with_commas' => _x( 'Separate {{name_capitalize}} Categories with commas', ${{name}}_taxonomy ),
         | 
| 63 | 
            +
            		'add_or_remove_items'        => _x( 'Add or remove {{name_capitalize}} Categories', ${{name}}_taxonomy ),
         | 
| 64 | 
            +
            		'choose_from_most_used'      => _x( 'Choose from the most used {{name_capitalize}} Categories', ${{name}}_taxonomy ),
         | 
| 65 | 
            +
            		'menu_name'                  => _x( '{{name_capitalize}} Category', ${{name}}_taxonomy ),
         | 
| 66 | 
            +
            	);
         | 
| 67 | 
            +
             | 
| 68 | 
            +
            	$args = array( 
         | 
| 69 | 
            +
            		'labels'                => $labels,
         | 
| 70 | 
            +
            		'public'                => true,
         | 
| 71 | 
            +
            		'show_in_nav_menus'     => true,
         | 
| 72 | 
            +
            		'show_ui'               => true,
         | 
| 73 | 
            +
            		'show_tagcloud'         => true,
         | 
| 74 | 
            +
            		'show_admin_column'     => true,
         | 
| 75 | 
            +
            		'hierarchical'          => true,
         | 
| 76 | 
            +
            		//'update_count_callback' => '',
         | 
| 77 | 
            +
            		'rewrite'               => array( 'hierarchical' => true ), // Use taxonomy as categories
         | 
| 78 | 
            +
            		'query_var'             => true
         | 
| 79 | 
            +
            	);
         | 
| 80 | 
            +
             | 
| 81 | 
            +
            	register_taxonomy( ${{name}}_taxonomy, array('{{name}}'), $args );
         | 
| 82 | 
            +
            }
         | 
| 83 | 
            +
             | 
| 84 | 
            +
            /**
         | 
| 85 | 
            +
             * Displays the {{name_capitalize}} post type icon in the dashboard
         | 
| 86 | 
            +
             */
         | 
| 87 | 
            +
            //add_action( 'admin_head', '{{name}}_icon' );
         | 
| 88 | 
            +
            function {{name}}_icon() {
         | 
| 89 | 
            +
            	echo '<style type="text/css" media="screen">
         | 
| 90 | 
            +
            					#menu-posts-projecte .wp-menu-image {
         | 
| 91 | 
            +
            							background: url(<?php echo get_stylesheet_directory_uri(); ?>/img/{{name}}-icon.png) no-repeat 6px 6px !important;
         | 
| 92 | 
            +
            					}
         | 
| 93 | 
            +
            					#menu-posts-projecte:hover .wp-menu-image, #menu-posts-projecte.wp-has-current-submenu .wp-menu-image {
         | 
| 94 | 
            +
            							background-position:6px -16px !important;
         | 
| 95 | 
            +
            					}
         | 
| 96 | 
            +
            					#icon-edit.icon32-posts-projecte {
         | 
| 97 | 
            +
            							background: url(<?php echo get_stylesheet_directory_uri(); ?>/img/{{name}}-32x32.png) no-repeat;
         | 
| 98 | 
            +
            					}
         | 
| 99 | 
            +
            			</style>';
         | 
| 100 | 
            +
            }
         | 
| 101 | 
            +
             | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,122 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: aina
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.2.0.beta
         | 
| 5 | 
            +
            platform: ruby
         | 
| 6 | 
            +
            authors:
         | 
| 7 | 
            +
            - Carles Jove i Buxeda
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 | 
            +
            bindir: bin
         | 
| 10 | 
            +
            cert_chain: []
         | 
| 11 | 
            +
            date: 2014-07-21 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: rake
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - '>='
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: '0'
         | 
| 20 | 
            +
              type: :development
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - '>='
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: '0'
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: rdoc
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - '>='
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: '0'
         | 
| 34 | 
            +
              type: :development
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 38 | 
            +
                - - '>='
         | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: '0'
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: aruba
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - '>='
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '0'
         | 
| 48 | 
            +
              type: :development
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - '>='
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: '0'
         | 
| 55 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            +
              name: gli
         | 
| 57 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - '='
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: 2.8.1
         | 
| 62 | 
            +
              type: :runtime
         | 
| 63 | 
            +
              prerelease: false
         | 
| 64 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                requirements:
         | 
| 66 | 
            +
                - - '='
         | 
| 67 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                    version: 2.8.1
         | 
| 69 | 
            +
            description: 
         | 
| 70 | 
            +
            email: info@joanielena.cat
         | 
| 71 | 
            +
            executables:
         | 
| 72 | 
            +
            - aina
         | 
| 73 | 
            +
            extensions: []
         | 
| 74 | 
            +
            extra_rdoc_files:
         | 
| 75 | 
            +
            - README.rdoc
         | 
| 76 | 
            +
            - aina.rdoc
         | 
| 77 | 
            +
            files:
         | 
| 78 | 
            +
            - bin/aina
         | 
| 79 | 
            +
            - lib/aina/addable.rb
         | 
| 80 | 
            +
            - lib/aina/generable.rb
         | 
| 81 | 
            +
            - lib/aina/globals.rb
         | 
| 82 | 
            +
            - lib/aina/support.rb
         | 
| 83 | 
            +
            - lib/aina/version.rb
         | 
| 84 | 
            +
            - lib/aina/generable/base.rb
         | 
| 85 | 
            +
            - lib/aina/generable/types/post_type.rb
         | 
| 86 | 
            +
            - templates/add.php
         | 
| 87 | 
            +
            - templates/aina_framework.php
         | 
| 88 | 
            +
            - templates/post_type.php
         | 
| 89 | 
            +
            - lib/aina.rb
         | 
| 90 | 
            +
            - README.rdoc
         | 
| 91 | 
            +
            - aina.rdoc
         | 
| 92 | 
            +
            homepage: http://joanielena.cat
         | 
| 93 | 
            +
            licenses: []
         | 
| 94 | 
            +
            metadata: {}
         | 
| 95 | 
            +
            post_install_message: 
         | 
| 96 | 
            +
            rdoc_options:
         | 
| 97 | 
            +
            - --title
         | 
| 98 | 
            +
            - aina
         | 
| 99 | 
            +
            - --main
         | 
| 100 | 
            +
            - README.rdoc
         | 
| 101 | 
            +
            - -ri
         | 
| 102 | 
            +
            require_paths:
         | 
| 103 | 
            +
            - lib
         | 
| 104 | 
            +
            - lib
         | 
| 105 | 
            +
            - templates
         | 
| 106 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 107 | 
            +
              requirements:
         | 
| 108 | 
            +
              - - '>='
         | 
| 109 | 
            +
                - !ruby/object:Gem::Version
         | 
| 110 | 
            +
                  version: '0'
         | 
| 111 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 112 | 
            +
              requirements:
         | 
| 113 | 
            +
              - - '>'
         | 
| 114 | 
            +
                - !ruby/object:Gem::Version
         | 
| 115 | 
            +
                  version: 1.3.1
         | 
| 116 | 
            +
            requirements: []
         | 
| 117 | 
            +
            rubyforge_project: 
         | 
| 118 | 
            +
            rubygems_version: 2.0.3
         | 
| 119 | 
            +
            signing_key: 
         | 
| 120 | 
            +
            specification_version: 4
         | 
| 121 | 
            +
            summary: Code generation for WordPress
         | 
| 122 | 
            +
            test_files: []
         |