apipie-rails 0.0.13 → 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/Gemfile.lock +5 -3
  2. data/README.rst +688 -0
  3. data/apipie-rails.gemspec +2 -4
  4. data/app/controllers/apipie/apipies_controller.rb +73 -41
  5. data/app/views/apipie/apipies/index.html.erb +10 -3
  6. data/app/views/apipie/apipies/method.html.erb +5 -2
  7. data/app/views/apipie/apipies/resource.html.erb +10 -3
  8. data/lib/apipie-rails.rb +1 -0
  9. data/lib/apipie/apipie_module.rb +28 -79
  10. data/lib/apipie/application.rb +194 -97
  11. data/lib/apipie/client/generator.rb +5 -4
  12. data/lib/apipie/configuration.rb +112 -0
  13. data/lib/apipie/dsl_definition.rb +93 -16
  14. data/lib/apipie/extractor.rb +12 -5
  15. data/lib/apipie/extractor/collector.rb +1 -1
  16. data/lib/apipie/extractor/recorder.rb +2 -1
  17. data/lib/apipie/extractor/writer.rb +11 -4
  18. data/lib/apipie/helpers.rb +15 -4
  19. data/lib/apipie/markup.rb +3 -4
  20. data/lib/apipie/method_description.rb +28 -22
  21. data/lib/apipie/resource_description.rb +44 -42
  22. data/lib/apipie/routing.rb +3 -1
  23. data/lib/apipie/static_dispatcher.rb +0 -1
  24. data/lib/apipie/version.rb +1 -1
  25. data/lib/generators/apipie/install/README +6 -0
  26. data/lib/generators/apipie/install/install_generator.rb +25 -0
  27. data/lib/generators/apipie/install/templates/initializer.rb.erb +7 -0
  28. data/lib/tasks/apipie.rake +31 -39
  29. data/spec/controllers/api/v1/architectures_controller_spec.rb +30 -0
  30. data/spec/controllers/api/v2/architectures_controller_spec.rb +12 -0
  31. data/spec/controllers/apipies_controller_spec.rb +18 -12
  32. data/spec/controllers/users_controller_spec.rb +56 -19
  33. data/spec/dummy/app/controllers/api/base_controller.rb +4 -0
  34. data/spec/dummy/app/controllers/api/v1/architectures_controller.rb +32 -0
  35. data/spec/dummy/app/controllers/api/v1/base_controller.rb +11 -0
  36. data/spec/dummy/app/controllers/api/v2/architectures_controller.rb +32 -0
  37. data/spec/dummy/app/controllers/api/v2/base_controller.rb +11 -0
  38. data/spec/dummy/app/controllers/twitter_example_controller.rb +1 -1
  39. data/spec/dummy/app/controllers/users_controller.rb +2 -3
  40. data/spec/dummy/config/initializers/apipie.rb +29 -6
  41. data/spec/lib/method_description_spec.rb +29 -0
  42. data/spec/lib/param_description_spec.rb +41 -0
  43. data/spec/lib/resource_description_spec.rb +28 -0
  44. data/spec/spec_helper.rb +1 -1
  45. metadata +99 -164
  46. data/README.rdoc +0 -367
  47. data/lib/apipie/client/base.rb +0 -133
  48. data/lib/apipie/client/cli_command.rb +0 -130
  49. data/lib/apipie/client/main.rb +0 -101
  50. data/lib/apipie/client/rest_client_oauth.rb +0 -19
  51. data/lib/apipie/client/template/Gemfile.tt +0 -3
  52. data/lib/apipie/client/template/README.tt +0 -3
  53. data/lib/apipie/client/template/Rakefile.tt +0 -2
  54. data/lib/apipie/client/template/a_name.gemspec.tt +0 -23
  55. data/lib/apipie/client/template/bin/bin.rb.tt +0 -30
  56. data/lib/apipie/client/template/lib/a_name.rb.tt +0 -27
  57. data/lib/apipie/client/template/lib/a_name/commands/cli.rb.tt +0 -22
  58. data/lib/apipie/client/template/lib/a_name/config.yml +0 -6
  59. data/lib/apipie/client/template/lib/a_name/resources/resource.rb.tt +0 -22
  60. data/lib/apipie/client/template/lib/a_name/version.rb.tt +0 -3
  61. data/lib/apipie/client/thor.rb +0 -21
  62. data/rubygem-apipie-rails.spec +0 -122
  63. data/spec/lib/parameter_description_spec.rb +0 -41
@@ -1,130 +0,0 @@
1
- module Apipie
2
- module Client
3
- class CliCommand < Thor
4
- no_tasks do
5
- def client
6
- resource_class = apipie_options[:client_module]::Resources.const_get(self.class.name[/[^:]*$/])
7
- @client ||= resource_class.new(apipie_options[:config])
8
- end
9
-
10
- def transform_options(inline_params, transform_hash = { })
11
- # we use not mentioned params without change
12
- transformed_options = (options.keys - transform_hash.values.flatten - inline_params).reduce({ }) { |h, k| h.update(k => options[k]) }
13
-
14
- inline_params.each { |p| transformed_options[p] = options[p] }
15
-
16
- transform_hash.each do |sub_key, params|
17
- transformed_options[sub_key] = { }
18
- params.each { |p| transformed_options[sub_key][p] = options[p] if options.has_key?(p) }
19
- end
20
-
21
- return transformed_options
22
- end
23
-
24
- def print_data(data)
25
- case data
26
- when Array
27
- print_big_table(table_from_array(data))
28
- when Hash
29
- print_table(table_from_hash(data))
30
- else
31
- print_unknown(data)
32
- end
33
- end
34
-
35
- # unifies the data for further processing. e.g.
36
- #
37
- # { "user" => {"username" => "test", "password" => "changeme" }
38
- #
39
- # becomes:
40
- #
41
- # { "username" => "test", "password" => "changeme" }
42
- def normalize_item_data(item)
43
- if item.size == 1 && item.values.first.is_a?(Hash)
44
- item.values.first
45
- else
46
- item
47
- end
48
- end
49
-
50
- def table_from_array(data)
51
- return [] if data.empty?
52
- table = []
53
- items = data.map { |item| normalize_item_data(item) }
54
- columns = items.first.keys
55
- table << columns
56
- items.each do |item|
57
- row = columns.map { |c| item[c] }
58
- table << row.map(&:to_s)
59
- end
60
- return table
61
- end
62
-
63
- def table_from_hash(data)
64
- return [] if data.empty?
65
- table = []
66
- normalize_item_data(data).each do |k, v|
67
- table << ["#{k}:", v].map(&:to_s)
68
- end
69
- table
70
- end
71
-
72
- def print_unknown(data)
73
- say data
74
- end
75
-
76
- def print_big_table(table, options={ })
77
- return if table.empty?
78
-
79
- formats, ident, colwidth = [], options[:ident].to_i, options[:colwidth]
80
- options[:truncate] = terminal_width if options[:truncate] == true
81
-
82
- formats << "%-#{colwidth + 2}s" if colwidth
83
- start = colwidth ? 1 : 0
84
-
85
- start.upto(table.first.length - 2) do |i|
86
- maxima ||= table.max { |a, b| a[i].size <=> b[i].size }[i].size
87
- formats << "%-#{maxima + 2}s"
88
- end
89
-
90
- formats << "%s"
91
- formats[0] = formats[0].insert(0, " " * ident)
92
-
93
- header_printed = false
94
- table.each do |row|
95
- sentence = ""
96
-
97
- row.each_with_index do |column, i|
98
- sentence << formats[i] % column.to_s
99
- end
100
-
101
- sentence = truncate(sentence, options[:truncate]) if options[:truncate]
102
- $stdout.puts sentence
103
- say(set_color("-" * sentence.size, :green)) unless header_printed
104
- header_printed = true
105
- end
106
- end
107
-
108
- end
109
-
110
- class << self
111
- def help(shell, subcommand = true)
112
- list = self.printable_tasks(true, subcommand)
113
- Thor::Util.thor_classes_in(self).each do |klass|
114
- list += printable_tasks(false)
115
- end
116
- list.sort! { |a, b| a[0] <=> b[0] }
117
-
118
- shell.say
119
- shell.print_table(list, :indent => 2, :truncate => true)
120
- shell.say
121
- Thor.send(:class_options_help, shell)
122
- end
123
-
124
- def banner(task, namespace = nil, subcommand = false)
125
- task.name
126
- end
127
- end
128
- end
129
- end
130
- end
@@ -1,101 +0,0 @@
1
- require "apipie/client/thor"
2
- require "apipie/client/cli_command"
3
-
4
- module Apipie
5
- module Client
6
- class Main < Thor
7
-
8
- def help(meth = nil)
9
- if meth && !self.respond_to?(meth)
10
- initialize_thorfiles(meth)
11
- klass, task = Thor::Util.find_class_and_task_by_namespace(meth)
12
- self.class.handle_no_task_error(task, false) if klass.nil?
13
- klass.start(["-h", task].compact, :shell => self.shell)
14
- else
15
- say "#{apipie_options[:name].capitalize} CLI"
16
- say
17
- invoke :commands
18
- end
19
- end
20
-
21
- desc "commands [SEARCH]", "List the available commands"
22
- def commands(search="")
23
- initialize_thorfiles
24
- klasses = Thor::Base.subclasses
25
- display_klasses(false, false, klasses)
26
- end
27
-
28
- class << self
29
- private
30
- def dispatch(task, given_args, given_options, config)
31
- parser = Thor::Options.new :auth => Thor::Option.parse(%w[auth -a], :string)
32
- opts = parser.parse(given_args)
33
- if opts['auth']
34
- username, password = opts['auth'].split(':')
35
- apipie_options[:config][:username] = username
36
- apipie_options[:config][:password] = password
37
- end
38
- remaining = parser.remaining
39
-
40
- super(task, remaining, given_options, config)
41
- end
42
- end
43
-
44
- private
45
-
46
- def method_missing(meth, *args)
47
- meth = meth.to_s
48
- initialize_thorfiles(meth)
49
- klass, task = Thor::Util.find_class_and_task_by_namespace(meth)
50
- args.unshift(task) if task
51
- klass.start(args, :shell => self.shell)
52
- end
53
-
54
- # Load the thorfiles. If relevant_to is supplied, looks for specific files
55
- # in the thor_root instead of loading them all.
56
- #
57
- # By default, it also traverses the current path until find Thor files, as
58
- # described in thorfiles. This look up can be skipped by suppliying
59
- # skip_lookup true.
60
- #
61
- def initialize_thorfiles(relevant_to=nil, skip_lookup=false)
62
- thorfiles.each do |f|
63
- Thor::Util.load_thorfile(f, nil, options[:debug])
64
- end
65
- end
66
-
67
- def thorfiles
68
- Dir[File.expand_path("*/commands/*.thor", apipie_options[:root])]
69
- end
70
-
71
- # Display information about the given klasses. If with_module is given,
72
- # it shows a table with information extracted from the yaml file.
73
- #
74
- def display_klasses(with_modules=false, show_internal=false, klasses=Thor::Base.subclasses)
75
- klasses -= [Thor, Main, ::Apipie::Client::CliCommand, ::Thor] unless show_internal
76
-
77
- show_modules if with_modules && !thor_yaml.empty?
78
-
79
- list = Hash.new { |h, k| h[k] = [] }
80
- groups = []
81
-
82
- # Get classes which inherit from Thor
83
- (klasses - groups).each { |k| list[k.namespace.split(":").first] += k.printable_tasks(false) }
84
-
85
- # Get classes which inherit from Thor::Base
86
- groups.map! { |k| k.printable_tasks(false).first }
87
- list["root"] = groups
88
-
89
- # Order namespaces with default coming first
90
- list = list.sort { |a, b| a[0].sub(/^default/, '') <=> b[0].sub(/^default/, '') }
91
- list.each { |n, tasks| display_tasks(n, tasks) unless tasks.empty? }
92
- end
93
-
94
- def display_tasks(namespace, list) #:nodoc:
95
- say namespace
96
- end
97
- end
98
- end
99
-
100
- end
101
-
@@ -1,19 +0,0 @@
1
- unless RestClient.const_defined? :OAUTH_EXTENSION
2
- RestClient::OAUTH_EXTENSION = lambda do |request, args|
3
- if args[:oauth]
4
- uri = URI.parse args[:url]
5
- default_options = { :site => "#{uri.scheme}://#{uri.host}:#{uri.port.to_s}",
6
- :request_token_path => "",
7
- :authorize_path => "",
8
- :access_token_path => "" }
9
- options = default_options.merge args[:oauth][:options] || { }
10
- consumer = OAuth::Consumer.new(args[:oauth][:consumer_key], args[:oauth][:consumer_secret], options)
11
-
12
- consumer.sign!(request)
13
- end
14
- end
15
- end
16
-
17
- unless RestClient.before_execution_procs.include? RestClient::OAUTH_EXTENSION
18
- RestClient.add_before_execution_proc &RestClient::OAUTH_EXTENSION
19
- end
@@ -1,3 +0,0 @@
1
- source :rubygems
2
-
3
- gemspec
@@ -1,3 +0,0 @@
1
- This is a readme file for this gem.
2
-
3
- Let the code be with you!
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env rake
2
- require "bundler/gem_tasks"
@@ -1,23 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/<%= name %><%= suffix %>/version', __FILE__)
3
-
4
- Gem::Specification.new do |gem|
5
- gem.authors = ["TODO"]
6
- gem.email = ["TODO"]
7
- gem.description = %q{TODO: Write a gem description}
8
- gem.summary = %q{TODO: Write a gem summary}
9
- gem.homepage = ""
10
-
11
- gem.files = `git ls-files`.split($\)
12
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
- gem.name = "<%= name %><%= suffix %>"
15
- gem.require_paths = ["lib"]
16
- gem.version = <%= class_base %><%= class_suffix %>::VERSION
17
-
18
- <% if all? %>gem.add_dependency 'thor', '>= 0.15.4'<% end %>
19
- gem.add_dependency 'apipie-rails', '~> <%= Apipie::VERSION %>'
20
- gem.add_dependency 'json'
21
- gem.add_dependency 'rest-client', '>= 1.6.1'
22
- gem.add_dependency 'oauth'
23
- end
@@ -1,30 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require "rubygems" # ruby1.9 doesn't "require" it though
3
- require "pathname"
4
- require "thor"
5
- require 'thor/core_ext/file_binary_read'
6
-
7
- load_path = File.expand_path("../../lib", __FILE__)
8
- $: << load_path unless $:.include?(load_path)
9
-
10
- name, suffix = "<%= name %>", "<%= suffix %>"
11
-
12
- require name + suffix
13
- require 'apipie/client/main'
14
-
15
- client_module = Object.const_get "<%= class_base %><%= class_suffix %>"
16
-
17
- begin
18
- Apipie::Client::Main.apipie_options = { :name => name,
19
- :config => client_module.client_config,
20
- :client_module => client_module,
21
- :root => client_module.root }
22
- Apipie::Client::Main.start
23
- rescue RestClient::Exception => e
24
- $stderr.puts e.message
25
- exit 1
26
- rescue Errno::ECONNREFUSED => e
27
- $stderr.puts "Server #{client_module.client_config[:base_url]} not available"
28
- $stderr.puts e.message
29
- exit 1
30
- end
@@ -1,27 +0,0 @@
1
- require 'apipie/client/base'
2
- require 'json'
3
- require 'yaml'
4
-
5
- Object.const_set("<%= class_base + class_suffix %>", client_module = Module.new do
6
- def self.client_config
7
- @client_config ||= YAML.load_file("#{root}/#{name}/config.yml")
8
- end
9
-
10
- def self.root
11
- @root ||= File.expand_path(File.dirname(__FILE__))
12
- end
13
-
14
- def self.name
15
- "<%= name %><%= suffix %>"
16
- end
17
-
18
- def self.doc
19
- @doc ||= File.open("#{root}/#{name}/documentation.json", 'r') do |f|
20
- JSON.load(f.read)['docs']
21
- end
22
- end
23
- end)
24
-
25
- require '<%= name %><%= suffix %>/version'
26
- resource_files = Dir[File.expand_path("#{client_module.root}/#{client_module.name}/resources/*.rb", __FILE__)]
27
- resource_files.each { |f| require f }
@@ -1,22 +0,0 @@
1
- class <%= resource_name.camelize %> < Apipie::Client::CliCommand
2
-
3
- <% resource[:methods].each do |method| -%>
4
- desc '<%= method[:name] %>', '<%= api(method)[:short_description] %>'
5
- <% params_in_path(method).each do |param| -%>
6
- method_option :<%= param %>, :required => 'true'
7
- <% end
8
- method[:params].map {|p| p[:expected_type] == "hash" ? (p[:params] || p) : p}.flatten.each do |param| -%>
9
- method_option :<%= param[:name] %>, :required => <%= param[:required] ? 'true' : 'false' %>, :desc => '<%= plaintext(param[:description]) %>', :type => :<%= param[:expected_type] %>
10
- <% end -%>
11
- def <%= method[:name] %>
12
- <% #if params_in_path(method).any? || transformation_hash(method).any?
13
- transform_options_params = [params_in_path(method).inspect]
14
- transform_options_params << transformation_hash(method).inspect if transformation_hash(method).any? -%>
15
- params = transform_options(<%= transform_options_params.join(", ").html_safe %>)
16
- <% #end -%>
17
- data, resp = client.<%= method[:name] %>(params)
18
- print_data(data)
19
- end
20
-
21
- <% end -%>
22
- end
@@ -1,6 +0,0 @@
1
- ---
2
- :base_url: http://localhost:3000
3
- :enable_validations: false
4
- :oauth:
5
- :consumer_key: consumer
6
- :consumer_secret: shhhh
@@ -1,22 +0,0 @@
1
- module <%= class_base %><%= class_suffix %>
2
- module Resources
3
- class <%= resource_name.camelize %> < Apipie::Client::Base
4
- def self.doc
5
- @doc ||= <%= class_base %><%= class_suffix %>.doc['resources']["<%= resource_key %>"]
6
- end
7
- <% resource[:methods].each do |method| -%>
8
-
9
- # @param [Hash] params a hash of params to be passed to the service
10
- # allowed keys are: <%= validation(method).inspect %>
11
- #
12
- # @param [Hash] headers additional http headers
13
- def <%= method[:name] %>(params = { }, headers = { })
14
- check_params params, :allowed => <%= method[:params].any? %>, :method => __method__
15
- url, params = fill_params_in_url "<%= api(method)[:api_url] %>", params
16
- call(:"<%= api(method)[:http_method].downcase %>", url, params, headers)
17
- end
18
- <% end -%>
19
-
20
- end
21
- end
22
- end
@@ -1,3 +0,0 @@
1
- module <%= class_base %><%= class_suffix %>
2
- VERSION = "0.0.1"
3
- end
@@ -1,21 +0,0 @@
1
- module Apipie
2
- module Client
3
- class Thor < ::Thor
4
-
5
- def self.apipie_options
6
- Apipie::Client::Thor.instance_variable_get :@apipie_options
7
- end
8
-
9
- no_tasks do
10
- def apipie_options
11
- self.class.apipie_options
12
- end
13
- end
14
-
15
- def self.apipie_options=(options)
16
- Apipie::Client::Thor.instance_variable_set :@apipie_options, options
17
- end
18
-
19
- end
20
- end
21
- end
@@ -1,122 +0,0 @@
1
- %global gem_name apipie-rails
2
-
3
- %if 0%{?rhel} == 6 || 0%{?fedora} < 17
4
- %define rubyabi 1.8
5
- %else
6
- %define rubyabi 1.9.1
7
- %endif
8
- %if 0%{?rhel} == 6
9
- %global gem_dir %(ruby -rubygems -e 'puts Gem::dir' 2>/dev/null)
10
- %global gem_docdir %{gem_dir}/doc/%{gem_name}-%{version}
11
- %global gem_cache %{gem_dir}/cache/%{gem_name}-%{version}.gem
12
- %global gem_spec %{gem_dir}/specifications/%{gem_name}-%{version}.gemspec
13
- %global gem_instdir %{gem_dir}/gems/%{gem_name}-%{version}
14
- %global gem_libdir %{gem_dir}/gems/%{gem_name}-%{version}/lib
15
- %endif
16
-
17
- Summary: Rails API documentation tool and client generator
18
- Name: rubygem-%{gem_name}
19
- Version: 0.0.11
20
- Release: 3%{?dist}
21
- Group: Development/Libraries
22
- License: MIT
23
- URL: http://github.com/Pajk/apipie-rails
24
- Source0: http://rubygems.org/downloads/%{gem_name}-%{version}.gem
25
- Requires: ruby(abi) >= %{rubyabi}
26
- Requires: rubygems
27
- %if 0%{?fedora}
28
- BuildRequires: rubygems-devel
29
- %endif
30
- BuildRequires: ruby(abi) >= %{rubyabi}
31
- BuildRequires: rubygems
32
- BuildArch: noarch
33
- Provides: rubygem(%{gem_name}) = %{version}
34
-
35
- %description
36
- This gem adds new methods to Rails controllers that can be used to describe
37
- resources exposed by API. Information entered with provided DSL are used
38
- to generate documentation, client or to validate incoming requests.
39
-
40
- %package doc
41
- BuildArch: noarch
42
- Requires: %{name} = %{version}-%{release}
43
- Summary: Documentation for rubygem-%{gem_name}
44
-
45
- %description doc
46
- This package contains documentation for rubygem-%{gem_name}.
47
-
48
- %prep
49
- %setup -q -c -T
50
- mkdir -p .%{gem_dir}
51
- gem install --local --install-dir .%{gem_dir} \
52
- --force %{SOURCE0} --no-rdoc --no-ri
53
-
54
- %build
55
-
56
- %install
57
- mkdir -p %{buildroot}%{gem_dir}
58
- cp -a .%{gem_dir}/* \
59
- %{buildroot}%{gem_dir}/
60
-
61
- %files
62
- %dir %{gem_instdir}
63
- %{gem_instdir}/app
64
- %{gem_instdir}/lib
65
- %exclude %{gem_instdir}/Gemfile.lock
66
- %exclude %{gem_cache}
67
- %{gem_spec}
68
- %doc %{gem_instdir}/MIT-LICENSE
69
- %doc %{gem_instdir}/APACHE-LICENSE-2.0
70
-
71
- %exclude %{gem_instdir}/spec
72
- %exclude %{gem_instdir}/rel-eng
73
- %exclude %{gem_instdir}/.gitignore
74
- %exclude %{gem_instdir}/.rspec
75
- %exclude %{gem_instdir}/.rvmrc
76
- %exclude %{gem_instdir}/.travis.yml
77
- %exclude %{gem_instdir}/rubygem-apipie-rails.spec
78
- %exclude %{gem_dir}/cache/%{gem_name}-%{version}.gem
79
-
80
- %files doc
81
- %doc %{gem_instdir}/MIT-LICENSE
82
- %doc %{gem_instdir}/README.rdoc
83
- %doc %{gem_instdir}/NOTICE
84
- %{gem_instdir}/Rakefile
85
- %{gem_instdir}/Gemfile
86
- %{gem_instdir}/%{gem_name}.gemspec
87
-
88
- %changelog
89
- * Fri Sep 07 2012 Miroslav Suchý <msuchy@redhat.com> 0.0.11-3
90
- - summary should not end with dot (msuchy@redhat.com)
91
- - fix spelling (msuchy@redhat.com)
92
- - do not package Gemfile.lock (msuchy@redhat.com)
93
-
94
- * Fri Aug 17 2012 Ivan Necas <inecas@redhat.com> 0.0.11-2
95
- - fix building for F17 reusing the macros from rubygem- devel
96
-
97
- * Wed Aug 15 2012 Pavel Pokorný <pajkycz@gmail.com> 0.0.11-1
98
- - apipie-rails v0.0.11
99
- - cli client improvements
100
-
101
- * Tue Jul 31 2012 Pavel Pokorný <pajkycz@gmail.com> 0.0.9-2
102
- - exclude documentation from rpm
103
-
104
- * Tue Jul 31 2012 Pavel Pokorný <pajkycz@gmail.com> 0.0.9-1
105
- - New version of apipie-rails gem (pajkycz@gmail.com)
106
- - fixed client generator
107
- - resource level error descriptions
108
- - response supported formats
109
-
110
- * Thu Jul 26 2012 Pavel Pokorný <pajkycz@gmail.com> 0.0.8-3
111
- - Require rubygems in spec file
112
-
113
- * Thu Jul 26 2012 Pavel Pokorný <pajkycz@gmail.com> 0.0.8-2
114
- - New version of apipie-rails gem
115
- - Generated client improvements
116
-
117
- * Thu Jul 26 2012 Pavel Pokorný <pajkycz@gmail.com> 0.0.7-2
118
- - removed doc files from rpm
119
-
120
- * Wed Jul 25 2012 Pavel Pokorný <pajkycz@gmail.com> 0.0.7-1
121
- - new package built with tito
122
-